diff --git a/docs/upgrades/upgrade_6.2.9-6.3.0.sql b/docs/upgrades/upgrade_6.2.9-6.3.0.sql index a936c835c..0ce5d0c75 100644 --- a/docs/upgrades/upgrade_6.2.9-6.3.0.sql +++ b/docs/upgrades/upgrade_6.2.9-6.3.0.sql @@ -62,8 +62,9 @@ create table asset ( isHidden int not null default 0, isSystem int not null default 0, encryptPage int not null default 0, - lastUpdated bigint not null default 0, assetSize int not null default 0, + lastUpdated bigint not null default 0, + lastUpdatedBy varchar(22), unique index (lineage asc), unique index (url), index (parentId) @@ -196,7 +197,7 @@ create table ImageAsset ( parameters text ); -INSERT INTO template VALUES ('1','Admin Console','^StyleSheet(^Extras;/adminConsole/adminConsole.css);\r\n^JavaScript(^Extras;/adminConsole/adminConsole.js);\r\n\r\n
\r\n \r\n \" target=\"_blank\">\"?\"\r\n \r\n
\r\n
\r\n \" border=\"0\" title=\"\" alt=\"\" />\r\n
\r\n
\r\n\"*\"\r\n
\r\n
\r\n \" border=\"0\" title=\"\" alt=\"\" />\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n  \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n  \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \">
\r\n
\r\n
\r\n
\r\n
\r\n ^AdminToggle;
\r\n ^LoginToggle;
\r\n
\r\n
\r\n\r\n','AdminConsole',1,1); +INSERT INTO template VALUES ('1','Admin Console','^StyleSheet(^Extras;/adminConsole/adminConsole.css);\r\n^JavaScript(^Extras;/adminConsole/adminConsole.js);\r\n\r\n
\r\n \r\n \" target=\"_blank\">\"?\"\r\n \r\n
\r\n
\r\n \" border=\"0\" title=\"\" alt=\"\" />\r\n
\r\n
\r\n\"*\"\r\n
\r\n
\r\n \" border=\"0\" title=\"\" alt=\"\" />\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n  \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n  \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \" >
\r\n
\r\n
\r\n
\r\n
\r\n ^AdminToggle;
\r\n ^LoginToggle;
\r\n
\r\n
\r\n\r\n','AdminConsole',1,1); insert into settings (name,value) values ('AdminConsoleTemplate',1); delete from template where namespace='Macro/AdminBar' and templateId in ('1','2'); INSERT INTO template VALUES ('1','Default Admin Bar','\r\n \r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n','Macro/AdminBar',1,1); diff --git a/lib/WebGUI/AdminConsole.pm b/lib/WebGUI/AdminConsole.pm index 7cc39236b..bc7151d58 100644 --- a/lib/WebGUI/AdminConsole.pm +++ b/lib/WebGUI/AdminConsole.pm @@ -29,9 +29,11 @@ sub addSubmenuItem { my $self = shift; my $url = shift; my $label = shift; + my $extras = shift; push (@{$self->{_submenuItem}}, { url=>$url, - label=>$label + label=>$label, + extras=>$extras }); } @@ -71,8 +73,8 @@ sub getAdminFunction { namespace=>"WebGUI" }, icon=>"clipboard.gif", - op=>"manageClipboard", - group=>"4" + func=>"manageClipboard", + group=>"12" }, "trash"=>{ title=>{ @@ -80,8 +82,8 @@ sub getAdminFunction { namespace=>"WebGUI" }, icon=>"trash.gif", - op=>"manageTrash", - group=>"3" + func=>"manageTrash", + group=>"4" }, "databases"=>{ title=>{ diff --git a/lib/WebGUI/Asset.pm b/lib/WebGUI/Asset.pm index 821285a4c..501ce0eba 100644 --- a/lib/WebGUI/Asset.pm +++ b/lib/WebGUI/Asset.pm @@ -40,6 +40,8 @@ sub addChild { } WebGUI::SQL->commit; my $newAsset = WebGUI::Asset->newByDynamicClass($id, $properties->{className}); + $self->updateHistory("added child ".$id); + $newAsset->updateHistory("created"); $newAsset->update($properties); return $newAsset; } @@ -81,6 +83,7 @@ sub cut { WebGUI::SQL->write("update asset set state='limbo' where lineage like ".quote($self->get("lineage").'%')); WebGUI::SQL->write("update asset set state='clipboard' where assetId=".quote($self->getId)); WebGUI::SQL->commit; + $self->updateHistory("cut"); $self->{_properties}{state} = "clipboard"; } @@ -249,6 +252,61 @@ sub getAssetAdderLinks { return \@links; } +sub getAssetManagerControl { + my $self = shift; + my $children = shift; + WebGUI::Style::setLink($session{config}{extrasURL}.'/assetManager/assetManager.css', {rel=>"stylesheet",type=>"text/css"}); + WebGUI::Style::setScript($session{config}{extrasURL}.'/assetManager/Tools.js', {type=>"text/javascript"}); + WebGUI::Style::setScript($session{config}{extrasURL}.'/assetManager/ContextMenu.js', {type=>"text/javascript"}); + WebGUI::Style::setScript($session{config}{extrasURL}.'/assetManager/Asset.js', {type=>"text/javascript"}); + WebGUI::Style::setScript($session{config}{extrasURL}.'/assetManager/Display.js', {type=>"text/javascript"}); + WebGUI::Style::setScript($session{config}{extrasURL}.'/assetManager/EventManager.js', {type=>"text/javascript"}); + WebGUI::Style::setScript($session{config}{extrasURL}.'/assetManager/AssetManager.js', {type=>"text/javascript"}); + my $output = ' +
+
+
+
Retrieving Assets...
+
hello
+ '; + $output .= "\n"; + return $output; +} + + sub getEditForm { my $self = shift; my $tabform = WebGUI::TabForm->new(); @@ -450,6 +508,10 @@ sub getLineage { $mod .= ")"; push(@whereModifiers,$mod); } + # we need to include children + if (isIn("children",@{$relatives})) { + push(@whereModifiers,"(parentId=".quote($self->getId).")"); + } # now lets add in all of the siblings in every level between ourself and the asset we wish to pedigree if (isIn("pedigree",@{$relatives}) && exists $rules->{assetToPedigree}) { my @mods; @@ -475,7 +537,8 @@ sub getLineage { # based upon all available criteria, let's get some assets my $columns = "assetId, className, parentId"; $columns = "*" if ($rules->{returnQuickReadObjects}); - my $sql = "select $columns from asset where $where order by lineage"; + my $sortOrder = ($rules->{invertTree}) ? "desc" : "asc"; + my $sql = "select $columns from asset where $where order by lineage $sortOrder"; my @lineage; my %relativeCache; my $sth = WebGUI::SQL->read($sql); @@ -710,6 +773,7 @@ sub paste { my $pastedAsset = WebGUI::Asset->new($assetId); if ($self->getId eq $pastedAsset->get("parentId") || $pastedAsset->setParent($self->getId)) { $pastedAsset->republish; + $pastedAsset->updateHistory("pasted to parent ".$self->getId); return 1; } return 0; @@ -748,16 +812,33 @@ sub promote { sub purge { my $self = shift; - # NOTE to self, still need to delete all children too + $self->updateHistory("purged"); WebGUI::SQL->beginTransaction; foreach my $definition (@{$self->definition}) { WebGUI::SQL->write("delete from ".$definition->{tableName}." where assetId=".quote($self->getId)); } WebGUI::SQL->commit; + # eliminate anything bound to this asset + my $sth = WebGUI::SQL->read("select assetId,className from asset where boundToId=".quote($self->getId)); + while (my ($id, $class) = $sth->array) { + my $asset = WebGUI::Asset->newByDynamicClass($id,$class); + if (defined $asset) { + $asset->purgeTree; + } + } $self = undef; return 1; } +sub purgeTree { + my $self = shift; + my $descendants = $self->getLineage(["self","descendants"],{returnObjects=>1, invertTree=>1}); + foreach my $descendant (@{$descendants}) { + $descendant->purge; + } + return 1; +} + sub setParent { my $self = shift; my $newParentId = shift; @@ -772,6 +853,7 @@ sub setParent { WebGUI::SQL->write("update asset set parentId=".quote($parent->getId)." where assetId=".quote($self->getId)); $self->cascadeLineage($lineage); WebGUI::SQL->commit; + $self->updateHistory("moved to parent ".$parent->getId); $self->{_properties}{lineage} = $lineage; return 1; } @@ -796,6 +878,7 @@ sub setRank { if (isBetween($sibling->getRank, $newRank, $currentRank)) { $sibling->cascadeLineage($previous); $previous = $sibling->get("lineage"); + $sibling->updateHistory("changed rank"); } } $self->cascadeLineage($previous,$temp); @@ -824,6 +907,7 @@ sub swapRank { $self->cascadeLineage($first,$second); $self->cascadeLineage($second,$temp); WebGUI::SQL->commit; + $self->updateHistory("swapped lineage between ".$first." and ".$second); return 1; } @@ -835,6 +919,7 @@ sub trash { WebGUI::SQL->write("update asset set state='trash' where assetId=".quote($self->getId)); WebGUI::SQL->commit; $self->{_properties}{state} = "trash"; + $self->updateHistory("trashed"); } sub update { @@ -866,6 +951,18 @@ sub update { return 1; } +sub updateHistory { + my $self = shift; + my $action = shift; + my $userId = shift || $session{user}{userId}; + my $dateStamp = time(); + WebGUI::SQL->beginTransaction; + WebGUI::SQL->write("insert into assetHistory (assetId, userId, actionTaken, dateStamp) values ( + ".quote($self->getId).", ".quote($userId).", ".quote($action).", ".$dateStamp.")"); + $self->update({lastUpdated=>$dateStamp,lastUpdatedBy=>$userId}); + WebGUI::SQL->commit; +} + sub view { return ""; } @@ -887,7 +984,7 @@ sub www_add { sub www_copy { my $self = shift; - return WebGUI::Privilege::insufficient() unless $self->canEdit; + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; my $newAsset = $self->duplicate; $newAsset->cut; return ""; @@ -895,7 +992,7 @@ sub www_copy { sub www_copyList { my $self = shift; - return WebGUI::Privilege::insufficient() unless $self->canEdit; + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; my $newAsset = $self->duplicate; $newAsset->cut; foreach my $assetId ($session{cgi}->param("assetId")) { @@ -910,14 +1007,14 @@ sub www_copyList { sub www_cut { my $self = shift; - return WebGUI::Privilege::insufficient() unless $self->canEdit; + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; $self->cut; return $self->getParent->www_view; } sub www_cutList { my $self = shift; - return WebGUI::Privilege::insufficient() unless $self->canEdit; + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; foreach my $assetId ($session{cgi}->param("assetId")) { my $asset = WebGUI::Asset->newByDynamicClass($assetId); if ($asset->canEdit) { @@ -929,14 +1026,14 @@ sub www_cutList { sub www_delete { my $self = shift; - return WebGUI::Privilege::insufficient() unless $self->canEdit; + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; $self->trash; return $self->getParent->www_view; } sub www_deleteList { my $self = shift; - return WebGUI::Privilege::insufficient() unless $self->canEdit; + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; foreach my $assetId ($session{cgi}->param("assetId")) { my $asset = WebGUI::Asset->newByDynamicClass($assetId); if ($asset->canEdit) { @@ -948,19 +1045,20 @@ sub www_deleteList { sub www_demote { my $self = shift; - return WebGUI::Privilege::insufficient() unless $self->canEdit; + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; $self->demote; return ""; } sub www_edit { my $self = shift; - return WebGUI::Privilege::insufficient() unless $self->canEdit; + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; return $self->getAdminConsole->render($self->getEditForm->print); } sub www_editSave { my $self = shift; + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; my $object; if ($session{form}{assetId} eq "new") { $object = $self->addChild({className=>$session{form}{class}}); @@ -969,6 +1067,7 @@ sub www_editSave { $object = $self; } $object->processPropertiesFromFormPost; + $object->updateHistory("edited"); return $self->www_manageAssets if ($session{form}{afterEdit} eq "assetManager" && $session{form}{assetId} eq "new"); return $object->getParent->www_manageAssets if ($session{form}{afterEdit} eq "assetManager"); return $object->www_view; @@ -982,59 +1081,46 @@ sub www_editTreeSave { return "not yet implemented"; } +sub www_emptyClipboard { + my $self = shift; + my $ac = WebGUI::AdminConsole->new("clipboard"); + return $ac->render(WebGUI::Privilege::insufficient()) unless (WebGUI::Grouping::isInGroup(4)); + my $limit; + unless ($session{form}{systemTrash} && WebGUI::Grouping::isInGroup(3)) { + $limit = "and lastUpdatedBy=".quote($session{user}{userId}); + } + my $sth = WebGUI::SQL->read("select assetId,className from asset where state='clipboard' $limit"); + while (my ($id, $class) = $sth->array) { + my $asset = WebGUI::Asset->newByDynamicClass($id,$class); + $asset->trash; + } + $sth->finish; + return $self->www_manageClipboard(); +} + +sub www_emptyTrash { + my $self = shift; + my $ac = WebGUI::AdminConsole->new("trash"); + return $ac->render(WebGUI::Privilege::insufficient()) unless (WebGUI::Grouping::isInGroup(4)); + my $limit; + unless ($session{form}{systemTrash} && WebGUI::Grouping::isInGroup(3)) { + $limit = "and lastUpdatedBy=".quote($session{user}{userId}); + } + my $sth = WebGUI::SQL->read("select assetId,className from asset where state='trash' $limit"); + while (my ($id, $class) = $sth->array) { + my $asset = WebGUI::Asset->newByDynamicClass($id,$class); + $asset->purgeTree; + } + $sth->finish; + return $self->www_manageTrash(); +} + + sub www_manageAssets { my $self = shift; - return WebGUI::Privilege::insufficient() unless $self->canEdit; - WebGUI::Style::setLink($session{config}{extrasURL}.'/assetManager/assetManager.css', {rel=>"stylesheet",type=>"text/css"}); - WebGUI::Style::setScript($session{config}{extrasURL}.'/assetManager/Tools.js', {type=>"text/javascript"}); - WebGUI::Style::setScript($session{config}{extrasURL}.'/assetManager/ContextMenu.js', {type=>"text/javascript"}); - WebGUI::Style::setScript($session{config}{extrasURL}.'/assetManager/Asset.js', {type=>"text/javascript"}); - WebGUI::Style::setScript($session{config}{extrasURL}.'/assetManager/Display.js', {type=>"text/javascript"}); - WebGUI::Style::setScript($session{config}{extrasURL}.'/assetManager/EventManager.js', {type=>"text/javascript"}); - WebGUI::Style::setScript($session{config}{extrasURL}.'/assetManager/AssetManager.js', {type=>"text/javascript"}); + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; my $children = $self->getLineage(["descendants"],{returnObjects=>1, endingLineageLength=>$self->getLineageLength+1}); - my $output; - $output = ' -
-
-
-
Retrieving Assets...
-
hello
- '; - $output .= "\n"; + my $output = $self->getAssetManagerControl($children); $output .= '
 
@@ -1069,17 +1155,70 @@ sub www_manageAssets { return $self->getAdminConsole->render($output); } +sub www_manageClipboard { + my $self = shift; + my $ac = WebGUI::AdminConsole->new("clipboard"); + return $ac->render(WebGUI::Privilege::insufficient()) unless (WebGUI::Grouping::isInGroup(4)); + my @assets; + my ($header, $limit); + $ac->setHelp("clipboard manage"); + if ($session{form}{systemTrash} && WebGUI::Grouping::isInGroup(3)) { + $header = WebGUI::International::get(965); + $ac->addSubmenuItem($self->getUrl('func=manageClipboard'), WebGUI::International::get(949)); + $ac->addSubmenuItem($self->getUrl('func=emptyClipboard&systemClipboard=1'), WebGUI::International::get(959), + 'onclick="return window.confirm(\''.WebGUI::International::get(951).'\')"'); + } else { + $ac->addSubmenuItem($self->getUrl('func=manageClipboard&systemClipboard=1'), WebGUI::International::get(954)); + $ac->addSubmenuItem($self->getUrl('func=emptyClipboard'), WebGUI::International::get(950), + 'onclick="return window.confirm(\''.WebGUI::International::get(951).'\')"'); + $limit = "and lastUpdatedBy=".quote($session{user}{userId}); + } + my $sth = WebGUI::SQL->read("select assetId,className from asset where state='clipboard' $limit"); + while (my ($id, $class) = $sth->array) { + push(@assets,WebGUI::Asset->newByDynamicClass($id,$class)); + } + $sth->finish; + return $ac->render($self->getAssetManagerControl(\@assets), $header); +} + + +sub www_manageTrash { + my $self = shift; + my $ac = WebGUI::AdminConsole->new("trash"); + return $ac->render(WebGUI::Privilege::insufficient()) unless (WebGUI::Grouping::isInGroup(4)); + my @assets; + my ($header, $limit); + $ac->setHelp("trash manage"); + if ($session{form}{systemTrash} && WebGUI::Grouping::isInGroup(3)) { + $header = WebGUI::International::get(965); + $ac->addSubmenuItem($self->getUrl('func=manageTrash'), WebGUI::International::get(10)); + $ac->addSubmenuItem($self->getUrl('func=emptyTrash&systemTrash=1'), WebGUI::International::get(967), + 'onclick="return window.confirm(\''.WebGUI::International::get(651).'\')"'); + } else { + $ac->addSubmenuItem($self->getUrl('func=manageTrash&systemTrash=1'), WebGUI::International::get(964)); + $ac->addSubmenuItem($self->getUrl('func=emptyTrash'), WebGUI::International::get(11), + 'onclick="return window.confirm(\''.WebGUI::International::get(651).'\')"'); + $limit = "and lastUpdatedBy=".quote($session{user}{userId}); + } + my $sth = WebGUI::SQL->read("select assetId,className from asset where state='trash' $limit"); + while (my ($id, $class) = $sth->array) { + push(@assets,WebGUI::Asset->newByDynamicClass($id,$class)); + } + $sth->finish; + return $ac->render($self->getAssetManagerControl(\@assets), $header); +} + sub www_paste { my $self = shift; - return WebGUI::Privilege::insufficient() unless $self->canEdit; + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; $self->paste($session{form}{assetId}); return ""; } sub www_pasteList { my $self = shift; - return WebGUI::Privilege::insufficient() unless $self->canEdit; + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; foreach my $clipId ($session{cgi}->param("assetId")) { $self->paste($clipId); } @@ -1088,14 +1227,14 @@ sub www_pasteList { sub www_promote { my $self = shift; - return WebGUI::Privilege::insufficient() unless $self->canEdit; + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; $self->promote; return ""; } sub www_setParent { my $self = shift; - return WebGUI::Privilege::insufficient() unless $self->canEdit; + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; my $newParent = $session{form}{assetId}; $self->setParent($newParent) if (defined $newParent); return $self->www_manageAssets(); @@ -1104,7 +1243,7 @@ sub www_setParent { sub www_setRank { my $self = shift; - return WebGUI::Privilege::insufficient() unless $self->canEdit; + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless $self->canEdit; my $newRank = $session{form}{rank}; $self->setRank($newRank) if (defined $newRank); return $self->www_manageAssets(); diff --git a/lib/WebGUI/Asset/Wobject/USS.pm b/lib/WebGUI/Asset/Wobject/USS.pm index 89d5e26da..c71a9c782 100644 --- a/lib/WebGUI/Asset/Wobject/USS.pm +++ b/lib/WebGUI/Asset/Wobject/USS.pm @@ -26,7 +26,6 @@ use WebGUI::Id; use WebGUI::International; use WebGUI::MessageLog; use WebGUI::Operation; -use WebGUI::Page; use WebGUI::Paginator; use WebGUI::Privilege; use WebGUI::Session; diff --git a/lib/WebGUI/Asset/Wobject/USS_submission.pm b/lib/WebGUI/Asset/Wobject/USS_submission.pm index 63299de79..f85ce269a 100644 --- a/lib/WebGUI/Asset/Wobject/USS_submission.pm +++ b/lib/WebGUI/Asset/Wobject/USS_submission.pm @@ -25,7 +25,6 @@ use WebGUI::Id; use WebGUI::International; use WebGUI::MessageLog; use WebGUI::Operation; -use WebGUI::Page; use WebGUI::Paginator; use WebGUI::Privilege; use WebGUI::Session; diff --git a/lib/WebGUI/i18n/English/WebGUI.pm b/lib/WebGUI/i18n/English/WebGUI.pm index b3c9cbc70..cbf11e044 100644 --- a/lib/WebGUI/i18n/English/WebGUI.pm +++ b/lib/WebGUI/i18n/English/WebGUI.pm @@ -515,11 +515,6 @@ The URL of the web site for this theme's designer. If you are in the business of lastUpdated => 1033832377 }, - '966' => { - message => q|Are you certain that you wish to permanently purge/delete this item from the trash?|, - lastUpdated => 1101775259 - }, - '992' => { message => q|Title|, lastUpdated => 1056151382 @@ -535,11 +530,6 @@ The URL of the web site for this theme's designer. If you are in the business of lastUpdated => 1050430737 }, - '783' => { - message => q|Type|, - lastUpdated => 1036954378 - }, - '706' => { message => q|Hour(s)|, lastUpdated => 1031514049 @@ -1338,11 +1328,6 @@ How should this user be notified when they get a new WebGUI message? lastUpdated => 1031514049 }, - '953' => { - message => q|Previous Location|, - lastUpdated => 1052850265 - }, - '39' => { message => q|You do not have sufficient privileges to access this page.|, lastUpdated => 1031514049 @@ -1983,7 +1968,7 @@ By default, WebGUI has one big content area to place wobjects. However, by speci

Synopsis
-A short description of a page. It is used to populate default descriptive meta tags as well as to provide descriptions on Site Maps. +A short description of a page.

Meta Tags
@@ -2227,18 +2212,10 @@ will be modified to make it unique.|, }, '651' => { - message => q|If you choose to empty your trash, any items contained in it will be lost forever. If you're unsure about a few items, it might be best to cut them to your clipboard before you empty the trash. -

- -|, + message => q|Emptying your trash will remove these assets from your site forever. Are you sure you want to continue?|, lastUpdated => 1031514049 }, - '956' => { - message => q|Are you certain that you wish to move this item from the clipboard to the trash?|, - lastUpdated => 1052850265 - }, - '498' => { message => q|End Date|, lastUpdated => 1031514049 @@ -3741,10 +3718,6 @@ on the page. The toolbar icon that allows the wobject to be repositioned via a click and drag interface.

-wobject.namespace
-The namespace of this wobject. This is also known as the wobject type, for instance Article, USS, SQLReport, and SiteMap are all namespaces. -

- wobject.id
The unique identifier for this wobject.

@@ -4225,11 +4198,6 @@ The description of this forum as passed by the calling object. lastUpdated => 1031514049 }, - '162' => { - message => q|Are you certain that you wish to purge all the pages and wobjects in the trash?|, - lastUpdated => 1031514049 - }, - '880' => { message => q|Last Resort Editor|, lastUpdated => 1044705137 @@ -5535,11 +5503,6 @@ Privileges and styles assigned to pages in the package will not be copied when t lastUpdated => 1031514049 }, - '963' => { - message => q|Trash Date|, - lastUpdated => 1052850265 - }, - 'ends with' => { message => q|Ends With|, lastUpdated => 1089039511