package WebGUI::Operation::Trash; #------------------------------------------------------------------- # WebGUI is Copyright 2001-2003 Plain Black LLC. #------------------------------------------------------------------- # 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 Exporter; use strict qw(vars subs); use Tie::CPHash; use WebGUI::DateTime; use WebGUI::Icon; use WebGUI::Operation::Shared; use WebGUI::Paginator; use WebGUI::Privilege; use WebGUI::Session; use WebGUI::SQL; use WebGUI::URL; our @ISA = qw(Exporter); our @EXPORT = qw(&www_cutTrashItem &www_deleteTrashItem &www_deleteTrashItemConfirm &www_emptyTrash &www_emptyTrashConfirm &www_manageTrash); #------------------------------------------------------------------- sub _purgePage { } #------------------------------------------------------------------- sub _purgeUserTrash { my (%properties, $base, $extended, $b, $wobjectId, $namespace, $w, $cmd, $userId, $bufferId, $a, $pageId); 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=" . $userId); while ($base = $b->hashRef) { $extended = WebGUI::SQL->quickHashRef("select * from ".$base->{namespace}." where wobjectId=".$base->{wobjectId}); %properties = (%{$base}, %{$extended}); $cmd = "WebGUI::Wobject::".$properties{namespace}; $w = $cmd->new(\%properties); $w->purge; } $b->finish; # Delete pages and all subpages $a = WebGUI::SQL->read("select pageId from page where parentId=3 and bufferUserId=" . $userId); while (($pageId) = $a->array) { _recursePageTree($pageId); _purgeWobjects($pageId); WebGUI::SQL->write("delete from page where pageId=$pageId"); } $a->finish; } #------------------------------------------------------------------- sub _purgeWobject { my (%properties, $base, $extended, $b, $wobjectId, $namespace, $w, $cmd); tie %properties, 'Tie::CPHash'; $b = WebGUI::SQL->read("select * from wobject where wobjectId=$_[0]"); while ($base = $b->hashRef) { $extended = WebGUI::SQL->quickHashRef("select * from ".$base->{namespace}." where wobjectId=".$base->{wobjectId}); %properties = (%{$base}, %{$extended}); $cmd = "WebGUI::Wobject::".$properties{namespace}; $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=$_[0]"); while ($base = $b->hashRef) { $extended = WebGUI::SQL->quickHashRef("select * from ".$base->{namespace}." where wobjectId=".$base->{wobjectId}); %properties = (%{$base}, %{$extended}); $cmd = "WebGUI::Wobject::".$properties{namespace}; $w = $cmd->new(\%properties); $w->purge; } $b->finish; } #------------------------------------------------------------------- sub _recursePageTree { my ($a, $pageId); $a = WebGUI::SQL->read("select pageId from page where parentId=$_[0]"); while (($pageId) = $a->array) { _recursePageTree($pageId); _purgeWobjects($pageId); WebGUI::SQL->write("delete from page where pageId=$pageId"); } $a->finish; } #------------------------------------------------------------------- sub _submenu { my (%menu); tie %menu, 'Tie::IxHash'; $menu{WebGUI::URL::page('op=manageTrash')} = WebGUI::International::get(10); if ($session{form}{systemTrash} ne "1") { $menu{WebGUI::URL::page('op=emptyTrash')} = WebGUI::International::get(11); } if ( ($session{setting}{sharedTrash} ne "1") && (WebGUI::Privilege::isInGroup(3)) ) { $menu{WebGUI::URL::page('op=manageTrash&systemTrash=1')} = WebGUI::International::get(964); if ($session{form}{systemTrash} eq "1") { $menu{WebGUI::URL::page('op=emptyTrash&systemTrash=1')} = WebGUI::International::get(967); } } return menuWrapper($_[0],\%menu); } #------------------------------------------------------------------- sub www_cutTrashItem { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(4)); if ($session{form}{wid} ne "") { if ( ($session{setting}{sharedTrash} ne "1") && (!(WebGUI::Privilege::isInGroup(3)) ) ) { my ($bufferUserId) = WebGUI::SQL->quickArray("select bufferUserId from wobject " ."where wobjectId=" .$session{form}{wid}); return WebGUI::Privilege::insufficient() unless ($bufferUserId eq $session{user}{userId}); } WebGUI::SQL->write("update wobject set pageId=2, " ."bufferUserId=". $session{user}{userId} .", " ."bufferDate=". time() .", " ."bufferPrevId=3 " ."where wobjectId=" .$session{form}{wid}); WebGUI::ErrorHandler::audit("moved wobject ". $session{form}{wid} ." from trash to clipboard"); } elsif ($session{form}{pageId} ne "") { if ( ($session{setting}{sharedTrash} ne "1") && (!(WebGUI::Privilege::isInGroup(3)) ) ) { my ($bufferUserId) = WebGUI::SQL->quickArray("select bufferUserId from page " ."where pageId=" .$session{form}{pageId}); return WebGUI::Privilege::insufficient() unless ($bufferUserId eq $session{user}{userId}); } WebGUI::SQL->write("update page set parentId=2, " ."bufferUserId=". $session{user}{userId} .", " ."bufferDate=". time() .", " ."bufferPrevId=3 " ."where pageId=" .$session{form}{pageId}); WebGUI::ErrorHandler::audit("moved page ". $session{form}{pageId} ." from trash to clipboard"); } WebGUI::Session::refreshPageInfo($session{page}{pageId}); return ""; } #------------------------------------------------------------------- sub www_deleteTrashItem { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(4)); my ($output); if ($session{form}{wid} ne "") { $output .= helpIcon(14); } elsif ($session{form}{pageId} ne "") { $output .= helpIcon(3); } $output .= '
'; if ($session{form}{wid} ne "") { $output .= '
'; $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 .= '
|---|