package WebGUI::Operation::WebGUI; #------------------------------------------------------------------- # WebGUI is Copyright 2001-2006 Plain Black Corporation. #------------------------------------------------------------------- # Please read the legal notices (docs/legal.txt) and the license # (docs/license.txt) that came with this distribution before using # this software. #------------------------------------------------------------------- # http://www.plainblack.com info@plainblack.com #------------------------------------------------------------------- use Digest::MD5; use strict; use WebGUI::HTMLForm; use WebGUI::User; #------------------------------------------------------------------- =head2 www_genesis ( ) The beginning of WebGUI. =cut sub www_genesis { my $session = shift; $session->style->useEmptyStyle("1"); my $output = 'About WebGUI



And the Internet was without form, and void; and darkness was upon the face of the web. And Plain Black formed WebGUI of the dust of tags and script, and breathed into the web the breath of life; and content became a living soul.



Ruling WebGUI, 2:7




'; return $output; } #------------------------------------------------------------------- =head2 www_setup ( ) Initial setup for a brand new WebGUI install. Sets the administrator name, password and email address, as well as some other WebGUI settings. =cut sub www_setup { my $session = shift; return "" unless ($session->setting->get("specialState") eq "init"); my $i18n = WebGUI::International->new($session, "WebGUI"); my $output = ' WebGUI Initial Configuration

WebGUI Initial Configuration

'; if ($session->form->process("step") eq "2") { $output .= 'Company Information'; my $u = WebGUI::User->new($session,"3"); $u->username($session->form->process("username","text","Admin")); $u->profileField("email",$session->form->email("email")); $u->identifier(Digest::MD5::md5_base64($session->form->process("identifier","password","123qwe"))); my $f = WebGUI::HTMLForm->new($session,action=>$session->url->gateway()); $f->hidden( -name=>"op", -value=>"setup" ); $f->hidden( -name=>"step", -value=>"3" ); $f->text( -name=>"companyName", -value=>$session->setting->get("companyName"), -label=>$i18n->get(125), -hoverHelp=>$i18n->get('125 description'), ); $f->email( -name=>"companyEmail", -value=>$session->setting->get("companyEmail"), -label=>$i18n->get(126), -hoverHelp=>$i18n->get('126 description'), ); $f->url( -name=>"companyURL", -value=>$session->setting->get("companyURL"), -label=>$i18n->get(127), -hoverHelp=>$i18n->get('127 description'), ); $f->submit; $output .= $f->print; } elsif ($session->form->process("step") eq "3") { $session->setting->remove('specialState'); $session->setting->set('companyName',$session->form->text("companyName")); $session->setting->set('companyURL',$session->form->url("companyURL")); $session->setting->set('companyEmail',$session->form->email("companyEmail")); $session->http->setRedirect($session->url->gateway()); $session->http->sendHeader; return undef; } else { $output .= 'Admin Account'; my $u = WebGUI::User->new($session,'3'); my $f = WebGUI::HTMLForm->new($session,action=>$session->url->gateway()); $f->hidden( -name=>"op", -value=>"setup" ); $f->hidden( -name=>"step", -value=>"2" ); $f->text( -name=>"username", -value=>$u->username, -label=>$i18n->get(50), -hoverHelp=>$i18n->get('50 setup description'), ); $f->text( -name=>"identifier", -value=>"123qwe", -label=>$i18n->get(51), -hoverHelp=>$i18n->get('51 description'), -subtext=>'
('.$i18n->get("password clear text").')
' ); $f->email( -name=>"email", -value=>$u->profileField("email"), -label=>$i18n->get(56), -hoverHelp=>$i18n->get('56 description'), ); $f->submit; $output .= $f->print; } $output .= '
'; $session->http->setCacheControl("none"); $session->http->setMimeType("text/html"); $session->http->sendHeader; $session->output->print($output); } =head2 theWg ( ) The core WebGUI function. All WebGUI Assets, Operations and functions require this to work, even superseding the session variable. =cut #------------------------------------------------------------------- sub www_theWg { my $session = shift; $session->style->useEmptyStyle("1"); my $output = q|WebGUI
packageWebGUI;our$VERSION="|.$WebGUI::VERSION.q|";subpage{my$session=shift;my$assetUrl=shift\|\|$s
ession->url->getRequestedUrl;my$output=processOperations($session);if($outputeq"
"){my$asset=eval{WebGUI::Asset->newByUrl($session,$assetUrl,$session->form->proc
ess("revision"))};if($@){$session->errorHandler->warn("Couldn'tinstantiateassetf
orurl:".$assetUrl."Rootcause:".$@);}if(defined$asset){my$method="view";if($sessi
on->form->process("func")){$method=$session->form->process("func");unless($metho
d=~/^[A-Za-z]+$/){$session->errorHandler->security("tocallanon-existentmethod$me
thodon$assetUrl");$method="view";}}$output=tryAssetMethod($session,$asset,$metho
d);$output=tryAssetMethod($session,$asset,"view")unless($output\|\|($methodeq"view
"));}}if(defined($output)and$outputeq""){if($session->var->isAdminOn){my$asset=W
ebGUI::Asset->newByUrl($session,$session->url->getRefererUrl)\|\|WebGUI::Asset->ge
tDefault($session);$session->http->setRedirect($asset->getUrl("func=add;class=We
bGUI::Asset::Wobject::Layout;url=".$assetUrl));}else{$session->http->setStatus("
404","PageNotFound");my$notFound=WebGUI::Asset->getNotFound($session);if(defined
$notFound){$output=tryAssetMethod($session,$notFound,'view');}else{$session->err
orHandler->error("ThenotFoundpagecouldnotbeinstanciated!");$output="Anerrorwasen
counteredwhileprocessingyourrequest.";}$output="Anerrorwasencounteredwhileproces
singyourrequest."if$outputeq'';}}if($outputeq"chunked"){$output=undef;}return$ou
tput;}subprocessOperations{my$session=shift;my$output="";my$op=$session->form->p
rocess("op");if($op){$output=WebGUI::Operation::execute($session,$op);}return$ou
tput;}packageWebGUI::Asset;subcanView{my$self=shift;my$userId=shift\|\|$self->sess
ion->user->userId;my$user=WebGUI::User->new($self->session,$userId);return0unles
s($self->get("state")eq"published");if($userIdeq$self->get("ownerUserId")){retur
n1;}elsif($user->isInGroup($self->get("groupIdView"))){return1;}return$self->can
Edit($userId);}subnew{my$class=shift;my$session=shift;my$assetId=shift;returnund
efunless($assetId);my$className=shift;my$assetRevision=$session->stow->get("asse
tRevision");my$revisionDate=shift\|\|$assetRevision->{$assetId}{$session->scratch-
>get("versionTag")\|\|'_'};unless($revisionDate){($revisionDate)=$session->db->qui
ckArray("selectmax(revisionDate)fromassetDatawhereassetId=?and(status='approved'
orstatus='archived'ortagId=?)orderbyassetData.revisionDate",[$assetId,$session->
scratch->get("versionTag")]);$assetRevision->{$assetId}{$session->scratch->get("
versionTag")\|\|'_'}=$revisionDate;$session->stow->set("assetRevision",$assetRevis
ion);}returnundefunless($revisionDate);if($className){my$cmd="use".$className;ev
al($cmd);if($@){$session->errorHandler->error("Couldn'tcompileassetpackage:".$cl
assName.".Rootcause:".$@);returnundef;}$class=$className;}my$cache=WebGUI::Cache
->new($session,["asset",$assetId,$revisionDate]);my$properties=$cache->get;if(ex
ists$properties->{assetId}){#gotpropertiesfromcache}else{my$sql="select*fromasse
t";foreachmy$definition(@{$class->definition($session)}){$sql.="leftjoin".$defin
ition->{tableName}."onasset.assetId=".$definition->{tableName}.".assetIdand".$de
finition->{tableName}.".revisionDate=".$revisionDate;}$sql.="whereasset.assetId=
".$session->db->quote($assetId);$properties=$session->db->quickHashRef($sql);ret
urnundefunless(exists$properties->{assetId});$cache->set($properties,60*60*24);}
if(defined$properties){my$object={_session=>$session,_properties=>$properties};b
less$object,$class;return$object;}returnundef;}subaddRevision{my$self=shift;my$p
roperties=shift;my$now=shift\|\|$self->session->datetime->time();my$workingTag=Web
GUI::VersionTag->getWorking($self->session);$self->session->db->write("insertint
oassetData(assetId,revisionDate,revisedBy,tagId,status,url,ownerUserId,groupIdEd
|; return $output; } 1;