package WebGUI::Operation::WebGUI; #------------------------------------------------------------------- # WebGUI is Copyright 2001-2009 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 strict; #------------------------------------------------------------------- =head2 www_genesis ( ) The beginning of WebGUI. =cut sub www_genesis { my $session = shift; $session->style->useEmptyStyle("1"); my $output = '
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;