package WebGUI::Operation::Trash;
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2004 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 _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=" . $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
$page = WebGUI::Page->getPage(3);
foreach $currentPage ($page->daughters) {
print "page: ".$currentPage->get('menuTitle')." - UID: ".$currentPage->get('bufferUserId')."\n\n\n
";
if ($currentPage->get('bufferUserId') == $userId) {
foreach $currentWobjectPage ($currentPage->self_and_descendants) {
_purgeWobjects($currentWobjectPage->get('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=$_[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 "") {
my $page = WebGUI::Page->getPage($session{form}{pageId});
if ( ($session{setting}{sharedTrash} ne "1") && (!(WebGUI::Privilege::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_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 .= '
|---|