RFE 654257 - user-separated clipboard and trash

This commit is contained in:
Ed Van Duinen 2003-05-13 20:35:08 +00:00
parent 1a3900d494
commit 7642295d20
10 changed files with 815 additions and 59 deletions

View file

@ -20,8 +20,9 @@ use WebGUI::Session;
use WebGUI::URL;
our @ISA = qw(Exporter);
our @EXPORT = qw(&helpIcon &becomeIcon &cutIcon &copyIcon &deleteIcon &editIcon &moveUpIcon &moveDownIcon
&moveRightIcon &moveLeftIcon &wobjectIcon &pageIcon &moveTopIcon &moveBottomIcon &viewIcon);
our @EXPORT = qw(&helpIcon &becomeIcon &cutIcon &copyIcon &deleteIcon &editIcon
&moveBottomIcon &moveDownIcon &moveLeftIcon &moveRightIcon &moveTopIcon &moveUpIcon
&pageIcon &pasteIcon &wobjectIcon &viewIcon);
=head1 NAME
@ -46,6 +47,7 @@ A package for generating user interface buttons. The subroutines found herein do
$html = moveTopIcon('op=something');
$html = moveUpIcon('op=something');
$html = pageIcon();
$html = pasteIcon('op=something');
$html = viewIcon('op=something');
$html = wobjectIcon();
@ -377,6 +379,34 @@ sub pageIcon {
#-------------------------------------------------------------------
=head2 pasteIcon ( urlParameters [, pageURL ] )
Generates a button with the word "Paste" printed on it.
=over
=item urlParameters
Any URL parameters that need to be tacked on to the current URL to accomplish whatever function this button represents.
=item pageURL
The URL to any page. Defaults to the current page.
=back
=cut
sub pasteIcon {
my ($output, $pageURL);
$pageURL = $_[1] || $session{page}{urlizedTitle};
$output = '<a href="'.WebGUI::URL::gateway($pageURL,$_[0]).'">';
$output .= '<img src="'.$session{config}{extrasURL}.'/toolbar/'.$session{language}{toolbar}.'/paste.gif" align="middle" border="0" alt="Paste" title="Paste" /></a>';
return $output;
}
#-------------------------------------------------------------------
=head2 viewIcon ( urlParameters [, pageURL ] )
Generates a button with the word "View" printed on it.

View file

@ -51,13 +51,25 @@ sub process {
#--clipboard paster
%hash2 = ();
$hash2{WebGUI::URL::page()} = WebGUI::International::get(3);
%hash = WebGUI::SQL->buildHash("select pageId,title from page where parentId=2 order by title");
# pages
if ($session{setting}{sharedClipboard} eq "1") {
%hash = WebGUI::SQL->buildHash("select pageId, title from page where parentId=2 order by bufferDate desc");
} else {
%hash = WebGUI::SQL->buildHash("select pageId, title from page where parentId=2 "
."and bufferUserId=". $session{user}{userId}. " order by bufferDate desc");
}
foreach $key (keys %hash) {
$hash2{WebGUI::URL::page('op=pastePage&pageId='.$key)} = $hash{$key};
}
%hash = WebGUI::SQL->buildHash("select wobjectId,title from wobject where pageId=2 order by title");
# wobjects
if ($session{setting}{sharedClipboard} eq "1") {
%hash = WebGUI::SQL->buildHash("select wobjectId, title from wobject where pageId=2 order by bufferDate desc");
} else {
%hash = WebGUI::SQL->buildHash("select wobjectId, title from wobject where pageId=2 "
."and bufferUserId=". $session{user}{userId} ." order by bufferDate desc");
}
foreach $key (keys %hash) {
$hash2{WebGUI::URL::page('func=paste&wid='.$key)} = $hash{$key};
$hash2{WebGUI::URL::page('func=paste&wid='.$key)} = $hash{$key};
}
$clipboardSelect = WebGUI::Form::selectList({
name=>"clipboardSelect",
@ -71,7 +83,6 @@ sub process {
WebGUI::URL::page('op=listGroups')=>WebGUI::International::get(5),
WebGUI::URL::page('op=manageSettings')=>WebGUI::International::get(4),
WebGUI::URL::page('op=listUsers')=>WebGUI::International::get(7),
WebGUI::URL::gateway('trash')=>WebGUI::International::get(10),
WebGUI::URL::page('op=listRoots')=>WebGUI::International::get(410),
WebGUI::URL::page('op=viewStatistics')=>WebGUI::International::get(144)
);
@ -80,8 +91,10 @@ sub process {
%hash = (
'http://validator.w3.org/check?uri=http%3A%2F%2F'.$session{env}{SERVER_NAME}.
WebGUI::URL::page()=>WebGUI::International::get(399),
WebGUI::URL::page('op=viewPageTree')=>WebGUI::International::get(447),
WebGUI::URL::page('op=manageClipboard')=>WebGUI::International::get(949),
WebGUI::URL::page('op=listCollateral')=>WebGUI::International::get(394),
WebGUI::URL::page('op=viewPageTree')=>WebGUI::International::get(447),
WebGUI::URL::page('op=manageTrash')=>WebGUI::International::get(10),
%hash
);
}

View file

@ -13,6 +13,7 @@ package WebGUI::Operation;
use strict;
use WebGUI::Operation::Account;
use WebGUI::Operation::Admin;
use WebGUI::Operation::Clipboard;
use WebGUI::Operation::Collateral;
use WebGUI::Operation::Group;
use WebGUI::Operation::Help;

View file

@ -0,0 +1,335 @@
package WebGUI::Operation::Clipboard;
#-------------------------------------------------------------------
# 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;
use WebGUI::DateTime;
use WebGUI::Grouping;
use WebGUI::HTMLForm;
use WebGUI::Icon;
use WebGUI::International;
use WebGUI::Operation::Shared;
use WebGUI::Page;
use WebGUI::Privilege;
use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::TabForm;
use WebGUI::URL;
use WebGUI::Utility;
our @ISA = qw(Exporter);
our @EXPORT = qw(&www_deleteClipboardItem &www_deleteClipboardItemConfirm
&www_emptyClipboard &www_emptyClipboardConfirm &www_manageClipboard);
#-------------------------------------------------------------------
sub _submenu {
my (%menu);
tie %menu, 'Tie::IxHash';
$menu{WebGUI::URL::page('op=manageClipboard')} = WebGUI::International::get(949);
$menu{WebGUI::URL::page('op=emptyClipboard')} = WebGUI::International::get(950);
if ( ($session{setting}{sharedClipboard} ne "1") && (WebGUI::Privilege::isInGroup(3)) ) {
$menu{WebGUI::URL::page('op=manageClipboard&systemClipboard=1')} = WebGUI::International::get(954);
$menu{WebGUI::URL::page('op=emptyClipboard&systemClipboard=1')} = WebGUI::International::get(959);
}
return menuWrapper($_[0],\%menu);
}
#-------------------------------------------------------------------
sub www_deleteClipboardItem {
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 .= '<h1>'.WebGUI::International::get(42).'</h1>';
$output .= WebGUI::International::get(956).'<p>';
if ($session{form}{wid} ne "") {
$output .= '<div align="center"><a href="'.WebGUI::URL::page('op=deleteClipboardItemConfirm&wid='
.$session{form}{wid}) . '">'.WebGUI::International::get(44).'</a>';
} elsif ($session{form}{pageId} ne "") {
$output .= '<div align="center"><a href="'.WebGUI::URL::page('op=deleteClipboardItemConfirm&pageId='
.$session{form}{pageId}) . '">'.WebGUI::International::get(44).'</a>';
}
$output .= '&nbsp;&nbsp;&nbsp;&nbsp;<a href="'.WebGUI::URL::page().'">'
.WebGUI::International::get(45).'</a></div>';
return $output;
}
#-------------------------------------------------------------------
sub www_deleteClipboardItemConfirm {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(4));
if ($session{form}{wid} ne "") {
if ( ($session{setting}{sharedClipboard} eq "1") || (WebGUI::Privilege::isInGroup(3)) ) {
WebGUI::SQL->write("update wobject set pageId=3, "
."bufferDate=".time().", "
."bufferUserId=".$session{user}{userId} .", "
."bufferPrevId=2 "
."where pageId=2 "
."and wobjectId=" . $session{form}{wid}
);
} else {
WebGUI::SQL->write("update wobject set pageId=3, "
."bufferDate=".time().", "
."bufferUserId=".$session{user}{userId} .", "
."bufferPrevId=2 "
."where pageId=2 "
."and wobjectId=" . $session{form}{wid} ." "
."and bufferUserId=".$session{user}{userId}
);
}
WebGUI::ErrorHandler::audit("moved wobject ". $session{form}{wid} ." from clipboard to trash");
} elsif ($session{form}{pageId} ne "") {
if ( ($session{setting}{sharedClipboard} eq "1") || (WebGUI::Privilege::isInGroup(3)) ) {
WebGUI::SQL->write("update page set parentId=3, "
."bufferDate=".time().", "
."bufferUserId=".$session{user}{userId} .", "
."bufferPrevId=2 "
."where parentId=2 "
."and pageId=".$session{form}{pageId}
);
} else {
WebGUI::SQL->write("update page set parentId=3, "
."bufferDate=".time().", "
."bufferUserId=".$session{user}{userId} .", "
."bufferPrevId=2 "
."where parentId=2 "
."and pageId=".$session{form}{pageId} ." "
."and bufferUserId=".$session{user}{userId}
);
}
WebGUI::ErrorHandler::audit("moved page ". $session{form}{pageId} ." from clipboard to trash");
}
WebGUI::Session::refreshPageInfo($session{page}{pageId},'op=manageClipboard');
return "";
}
#-------------------------------------------------------------------
sub www_emptyClipboard {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(4));
my ($output);
my $output = helpIcon(67);
$output .= '<h1>'.WebGUI::International::get(42).'</h1>';
$output .= WebGUI::International::get(951).'<p>';
if ( ($session{setting}{sharedClipboard} ne "1") && (WebGUI::Privilege::isInGroup(3)) ) {
$output .= '<div align="center"><a href="'.WebGUI::URL::page('op=emptyClipboardConfirm&systemClipboard=1')
.'">'.WebGUI::International::get(44).'</a>';
} else {
$output .= '<div align="center"><a href="'.WebGUI::URL::page('op=emptyClipboardConfirm')
.'">'.WebGUI::International::get(44).'</a>';
}
$output .= '&nbsp;&nbsp;&nbsp;&nbsp;<a href="'.WebGUI::URL::page().'">'
.WebGUI::International::get(45).'</a></div>';
return $output;
}
#-------------------------------------------------------------------
sub www_emptyClipboardConfirm {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(4));
my ($allUsers);
if ($session{setting}{sharedClipboard} eq "1") {
$allUsers = 1;
} elsif ($session{form}{systemClipboard} eq "1") {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
$allUsers = 1;
} else {
$allUsers = 0;
}
if ($allUsers eq "1") {
WebGUI::SQL->write("update page set parentId=3, "
."bufferDate=".time().", "
."bufferUserId=".$session{user}{userId} .", "
."bufferPrevId=2 "
."where parentId=2 ");
WebGUI::SQL->write("update wobject set pageId=3, "
."bufferDate=".time().", "
."bufferUserId=".$session{user}{userId} .", "
."bufferPrevId=2 "
."where pageId=2 ");
WebGUI::ErrorHandler::audit("emptied clipboard to trash");
} else {
WebGUI::SQL->write("update page set parentId=3, "
."bufferDate=".time().", "
."bufferUserId=".$session{user}{userId} .", "
."bufferPrevId=2 "
."where parentId=2 "
."and bufferUserId=".$session{user}{userId});
WebGUI::SQL->write("update wobject set pageId=3, "
."bufferDate=".time().", "
."bufferUserId=".$session{user}{userId} .", "
."bufferPrevId=2 "
."where pageId=2 "
."and bufferUserId=".$session{user}{userId});
WebGUI::ErrorHandler::audit("emptied user clipboard to trash");
}
WebGUI::Session::refreshPageInfo($session{page}{pageId});
return "";
}
#-------------------------------------------------------------------
sub www_manageClipboard {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(4));
my ($sth, @data, @row, $i, $p, $allUsers);
my $output = helpIcon(65);
if ($session{setting}{sharedClipboard} eq "1") {
$allUsers = 1;
$output .= '<h1>'. WebGUI::International::get(948) .'</h1>';
} elsif ($session{form}{systemClipboard} eq "1") {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
$allUsers = 1;
$output .= '<h1>'. WebGUI::International::get(955) .'</h1>';
} else {
$allUsers = 0;
$output .= '<h1>'. WebGUI::International::get(948) .'</h1>';
}
#
# Generate list of pages
#
if ($allUsers) {
$sth = WebGUI::SQL->read("select pageId,title,urlizedTitle,bufferUserId,bufferDate,bufferPrevId "
."from page where parentId=2 order by bufferDate desc,bufferUserId");
} else {
$sth = WebGUI::SQL->read("select pageId,title,urlizedTitle,bufferUserId,bufferDate,bufferPrevId "
."from page where parentId=2 and bufferUserId="
. $session{user}{userId} . " order by bufferDate desc");
}
while (@data = $sth->array) {
my ($pageId,$title,$urlizedTitle,$bufferUserId,$bufferDate,$bufferPrevId,$url);
$pageId = $data[0];
$title = $data[1];
$urlizedTitle = $data[2];
$title = '<a href="'. WebGUI::URL::gateway($urlizedTitle) .'">' .$title .'</a>';
$bufferUserId = $data[3];
if ($bufferUserId ne "") {
my ($bufferUsername) = WebGUI::SQL->quickArray("select username from users where userId=".$bufferUserId);
$bufferUserId = '<a href="' .WebGUI::URL::page('op=viewProfile&uid='.$bufferUserId) .'">'
.$bufferUsername .'</a>';
}
$bufferDate = epochToHuman($data[4]);
$bufferPrevId = $data[5];
if ($bufferPrevId ne "") {
($bufferPrevId,$url) = WebGUI::SQL->quickArray("select title,urlizedTitle "
."from page where pageId=".$bufferPrevId);
if ($url ne "") {
$bufferPrevId = '<a href="'. WebGUI::URL::gateway($url) .'">' .$bufferPrevId .'</a>';
}
}
$row[$i] = '<tr>';
$row[$i] .= '<td valign="top" class="tableData">'
.pageIcon()
.deleteIcon('op=deleteClipboardItem&pageId='.$pageId)
.pasteIcon('op=pastePage&pageId='.$pageId);
$row[$i] .= '</td>';
$row[$i] .= '<td valign="top" class="tableData">'.$title;
$row[$i] .= '</td>';
$row[$i] .= '<td valign="top" class="tableData">'.WebGUI::International::get(2);
$row[$i] .= '</td>';
$row[$i] .= '<td valign="top" class="tableData">'.$bufferDate;
$row[$i] .= '</td>';
$row[$i] .= '<td valign="top" class="tableData">'.$bufferPrevId;
$row[$i] .= '</td>';
if ($allUsers) {
$row[$i] .= '<td valign="top" class="tableData">'.$bufferUserId;
$row[$i] .= '</td>';
}
$row[$i] .= '</tr>';
$i++;
}
#
# Generate list of wobjects
#
if ($allUsers) {
$sth = WebGUI::SQL->read("select wobjectId,namespace,title,bufferUserId,bufferDate,bufferPrevId "
. "from wobject where pageId=2 order by bufferDate desc,bufferUserId");
} else {
$sth = WebGUI::SQL->read("select wobjectId,namespace,title,bufferUserId,bufferDate,bufferPrevId "
. "from wobject where pageId=2 and bufferUserId="
. $session{user}{userId} ." order by bufferDate desc");
}
while (@data = $sth->array) {
my ($wobjectId,$namespace,$title,$bufferUserId,$bufferDate,$bufferPrevId,$url);
$wobjectId = $data[0];
$namespace = $data[1];
$title = $data[2];
$title = '<a href="'. WebGUI::URL::page('func=view&wid='. $wobjectId) .'">'. $title .'</a>';
$bufferPrevId = $data[5];
if ($bufferPrevId ne "") {
($bufferPrevId,$url) = WebGUI::SQL->quickArray("select title,urlizedTitle "
."from page where pageId=".$bufferPrevId);
if ($url ne "") {
$bufferPrevId = '<a href="'. WebGUI::URL::gateway($url) .'">' .$bufferPrevId .'</a>';
}
}
$bufferDate = epochToHuman($data[4]);
$bufferUserId = $data[3];
if ($bufferUserId ne "") {
my ($bufferUsername) = WebGUI::SQL->quickArray("select username from users where userId=".$bufferUserId);
$bufferUserId = '<a href="' .WebGUI::URL::page('op=viewProfile&uid='.$bufferUserId) .'">'
.$bufferUsername .'</a>';
}
$row[$i] = '<tr>';
$row[$i] .= '<td valign="top" class="tableData">'
.wobjectIcon()
.deleteIcon('op=deleteClipboardItem&wid='.$wobjectId)
.pasteIcon('func=paste&wid='.$wobjectId);
$row[$i] .= '<td valign="top" class="tableData">'.$title;
$row[$i] .= '</td>';
$row[$i] .= '<td valign="top" class="tableData">'.$namespace;
$row[$i] .= '</td>';
$row[$i] .= '<td valign="top" class="tableData">'.$bufferDate;
$row[$i] .= '</td>';
$row[$i] .= '<td valign="top" class="tableData">'.$bufferPrevId;
$row[$i] .= '</td>';
if ($allUsers) {
$row[$i] .= '<td valign="top" class="tableData">'.$bufferUserId;
$row[$i] .= '</td>';
}
$row[$i] .= '</tr>';
$i++;
}
$sth->finish;
if ($session{form}{systemClipboard} eq "1") {
$p = WebGUI::Paginator->new(WebGUI::URL::page('op=manageClipboard&systemClipboard=1'),\@row);
} else {
$p = WebGUI::Paginator->new(WebGUI::URL::page('op=manageClipboard'),\@row);
}
$output .= '<table border=1 cellpadding=5 cellspacing=0 align="center">';
$output .= '<tr><th></th>'
.'<th>'. WebGUI::International::get(99) .'</th>'
.'<th>'. WebGUI::International::get(783) .'</th>'
.'<th>'. WebGUI::International::get(952) .'</th>'
.'<th>'. WebGUI::International::get(953) .'</th>';
if ($allUsers) {
$output .= '<th>'. WebGUI::International::get(50) .'</th>'
.'</tr>';
} else {
$output .= '</tr>';
}
$output .= $p->getPage($session{form}{pn});
$output .= '</table>';
$output .= $p->getBarTraditional($session{form}{pn});
return _submenu($output);
}
1;

View file

@ -173,7 +173,11 @@ sub www_cutPage {
if ($session{page}{pageId} < 26) {
return WebGUI::Privilege::vitalComponent();
} elsif (WebGUI::Privilege::canEditPage()) {
WebGUI::SQL->write("update page set parentId=2 where pageId=".$session{page}{pageId});
WebGUI::SQL->write("update page set parentId=2, "
."bufferUserId=".$session{user}{userId}.", "
."bufferDate=".time().", "
."bufferPrevId=".$session{page}{parentId}." "
."where pageId=".$session{page}{pageId});
_reorderPages($session{page}{parentId});
WebGUI::Session::refreshPageInfo($session{page}{parentId});
return "";
@ -206,7 +210,11 @@ sub www_deletePageConfirm {
if ($session{page}{pageId} < 1000 && $session{page}{pageId} > 0) {
return WebGUI::Privilege::vitalComponent();
} elsif (WebGUI::Privilege::canEditPage()) {
WebGUI::SQL->write("update page set parentId=3 where pageId=".$session{page}{pageId});
WebGUI::SQL->write("update page set parentId=3, "
."bufferUserId=".$session{user}{userId}.", "
."bufferDate=".time().", "
."bufferPrevId=".$session{page}{parentId}." "
."where pageId=".$session{page}{pageId});
_reorderPages($session{page}{parentId});
WebGUI::Session::refreshPageInfo($session{page}{parentId});
return "";
@ -547,7 +555,9 @@ sub www_pastePage {
($nextSeq) = WebGUI::SQL->quickArray("select max(sequenceNumber) from page where parentId=$session{page}{pageId}");
$nextSeq += 1;
if (WebGUI::Privilege::canEditPage()) {
WebGUI::SQL->write("update page set parentId=$session{page}{pageId}, sequenceNumber='$nextSeq' where pageId=$session{form}{pageId}");
WebGUI::SQL->write("update page set parentId=$session{page}{pageId}, sequenceNumber='$nextSeq', "
."bufferUserId=NULL, bufferDate=NULL, bufferPrevId=NULL "
."where pageId=$session{form}{pageId}");
_reorderPages($session{page}{pageId});
return "";
} else {

View file

@ -153,6 +153,8 @@ sub www_editMiscSettings {
$output .= '<h1>'.WebGUI::International::get(140).'</h1>';
$f = WebGUI::HTMLForm->new;
$f->hidden("op","saveSettings");
$f->yesNo("sharedClipboard",WebGUI::International::get(947),$session{setting}{sharedClipboard});
$f->yesNo("sharedTrash",WebGUI::International::get(946),$session{setting}{sharedTrash});
$f->yesNo("preventProxyCache",WebGUI::International::get(400),$session{setting}{preventProxyCache});
$f->yesNo("showDebug",WebGUI::International::get(707),$session{setting}{showDebug});
$f->yesNo("trackPageStatistics",WebGUI::International::get(749),$session{setting}{trackPageStatistics});

View file

@ -13,14 +13,68 @@ package WebGUI::Operation::Trash;
use Exporter;
use strict qw(vars subs);
use Tie::CPHash;
use WebGUI::DateTime;
use WebGUI::Icon;
use WebGUI::Operation::Shared;
use WebGUI::Privilege;
use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::URL;
our @ISA = qw(Exporter);
our @EXPORT = qw(&www_purgeTrash &www_purgeTrashConfirm);
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 {
@ -51,31 +105,303 @@ sub _recursePageTree {
}
#-------------------------------------------------------------------
sub www_purgeTrash {
my ($output);
if (WebGUI::Privilege::isInGroup(3)) {
$output = helpIcon(46);
$output .= '<h1>'.WebGUI::International::get(42).'</h1>';
$output .= WebGUI::International::get(162).'<p>';
$output .= '<div align="center"><a href="'.WebGUI::URL::page('op=purgeTrashConfirm').
'">'.WebGUI::International::get(44).'</a>';
$output .= '&nbsp;&nbsp;&nbsp;&nbsp;<a href="'.WebGUI::URL::page().'">'.
WebGUI::International::get(45).'</a></div>';
return $output;
} else {
return WebGUI::Privilege::adminOnly();
}
sub _submenu {
my (%menu);
tie %menu, 'Tie::IxHash';
$menu{WebGUI::URL::page('op=manageTrash')} = WebGUI::International::get(10);
$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);
$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_purgeTrashConfirm {
if (WebGUI::Privilege::isInGroup(3)) {
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 .= '<h1>'.WebGUI::International::get(42).'</h1>';
$output .= WebGUI::International::get(966).'<p>';
if ($session{form}{wid} ne "") {
$output .= '<div align="center"><a href="'.WebGUI::URL::page('op=deleteTrashItemConfirm&wid='
.$session{form}{wid}) . '">'.WebGUI::International::get(44).'</a>';
} elsif ($session{form}{pageId} ne "") {
$output .= '<div align="center"><a href="'.WebGUI::URL::page('op=deleteTrashItemConfirm&pageId='
.$session{form}{pageId}) . '">'.WebGUI::International::get(44).'</a>';
}
$output .= '&nbsp;&nbsp;&nbsp;&nbsp;<a href="'.WebGUI::URL::page().'">'
.WebGUI::International::get(45).'</a></div>';
return $output;
}
#-------------------------------------------------------------------
sub www_deleteTrashItemConfirm {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(4));
if ($session{form}{wid} ne "") {
if ( ($session{setting}{sharedTrash} eq "1") || (WebGUI::Privilege::isInGroup(3)) ) {
_purgeWobject($session{form}{wid});
} else {
my ($bufferUserId) = WebGUI::SQL->quickArray("select bufferUserId from wobject "
."where wobjectId=" .$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 "") {
if ( ($session{setting}{sharedTrash} eq "1") || (WebGUI::Privilege::isInGroup(3)) ) {
_recursePageTree($session{form}{pageId});
_purgeWobjects($session{form}{pageId});
WebGUI::SQL->write("delete from page where pageId=" .$session{form}{pageId});
} else {
my ($bufferUserId) = WebGUI::SQL->quickArray("select bufferUserId from page "
."where pageId=" .$session{form}{pageId});
return WebGUI::Privilege::insufficient() unless ($bufferUserId eq $session{user}{userId});
_recursePageTree($session{form}{pageId});
_purgeWobjects($session{form}{pageId});
WebGUI::SQL->write("delete from page where pageId=" .$session{form}{pageId});
}
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::Privilege::isInGroup(4));
my ($output);
$output = helpIcon(46);
$output .= '<h1>'.WebGUI::International::get(42).'</h1>';
$output .= WebGUI::International::get(162).'<p>';
$output .= WebGUI::International::get(651).'<p>';
if ($session{form}{systemTrash} eq "1") {
$output .= '<div align="center"><a href="'.WebGUI::URL::page('op=emptyTrashConfirm&systemTrash=1')
.'">'.WebGUI::International::get(44).'</a>';
} else {
$output .= '<div align="center"><a href="'.WebGUI::URL::page('op=emptyTrashConfirm')
.'">'.WebGUI::International::get(44).'</a>';
}
$output .= '&nbsp;&nbsp;&nbsp;&nbsp;<a href="'.WebGUI::URL::page().'">'
.WebGUI::International::get(45).'</a></div>';
return $output;
}
#-------------------------------------------------------------------
sub www_emptyTrashConfirm {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(4));
my ($allUsers);
if ($session{setting}{sharedTrash} eq "1") {
$allUsers = 1;
} elsif ($session{form}{systemTrash} eq "1") {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
$allUsers = 1;
} else {
$allUsers = 0;
}
if ($allUsers eq "1") {
_recursePageTree(3);
_purgeWobjects(3);
return "";
WebGUI::ErrorHandler::audit("emptied system trash");
} else {
return WebGUI::Privilege::adminOnly();
_purgeUserTrash();
WebGUI::ErrorHandler::audit("emptied user trash");
}
WebGUI::Session::refreshPageInfo($session{page}{pageId});
return "";
}
#-------------------------------------------------------------------
sub www_manageTrash {
return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(4));
my ($sth, @data, @row, $i, $p, $allUsers);
my $output = helpIcon(66);
if ($session{setting}{sharedTrash} eq "1") {
$allUsers = 1;
$output .= '<h1>'. WebGUI::International::get(962) .'</h1>';
} elsif ($session{form}{systemTrash} eq "1") {
return WebGUI::Privilege::adminOnly() unless (WebGUI::Privilege::isInGroup(3));
$allUsers = 1;
$output .= '<h1>'. WebGUI::International::get(965) .'</h1>';
} else {
$allUsers = 0;
$output .= '<h1>'. WebGUI::International::get(962) .'</h1>';
}
#
# Generate list of pages
#
if ($allUsers) {
$sth = WebGUI::SQL->read("select pageId,title,urlizedTitle,bufferUserId,bufferDate,bufferPrevId "
."from page where parentId=3 order by bufferDate desc,bufferUserId");
} else {
$sth = WebGUI::SQL->read("select pageId,title,urlizedTitle,bufferUserId,bufferDate,bufferPrevId "
."from page where parentId=3 and bufferUserId="
. $session{user}{userId} . " order by bufferDate desc");
}
while (@data = $sth->array) {
my ($pageId,$title,$urlizedTitle,$bufferUserId,$bufferDate,$bufferPrevId,$url);
$pageId = $data[0];
$title = $data[1];
$urlizedTitle = $data[2];
$title = '<a href="'. WebGUI::URL::gateway($urlizedTitle) .'">' .$title .'</a>';
$bufferUserId = $data[3];
if ($bufferUserId ne "") {
my ($bufferUsername) = WebGUI::SQL->quickArray("select username from users where userId=".$bufferUserId);
$bufferUserId = '<a href="' .WebGUI::URL::page('op=viewProfile&uid='.$bufferUserId) .'">'
.$bufferUsername .'</a>';
}
$bufferDate = epochToHuman($data[4]);
$bufferPrevId = $data[5];
if ($bufferPrevId ne "") {
($bufferPrevId,$url) = WebGUI::SQL->quickArray("select title,urlizedTitle "
."from page where pageId=".$bufferPrevId);
if ($url ne "") {
$bufferPrevId = '<a href="'. WebGUI::URL::gateway($url) .'">' .$bufferPrevId .'</a>';
}
}
$row[$i] = '<tr>';
$row[$i] .= '<td valign="top" class="tableData">'
.pageIcon()
.deleteIcon('op=deleteTrashItem&pageId='.$pageId)
.cutIcon('op=cutTrashItem&pageId='.$pageId);
$row[$i] .= '</td>';
$row[$i] .= '<td valign="top" class="tableData">'.$title;
$row[$i] .= '</td>';
$row[$i] .= '<td valign="top" class="tableData">'.WebGUI::International::get(2);
$row[$i] .= '</td>';
$row[$i] .= '<td valign="top" class="tableData">'.$bufferDate;
$row[$i] .= '</td>';
$row[$i] .= '<td valign="top" class="tableData">'.$bufferPrevId;
$row[$i] .= '</td>';
if ($allUsers) {
$row[$i] .= '<td valign="top" class="tableData">'.$bufferUserId;
$row[$i] .= '</td>';
}
$row[$i] .= '</tr>';
$i++;
}
#
# Generate list of wobjects
#
if ($allUsers) {
$sth = WebGUI::SQL->read("select wobjectId,namespace,title,bufferUserId,bufferDate,bufferPrevId "
. "from wobject where pageId=3 order by bufferDate desc,bufferUserId");
} else {
$sth = WebGUI::SQL->read("select wobjectId,namespace,title,bufferUserId,bufferDate,bufferPrevId "
. "from wobject where pageId=3 and bufferUserId="
. $session{user}{userId} ." order by bufferDate desc");
}
while (@data = $sth->array) {
my ($wobjectId,$namespace,$title,$bufferUserId,$bufferDate,$bufferPrevId,$url);
$wobjectId = $data[0];
$namespace = $data[1];
$title = $data[2];
$title = '<a href="'. WebGUI::URL::page('func=view&wid='. $wobjectId) .'">'. $title .'</a>';
$bufferPrevId = $data[5];
if ($bufferPrevId ne "") {
($bufferPrevId,$url) = WebGUI::SQL->quickArray("select title,urlizedTitle "
."from page where pageId=".$bufferPrevId);
if ($url ne "") {
$bufferPrevId = '<a href="'. WebGUI::URL::gateway($url) .'">' .$bufferPrevId .'</a>';
}
}
$bufferDate = epochToHuman($data[4]);
$bufferUserId = $data[3];
if ($bufferUserId ne "") {
my ($bufferUsername) = WebGUI::SQL->quickArray("select username from users where userId=".$bufferUserId);
$bufferUserId = '<a href="' .WebGUI::URL::page('op=viewProfile&uid='.$bufferUserId) .'">'
.$bufferUsername .'</a>';
}
$row[$i] = '<tr>';
$row[$i] .= '<td valign="top" class="tableData">'
.wobjectIcon()
.deleteIcon('op=deleteTrashItem&wid='.$wobjectId)
.cutIcon('op=cutTrashItem&wid='.$wobjectId);
$row[$i] .= '<td valign="top" class="tableData">'.$title;
$row[$i] .= '</td>';
$row[$i] .= '<td valign="top" class="tableData">'.$namespace;
$row[$i] .= '</td>';
$row[$i] .= '<td valign="top" class="tableData">'.$bufferDate;
$row[$i] .= '</td>';
$row[$i] .= '<td valign="top" class="tableData">'.$bufferPrevId;
$row[$i] .= '</td>';
if ($allUsers) {
$row[$i] .= '<td valign="top" class="tableData">'.$bufferUserId;
$row[$i] .= '</td>';
}
$row[$i] .= '</tr>';
$i++;
}
$sth->finish;
if ($session{form}{systemTrash} eq "1") {
$p = WebGUI::Paginator->new(WebGUI::URL::page('op=manageTrash&systemTrash=1'),\@row);
} else {
$p = WebGUI::Paginator->new(WebGUI::URL::page('op=manageTrash'),\@row);
}
$output .= '<table border=1 cellpadding=5 cellspacing=0 align="center">';
$output .= '<tr><th></th>'
.'<th>'. WebGUI::International::get(99) .'</th>'
.'<th>'. WebGUI::International::get(783) .'</th>'
.'<th>'. WebGUI::International::get(963) .'</th>'
.'<th>'. WebGUI::International::get(953) .'</th>';
if ($allUsers) {
$output .= '<th>'. WebGUI::International::get(50) .'</th>'
.'</tr>';
} else {
$output .= '</tr>';
}
$output .= $p->getPage($session{form}{pn});
$output .= '</table>';
$output .= $p->getBarTraditional($session{form}{pn});
return _submenu($output);
}
1;

View file

@ -260,11 +260,16 @@ If specified the wobject will be duplicated to this pageId, otherwise it will be
sub duplicate {
my %properties = %{$_[0]->get};
$properties{pageId} = $_[1] || 2;
if ($properties{pageId} == 2) {
$properties{bufferUserId} = $session{user}{userId};
$properties{bufferDate} = time();
$properties{bufferPrevId} = {};
}
delete $properties{wobjectId};
my $cmd = "WebGUI::Wobject::".$properties{namespace};
my $w = eval{$cmd->new({namespace=>$properties{namespace},wobjectId=>"new"})};
if ($@) {
WebGUI::ErrorHandler::warn("Could duplicate wobject ".$properties{namespace}." because: ".$@);
WebGUI::ErrorHandler::warn("Couldn't duplicate wobject ".$properties{namespace}." because: ".$@);
}
$w->set(\%properties);
WebGUI::Discussion::duplicate($_[0]->get("wobjectId"),$w->get("wobjectId")) unless ($_[2]);
@ -649,6 +654,15 @@ sub new {
userDefined5=>{
fieldType=>"text"
},
bufferUserId=>{
fieldType=>"integer"
},
bufferDate=>{
fieldType=>"integer"
},
bufferPrevId=>{
fieldType=>"integer"
},
allowDiscussion=>{
fieldType=>"yesNo",
defaultValue=>0
@ -1067,7 +1081,10 @@ Moves this instance to the clipboard.
sub www_cut {
if (WebGUI::Privilege::canEditPage()) {
$_[0]->set({pageId=>2, templatePosition=>1});
$_[0]->set({pageId=>2, templatePosition=>1,
bufferUserId=>$session{user}{userId},
bufferDate=>time(),
bufferPrevId=>$session{page}{pageId}});
_reorderWobjects($session{page}{pageId});
return "";
} else {
@ -1113,7 +1130,10 @@ Moves this instance to the trash.
sub www_deleteConfirm {
if (WebGUI::Privilege::canEditPage()) {
$_[0]->set({pageId=>3, templatePosition=>1});
$_[0]->set({pageId=>3, templatePosition=>1,
bufferUserId=>$session{user}{userId},
bufferDate=>time(),
bufferPrevId=>$session{page}{pageId}});
WebGUI::ErrorHandler::audit("moved Wobject ".$_[0]->{_property}{wobjectId}." to the trash.");
_reorderWobjects($_[0]->get("pageId"));
return "";
@ -1481,7 +1501,12 @@ sub www_paste {
if (WebGUI::Privilege::canEditPage()) {
($nextSeq) = WebGUI::SQL->quickArray("select max(sequenceNumber) from wobject where pageId=$session{page}{pageId}");
$nextSeq += 1;
$_[0]->set({sequenceNumber=>$nextSeq, pageId=>$session{page}{pageId}, templatePosition=>1});
WebGUI::SQL->write("UPDATE wobject SET "
."pageId=". $session{page}{pageId} .", "
."templatePosition=1, "
."sequenceNumber=". $nextSeq .", "
."bufferUserId=NULL, bufferDate=NULL, bufferPrevId=NULL "
."WHERE wobjectId=". $session{form}{wid} );
return "";
} else {
return WebGUI::Privilege::insufficient();