package WebGUI::Operation::Trash; #------------------------------------------------------------------- # WebGUI is Copyright 2001-2004 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 qw(vars subs); use Tie::CPHash; use WebGUI::AdminConsole; use WebGUI::DateTime; use WebGUI::Grouping; use WebGUI::Icon; use WebGUI::Page; use WebGUI::Paginator; use WebGUI::Privilege; use WebGUI::Session; use WebGUI::SQL; use WebGUI::URL; #------------------------------------------------------------------- sub _purgeUserTrash { my (%properties, $base, $extended, $b, $wobjectId, $namespace, $w, $cmd, $userId, $bufferId, $page, $currentPage, $currentWobjectPage); tie %properties, 'Tie::CPHash'; $userId = $session{user}{userId}; #WebGUI::ErrorHandler::audit("emptying user trash"); # Delete wobjects $b = WebGUI::SQL->read("select * from wobject where pageId='3' and bufferUserId=" . quote($userId)); while ($base = $b->hashRef) { $extended = WebGUI::SQL->quickHashRef("select * from ".$base->{namespace}." where wobjectId=".quote($base->{wobjectId})); %properties = (%{$base}, %{$extended}); $cmd = "WebGUI::Wobject::".$properties{namespace}; my $load = "use ".$cmd; eval($load); WebGUI::ErrorHandler::warn("Wobject failed to compile: $cmd.".$@) if($@); $w = $cmd->new(\%properties); $w->purge; } $b->finish; # Delete pages and all subpages $page = WebGUI::Page->getPage(3); foreach ($page->daughters) { $currentPage = WebGUI::Page->new($_); if ($currentPage->get('bufferUserId') eq $userId) { foreach $currentWobjectPage ($currentPage->self_and_descendants) { _purgeWobjects($currentWobjectPage->{'pageId'}); } $currentPage->purge; } } } #------------------------------------------------------------------- sub _purgeWobject { my (%properties, $base, $extended, $b, $wobjectId, $namespace, $w, $cmd); tie %properties, 'Tie::CPHash'; $b = WebGUI::SQL->read("select * from wobject where wobjectId=".quote($_[0])); while ($base = $b->hashRef) { $extended = WebGUI::SQL->quickHashRef("select * from ".$base->{namespace}." where wobjectId=".quote($base->{wobjectId})); %properties = (%{$base}, %{$extended}); $cmd = "WebGUI::Wobject::".$properties{namespace}; my $load = "use ".$cmd; eval($load); WebGUI::ErrorHandler::warn("Wobject failed to compile: $cmd.".$@) if($@); $w = $cmd->new(\%properties); $w->purge; } $b->finish; } #------------------------------------------------------------------- sub _purgeWobjects { my (%properties, $base, $extended, $b, $wobjectId, $namespace, $w, $cmd); tie %properties, 'Tie::CPHash'; $b = WebGUI::SQL->read("select * from wobject where pageId=".quote($_[0])); while ($base = $b->hashRef) { $extended = WebGUI::SQL->quickHashRef("select * from ".$base->{namespace}." where wobjectId=".quote($base->{wobjectId})); %properties = (%{$base}, %{$extended}); $cmd = "WebGUI::Wobject::".$properties{namespace}; my $load = "use ".$cmd; eval($load); WebGUI::ErrorHandler::warn("Wobject failed to compile: $cmd.".$@) if($@); $w = $cmd->new(\%properties); $w->purge; } $b->finish; } #------------------------------------------------------------------- sub _recursePageTree { my ($a, $pageId); $a = WebGUI::SQL->read("select pageId from page where parentId=".quote($_[0])); while (($pageId) = $a->array) { _recursePageTree($pageId); _purgeWobjects($pageId); WebGUI::SQL->write("delete from page where pageId=".quote($pageId)); } $a->finish; } #------------------------------------------------------------------- sub _submenu { my $workarea = shift; my $title = shift; $title = WebGUI::International::get($title) if ($title); my $help = shift; my $ac = WebGUI::AdminConsole->new("trash"); if ($help) { $ac->setHelp($help); } $ac->addSubmenuItem(WebGUI::URL::page('op=manageTrash'), WebGUI::International::get(10)); if ($session{form}{systemTrash} ne "1") { $ac->addSubmenuItem(WebGUI::URL::page('op=emptyTrash'), WebGUI::International::get(11)); } if ( ($session{setting}{sharedTrash} ne "1") && (WebGUI::Grouping::isInGroup(3)) ) { $ac->addSubmenuItem(WebGUI::URL::page('op=manageTrash&systemTrash=1'), WebGUI::International::get(964)); if ($session{form}{systemTrash} eq "1") { $ac->addSubmenuItem(WebGUI::URL::page('op=emptyTrash&systemTrash=1'), WebGUI::International::get(967)); } } return $ac->render($workarea, $title); } #------------------------------------------------------------------- sub www_cutTrashItem { return WebGUI::Privilege::insufficient() unless (WebGUI::Grouping::isInGroup(4)); if ($session{form}{wid} ne "") { if ( ($session{setting}{sharedTrash} ne "1") && (!(WebGUI::Grouping::isInGroup(3)) ) ) { my ($bufferUserId) = WebGUI::SQL->quickArray("select bufferUserId from wobject " ."where wobjectId=" .quote($session{form}{wid})); return WebGUI::Privilege::insufficient() unless ($bufferUserId eq $session{user}{userId}); } WebGUI::SQL->write("update wobject set pageId='2', " ."bufferUserId=". quote($session{user}{userId}) .", " ."bufferDate=". time() .", " ."bufferPrevId=3 " ."where wobjectId=" .quote($session{form}{wid})); WebGUI::ErrorHandler::audit("moved wobject ". $session{form}{wid} ." from trash to clipboard"); } elsif ($session{form}{pageId} ne "") { my $page = WebGUI::Page->getPage($session{form}{pageId}); if ( ($session{setting}{sharedTrash} ne "1") && (!(WebGUI::Grouping::isInGroup(3)) ) ) { my ($bufferUserId) = $page->get("bufferUserId"); return WebGUI::Privilege::insufficient() unless ($bufferUserId eq $session{user}{userId}); } $page->cut; WebGUI::ErrorHandler::audit("moved page ". $session{form}{pageId} ." from trash to clipboard"); } WebGUI::Session::refreshPageInfo($session{page}{pageId}); return ""; } #------------------------------------------------------------------- sub www_deleteTrashItemConfirm { return WebGUI::Privilege::insufficient() unless (WebGUI::Grouping::isInGroup(4)); if ($session{form}{wid} ne "") { if ( ($session{setting}{sharedTrash} eq "1") || (WebGUI::Grouping::isInGroup(3)) ) { _purgeWobject($session{form}{wid}); } else { my ($bufferUserId) = WebGUI::SQL->quickArray("select bufferUserId from wobject " ."where wobjectId=" .quote($session{form}{wid})); return WebGUI::Privilege::insufficient() unless ($bufferUserId eq $session{user}{userId}); _purgeWobject($session{form}{wid}); } WebGUI::ErrorHandler::audit("purged wobject ". $session{form}{wid} ." from trash"); } elsif ($session{form}{pageId} ne "") { my $page = WebGUI::Page->getPage($session{form}{pageId}); unless ( ($session{setting}{sharedTrash} eq "1") || (WebGUI::Grouping::isInGroup(3)) ) { my ($bufferUserId) = $page->get("bufferUserId"); return WebGUI::Privilege::insufficient() unless ($bufferUserId eq $session{user}{userId}); } foreach my $currentPage ($page->self_and_descendants) { _purgeWobjects($currentPage->{"pageId"}); } $page->purge; WebGUI::ErrorHandler::audit("purged page ". $session{form}{pageId} ." from trash"); } WebGUI::Session::refreshPageInfo($session{page}{pageId}); return ""; } #------------------------------------------------------------------- sub www_emptyTrash { return WebGUI::Privilege::insufficient() unless (WebGUI::Grouping::isInGroup(4)); my ($output); $output .= WebGUI::International::get(162).'
'; $output .= WebGUI::International::get(651).'
'; if ($session{form}{systemTrash} eq "1") { $output .= '
| '; $output .= ' | '. WebGUI::International::get(99) .' | '; $output .= ''. WebGUI::International::get(783) .' | '; $output .= ''. WebGUI::International::get(963) .' | '; $output .= ''. WebGUI::International::get(953) .' | '; if ($allUsers) { $output .= ''. WebGUI::International::get(50) .' | '; } $output .= '
|---|