Adding navigation caching and implementing the nested set model.
This commit is contained in:
parent
bd7ccaf29d
commit
83b93e22e8
7 changed files with 1150 additions and 344 deletions
|
|
@ -73,9 +73,12 @@
|
||||||
- bugfix [ 934410 ] non-compliant HTML (solution). Thanks to Nicklous
|
- bugfix [ 934410 ] non-compliant HTML (solution). Thanks to Nicklous
|
||||||
Roberts.
|
Roberts.
|
||||||
- bugfix [ 963316 ] Field without title in Content Settings
|
- bugfix [ 963316 ] Field without title in Content Settings
|
||||||
|
- Converted the page tree system from the ajacency list model to the nested
|
||||||
|
set model. Thanks to Martin Kamerbeek / Procolix and Dan Collis Puro for
|
||||||
|
providing the DBIx::Tree::NestedSet module.
|
||||||
|
- Dropped page tree caching and stepped onto Navigation caching. This helps
|
||||||
|
scalability a lot. Thanks to Martin Kamerbeek / Procolix
|
||||||
|
|
||||||
6.0.3
|
6.0.3
|
||||||
- Fixed a recursive style change bug.
|
- Fixed a recursive style change bug.
|
||||||
- Bugfix [ 953593 ] perl -MWebGUI -e "" fails
|
- Bugfix [ 953593 ] perl -MWebGUI -e "" fails
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,54 @@ foreach my $key (keys %{$langs}) {
|
||||||
WebGUI::SQL->write("update page set languageId=".quote($langs->{$key})." where languageId=".$key);
|
WebGUI::SQL->write("update page set languageId=".quote($langs->{$key})." where languageId=".$key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print "\tConverting page tree to the Nested Set model.\n";
|
||||||
|
sub walk_down {
|
||||||
|
my($pageId, $o) = @_[0,1];
|
||||||
|
|
||||||
|
my $callback = $o->{callback};
|
||||||
|
my $callbackback = $o->{callbackback};
|
||||||
|
my $callback_status = 1;
|
||||||
|
|
||||||
|
$callback_status = &{ $callback }( $pageId, $o ) if $callback;
|
||||||
|
if($callback_status) {
|
||||||
|
# Keep recursing unless callback returned false... and if there's
|
||||||
|
# anything to recurse into, of course.
|
||||||
|
my @daughters = WebGUI::SQL->buildArray("select pageId from page where parentId=$pageId and pageId != 0");
|
||||||
|
if(@daughters) {
|
||||||
|
$o->{'_depth'} += 1;
|
||||||
|
foreach my $one (@daughters) {
|
||||||
|
walk_down($one, $o);
|
||||||
|
}
|
||||||
|
$o->{'_depth'} -= 1;
|
||||||
|
}
|
||||||
|
if($callbackback){
|
||||||
|
scalar( &{ $callbackback }( $pageId, $o ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $counter = 0;
|
||||||
|
|
||||||
|
WebGUI::SQL->write("alter table page add column (lft int(11))");
|
||||||
|
WebGUI::SQL->write("alter table page add column (rgt int(11))");
|
||||||
|
WebGUI::SQL->write("alter table page add column (id int(11))");
|
||||||
|
WebGUI::SQL->write("alter table page add column (depth int(3))");
|
||||||
|
WebGUI::SQL->write("insert into page (pageId, parentId) values (0, -1)");
|
||||||
|
WebGUI::SQL->write("update page set id=pageId");
|
||||||
|
walk_down(0, {
|
||||||
|
callback => sub {
|
||||||
|
WebGUI::SQL->write("update page set depth=".($_[1]->{_depth}-1).", lft=$counter where pageId=".$_[0]);
|
||||||
|
$counter++;
|
||||||
|
return 1;
|
||||||
|
},
|
||||||
|
callbackback => sub {
|
||||||
|
WebGUI::SQL->write("update page set rgt=$counter where pageId=".$_[0]);
|
||||||
|
$counter++;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
WebGUI::Session::close();
|
WebGUI::Session::close();
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -96,62 +96,43 @@ sub _levels {
|
||||||
%levels = ( 'root' => {
|
%levels = ( 'root' => {
|
||||||
name => WebGUI::International::get(1,'Navigation'),
|
name => WebGUI::International::get(1,'Navigation'),
|
||||||
handler => sub {
|
handler => sub {
|
||||||
return WebGUI::Page->getPage()->root;
|
return WebGUI::Page->getAnonymousRoot;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'WebGUIroot' => {
|
'WebGUIroot' => {
|
||||||
name => WebGUI::International::get(2,'Navigation'),
|
name => WebGUI::International::get(2,'Navigation'),
|
||||||
handler => sub {
|
handler => sub {
|
||||||
my $p = WebGUI::Page->getPage;
|
return WebGUI::Page->getWebGUIRoot;
|
||||||
my @ancestors = reverse $p->ancestors;
|
|
||||||
if(scalar(@ancestors) == 1) { # I am WebGUI root. I have one ancestor, which
|
|
||||||
return $p; # is nameless root. Return myself
|
|
||||||
} elsif(scalar(@ancestors) > 1) { # I am a page under WebGUI root.
|
|
||||||
return $ancestors[1]; # 1st element of ancestors is WebGUI root
|
|
||||||
} else {
|
|
||||||
return undef; # huh ? No root ???
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'top' => {
|
'top' => {
|
||||||
name => WebGUI::International::get(3,'Navigation'),
|
name => WebGUI::International::get(3,'Navigation'),
|
||||||
handler => sub {
|
handler => sub {
|
||||||
my $p = WebGUI::Page->getPage;
|
return WebGUI::Page->getTop;
|
||||||
my @ancestors = reverse $p->ancestors;
|
|
||||||
if(scalar(@ancestors) == 2) { # I am top, my ancestors are nameless root
|
|
||||||
return $p; # and my WebGUI root. Return myself.
|
|
||||||
} elsif(scalar(@ancestors) > 2) { # I am a page under top, so return the
|
|
||||||
return $ancestors[2]; # 2nd element of ancestors is top.
|
|
||||||
} else { # No top page or I am root.
|
|
||||||
return ($p->daughters)[0]; # 1st element
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'grandmother' => {
|
'grandmother' => {
|
||||||
name => WebGUI::International::get(4,'Navigation'),
|
name => WebGUI::International::get(4,'Navigation'),
|
||||||
handler => sub {
|
handler => sub {
|
||||||
my $p = WebGUI::Page->getPage();
|
return WebGUI::Page->getGrandmother;
|
||||||
return $p->mother->mother;
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'mother' => {
|
'mother' => {
|
||||||
name => WebGUI::International::get(5,'Navigation'),
|
name => WebGUI::International::get(5,'Navigation'),
|
||||||
handler => sub {
|
handler => sub {
|
||||||
my $p = WebGUI::Page->getPage();
|
return WebGUI::Page->getMother;
|
||||||
return $p->mother;
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'current' => {
|
'current' => {
|
||||||
name => WebGUI::International::get(6,'Navigation'),
|
name => WebGUI::International::get(6,'Navigation'),
|
||||||
handler => sub {
|
handler => sub {
|
||||||
return WebGUI::Page->getPage();
|
return WebGUI::Page->getPage;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'daughter' => {
|
'daughter' => {
|
||||||
name => WebGUI::International::get(7,'Navigation'),
|
name => WebGUI::International::get(7,'Navigation'),
|
||||||
handler => sub {
|
handler => sub {
|
||||||
my $p = WebGUI::Page->getPage;
|
return WebGUI::Page->getFirstDaughter;
|
||||||
return ($p->daughters)[0]; # 1st daughter
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
@ -241,102 +222,128 @@ sub build {
|
||||||
my $var = {'page_loop' => []};
|
my $var = {'page_loop' => []};
|
||||||
my $p = $self->_getStartPageObject();
|
my $p = $self->_getStartPageObject();
|
||||||
my $method = $self->_methods()->{$self->{_method}}{method};
|
my $method = $self->_methods()->{$self->{_method}}{method};
|
||||||
my @pages = eval $method;
|
|
||||||
if ($@) {
|
|
||||||
WebGUI::ErrorHandler::warn("Error in WebGUI::Navigation::build while trying to execute $method".$@);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Store current page properties in template var
|
my $cache = WebGUI::Cache->new($self->{_identifier}.'-'.$session{page}{pageId}, "Navigation-".$session{config}{configFile});
|
||||||
my $currentPage = WebGUI::Page->getPage();
|
my $cacheContent = $cache->get;
|
||||||
foreach my $property (@interestingPageProperties) {
|
|
||||||
$var->{'page.current.'.$property} = $currentPage->get($property);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (@pages) {
|
my @page_loop;
|
||||||
my $startPageDepth = ($p->ancestors);
|
|
||||||
my $maxDepth = $startPageDepth + $self->{_depth};
|
|
||||||
my $minDepth = $startPageDepth - $self->{_depth};
|
|
||||||
|
|
||||||
foreach my $page (@pages) {
|
|
||||||
my $pageData = {};
|
|
||||||
|
|
||||||
# Initial page info
|
|
||||||
$pageData->{"page.url"} = WebGUI::URL::gateway($page->get('urlizedTitle'));
|
|
||||||
$pageData->{"page.absDepth"} = scalar($page->ancestors);
|
|
||||||
$pageData->{"page.relDepth"} = $pageData->{"page.absDepth"} - $startPageDepth;
|
|
||||||
$pageData->{"page.isCurrent"} = ($page->get('pageId') == $session{page}{pageId});
|
|
||||||
$pageData->{"page.isHidden"} = $page->get('hideFromNavigation');
|
|
||||||
$pageData->{"page.isSystem"} = (($page->get('pageId') < 1000 && $page->get('pageId') > 1) ||
|
|
||||||
$page->get('pageId') == 0);
|
|
||||||
$pageData->{"page.isViewable"} = WebGUI::Page::canView($page->get('pageId'));
|
|
||||||
|
|
||||||
# indent
|
|
||||||
my $indent = 0;
|
|
||||||
if ($self->{_method} eq 'pedigree' # reverse traversing
|
|
||||||
|| $self->{_method} eq 'ancestors' # needs another way to calculate
|
|
||||||
|| $self->{_method} eq 'self_and_ancestors') { # the indent
|
|
||||||
if ($self->{_stopAtLevel} <= $startPageDepth && $self->{_stopAtLevel} > 0) {
|
|
||||||
$indent = $pageData->{"page.absDepth"} - ($self->{_stopAtLevel} - 1) - 1;
|
|
||||||
} elsif ($self->{_stopAtLevel} > $startPageDepth && $self->{_stopAtLevel} > 0) {
|
|
||||||
$indent = 0;
|
|
||||||
} else {
|
|
||||||
$indent = $pageData->{"page.absDepth"} - 1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$indent = $pageData->{"page.absDepth"} - $startPageDepth - 1;
|
|
||||||
}
|
|
||||||
$pageData->{"page.indent_loop"} = [];
|
|
||||||
push(@{$pageData->{"page.indent_loop"}},{'indent'=>$_}) for(1..$indent);
|
|
||||||
$pageData->{"page.indent"} = " " x $indent;
|
|
||||||
|
|
||||||
# Check if in depth range
|
|
||||||
next if ($pageData->{"page.absDepth"} > $maxDepth || $pageData->{"page.absDepth"} < $minDepth);
|
|
||||||
|
|
||||||
# Check stopAtLevel
|
unless (defined $cacheContent) {
|
||||||
next if ($pageData->{"page.absDepth"} < $self->{_stopAtLevel});
|
# The loop was not cached
|
||||||
|
my @pages = eval $method;
|
||||||
|
if ($@) {
|
||||||
|
WebGUI::ErrorHandler::warn("Error in WebGUI::Navigation::build while trying to execute $method".$@);
|
||||||
|
}
|
||||||
|
|
||||||
# Check showSystemPages
|
# Store current page properties in template var
|
||||||
next if (! $self->{_showSystemPages} && $pageData->{"page.isSystem"});
|
my $currentPage = WebGUI::Page->getPage();
|
||||||
|
foreach my $property (@interestingPageProperties) {
|
||||||
|
$var->{'page.current.'.$property} = $currentPage->get($property);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (@pages) {
|
||||||
|
my $startPageDepth = ($p->ancestors);
|
||||||
|
my $maxDepth = $startPageDepth + $self->{_depth};
|
||||||
|
my $minDepth = $startPageDepth - $self->{_depth};
|
||||||
|
|
||||||
|
foreach my $page (@pages) {
|
||||||
|
my $pageData = {};
|
||||||
|
|
||||||
|
# Initial page info
|
||||||
|
$pageData->{"page.url"} = WebGUI::URL::gateway($page->{'urlizedTitle'});
|
||||||
|
$pageData->{"page.absDepth"} = $page->{'depth'} + 1;
|
||||||
|
$pageData->{"page.relDepth"} = $pageData->{"page.absDepth"} - $startPageDepth;
|
||||||
|
$pageData->{"page.isCurrent"} = ($page->{'pageId'} == $session{page}{pageId});
|
||||||
|
$pageData->{"page.isHidden"} = $page->{'hideFromNavigation'};
|
||||||
|
$pageData->{"page.isSystem"} = (($page->{'pageId'} < 1000 && $page->{'pageId'} > 1) ||
|
||||||
|
$page->{'pageId'} == 0);
|
||||||
|
|
||||||
|
# indent
|
||||||
|
my $indent = 0;
|
||||||
|
if ($self->{_method} eq 'pedigree' # reverse traversing
|
||||||
|
|| $self->{_method} eq 'ancestors' # needs another way to calculate
|
||||||
|
|| $self->{_method} eq 'self_and_ancestors') { # the indent
|
||||||
|
if ($self->{_stopAtLevel} <= $startPageDepth && $self->{_stopAtLevel} > 0) {
|
||||||
|
$indent = $pageData->{"page.absDepth"} - ($self->{_stopAtLevel} - 1) - 1;
|
||||||
|
} elsif ($self->{_stopAtLevel} > $startPageDepth && $self->{_stopAtLevel} > 0) {
|
||||||
|
$indent = 0;
|
||||||
|
} else {
|
||||||
|
$indent = $pageData->{"page.absDepth"} - 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$indent = $pageData->{"page.absDepth"} - $startPageDepth - 1;
|
||||||
|
}
|
||||||
|
$pageData->{"page.indent_loop"} = [];
|
||||||
|
push(@{$pageData->{"page.indent_loop"}},{'indent'=>$_}) for(1..$indent);
|
||||||
|
$pageData->{"page.indent"} = " " x $indent;
|
||||||
|
|
||||||
|
# Check if in depth range
|
||||||
|
next if ($pageData->{"page.absDepth"} > $maxDepth || $pageData->{"page.absDepth"} < $minDepth);
|
||||||
|
|
||||||
|
# Check stopAtLevel
|
||||||
|
next if ($pageData->{"page.absDepth"} < $self->{_stopAtLevel});
|
||||||
|
|
||||||
|
# Check showSystemPages
|
||||||
|
next if (! $self->{_showSystemPages} && $pageData->{"page.isSystem"});
|
||||||
|
|
||||||
# Check privileges
|
# Deal with hidden pages
|
||||||
next if (! $pageData->{"page.isViewable"} && ! $self->{_showUnprivilegedPages});
|
next if($page->{'hideFromNavigation'} && ! $self->{_showHiddenPages});
|
||||||
|
|
||||||
# Deal with hidden pages
|
# Put page properties in $pageData hashref
|
||||||
next if($page->get('hideFromNavigation') && ! $self->{_showHiddenPages});
|
foreach my $property (@interestingPageProperties) {
|
||||||
|
$pageData->{"page.".$property} = $page->{$property};
|
||||||
|
}
|
||||||
|
$pageData->{"page.isRoot"} = (! $page->{'parentId'});
|
||||||
|
$pageData->{"page.isTop"} = ($pageData->{"page.absDepth"} == 2);
|
||||||
|
$pageData->{"page.hasDaughter"} = ($page->{'rgt'} - $page->{'lft'} > 1);
|
||||||
|
$pageData->{"page.isMyDaughter"} = ($page->{'parentId'} ==
|
||||||
|
$currentPage->get('pageId'));
|
||||||
|
$pageData->{"page.isMyMother"} = ($page->{'pageId'} ==
|
||||||
|
$currentPage->get('parentId'));
|
||||||
|
$pageData->{"page.inCurrentRoot"} =
|
||||||
|
(($page->{'lft'} > $currentPage->get('lft')) && ($page->{'rgt'} < $currentPage->get('rgt'))) ||
|
||||||
|
(($page->{'lft'} < $currentPage->get('lft')) && ($page->{'rgt'} > $currentPage->get('rgt')));
|
||||||
|
# Some information about my mother
|
||||||
|
if ($page->{parentId} > 0) {
|
||||||
|
my $mother = WebGUI::Page->getPage($page->{parentId});
|
||||||
|
foreach (qw(title urlizedTitle parentId pageId)) {
|
||||||
|
$pageData->{"page.mother.$_"} = $mother->get($_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# Some information about my depth
|
||||||
|
$pageData->{"page.depthIs".$pageData->{"page.absDepth"}} = 1;
|
||||||
|
$pageData->{"page.relativeDepthIs".$pageData->{"page.absDepth"}} = 1;
|
||||||
|
|
||||||
# Put page properties in $pageData hashref
|
# Store $pageData in page_loop. Mind the order.
|
||||||
foreach my $property (@interestingPageProperties) {
|
if ($self->{_reverse}) {
|
||||||
$pageData->{"page.".$property} = $page->get($property);
|
unshift(@page_loop, $pageData);
|
||||||
}
|
} else {
|
||||||
$pageData->{"page.isRoot"} = (! $page->get('parentId'));
|
|
||||||
$pageData->{"page.isTop"} = ($pageData->{"page.absDepth"} == 2);
|
push(@page_loop, $pageData);
|
||||||
$pageData->{"page.hasDaughter"} = scalar($page->daughters);
|
|
||||||
$pageData->{"page.isMyDaughter"} = ($page->get('parentId') ==
|
|
||||||
$currentPage->get('pageId'));
|
|
||||||
$pageData->{"page.isMyMother"} = ($page->get('pageId') ==
|
|
||||||
$currentPage->get('parentId'));
|
|
||||||
|
|
||||||
# Some information about my mother
|
|
||||||
if(ref($page->mother)) {
|
|
||||||
foreach (qw(title urlizedTitle parentId pageId)) {
|
|
||||||
$pageData->{"page.mother.$_"} = $page->mother->get($_);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# Some information about my depth
|
}
|
||||||
$pageData->{"page.depthIs".$pageData->{"page.absDepth"}} = 1;
|
|
||||||
$pageData->{"page.relativeDepthIs".$pageData->{"page.absDepth"}} = 1;
|
|
||||||
|
|
||||||
# Store $pageData in page_loop. Mind the order.
|
# We had a cache miss, so let's put the data in cache
|
||||||
if ($self->{_reverse}) {
|
$cache->set(\@page_loop, 3600*24);
|
||||||
unshift(@{$var->{page_loop}}, $pageData);
|
} else {
|
||||||
} else {
|
# We had a cache hit
|
||||||
push(@{$var->{page_loop}}, $pageData);
|
@page_loop = @{$cacheContent};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Do the user-dependent checks (which cannot be cached globally)
|
||||||
|
foreach my $pageData (@page_loop) {
|
||||||
|
$pageData->{"page.isViewable"} = WebGUI::Page::canView($pageData->{'pageId'});
|
||||||
|
|
||||||
|
# Check privileges
|
||||||
|
unless (! $pageData->{"page.isViewable"} && ! $self->{_showUnprivilegedPages}) {
|
||||||
|
push (@{$var->{page_loop}}, $pageData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Configure button
|
# Configure button
|
||||||
$var->{'config.button'} = $self->_getEditButton();
|
$var->{'config.button'} = $self->_getEditButton();
|
||||||
|
|
||||||
if ($self->{_template}) {
|
if ($self->{_template}) {
|
||||||
return WebGUI::Template::processRaw($self->{_template}, $var);
|
return WebGUI::Template::processRaw($self->{_template}, $var);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ use WebGUI::SQL;
|
||||||
use WebGUI::URL;
|
use WebGUI::URL;
|
||||||
use WebGUI::Utility;
|
use WebGUI::Utility;
|
||||||
use WebGUI::TabForm;
|
use WebGUI::TabForm;
|
||||||
|
use WebGUI::Cache;
|
||||||
|
|
||||||
our @ISA = qw(Exporter);
|
our @ISA = qw(Exporter);
|
||||||
our @EXPORT = qw(&www_listNavigation &www_editNavigation &www_editNavigationSave &www_copyNavigation
|
our @EXPORT = qw(&www_listNavigation &www_editNavigation &www_editNavigationSave &www_copyNavigation
|
||||||
|
|
@ -90,6 +91,9 @@ sub www_deleteNavigationConfirm {
|
||||||
return WebGUI::Privilege::vitalComponent();
|
return WebGUI::Privilege::vitalComponent();
|
||||||
}
|
}
|
||||||
WebGUI::SQL->write("delete from Navigation where navigationId = $session{form}{navigationId}");
|
WebGUI::SQL->write("delete from Navigation where navigationId = $session{form}{navigationId}");
|
||||||
|
|
||||||
|
# Also delete cache
|
||||||
|
WebGUI::Cache->new("", "Navigation-".$session{config}{configFile})->deleteByRegex("m/^$session{form}{navigationId}-/");
|
||||||
return www_listNavigation();
|
return www_listNavigation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -270,6 +274,9 @@ sub www_editNavigationSave {
|
||||||
identifier = ".quote($session{form}{identifier}).",
|
identifier = ".quote($session{form}{identifier}).",
|
||||||
reverse = ".quote($session{form}{'reverse'})."
|
reverse = ".quote($session{form}{'reverse'})."
|
||||||
where navigationId = $session{form}{navigationId}");
|
where navigationId = $session{form}{navigationId}");
|
||||||
|
# Delete from cache
|
||||||
|
WebGUI::Cache->new("", "Navigation-".$session{config}{configFile})->deleteByRegex("m/^$session{form}{navigationId}-/");
|
||||||
|
|
||||||
return www_listNavigation();
|
return www_listNavigation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -336,6 +343,10 @@ sub www_previewNavigation {
|
||||||
</font>
|
</font>
|
||||||
</td><td class="tableData" valign="top">
|
</td><td class="tableData" valign="top">
|
||||||
) . $nav->build . qq(</td></tr></table>);
|
) . $nav->build . qq(</td></tr></table>);
|
||||||
|
|
||||||
|
# Because of the way the system is set up, the preview is cached. So let's remove it again...
|
||||||
|
WebGUI::Cache->new($nav->{_identifier}."$session{page}{pageId}", "Navigation-".$session{config}{configFile})->delete;
|
||||||
|
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -81,8 +81,8 @@ sub _recursivelyChangeProperties {
|
||||||
|
|
||||||
_changeWobjectPrivileges($page->get("pageId")) unless $session{form}{wobjectPrivileges};
|
_changeWobjectPrivileges($page->get("pageId")) unless $session{form}{wobjectPrivileges};
|
||||||
|
|
||||||
$page->walk_down({
|
$page->traversePreOrder(
|
||||||
callback => sub {
|
sub {
|
||||||
$currentPage = shift;
|
$currentPage = shift;
|
||||||
if (WebGUI::Page::canEdit($currentPage->get('pageId'))) {
|
if (WebGUI::Page::canEdit($currentPage->get('pageId'))) {
|
||||||
$currentPage->setWithoutRecache({
|
$currentPage->setWithoutRecache({
|
||||||
|
|
@ -99,9 +99,9 @@ sub _recursivelyChangeProperties {
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
});
|
);
|
||||||
|
|
||||||
WebGUI::Page->recachePageTree;
|
WebGUI::Page->recacheNavigation;
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
|
@ -194,10 +194,10 @@ sub _traversePageTree {
|
||||||
|
|
||||||
tie %wobject, 'Tie::CPHash';
|
tie %wobject, 'Tie::CPHash';
|
||||||
$spacer = '<img src="'.$session{config}{extrasURL}.'/spacer.gif" width=12>';
|
$spacer = '<img src="'.$session{config}{extrasURL}.'/spacer.gif" width=12>';
|
||||||
|
|
||||||
$page = WebGUI::Page->getPage($top);
|
$page = WebGUI::Page->getPage($top);
|
||||||
$page->walk_down({
|
|
||||||
callback => sub {
|
$page->traversePreOrder(
|
||||||
|
sub {
|
||||||
($currentPage, $options) = @_;
|
($currentPage, $options) = @_;
|
||||||
$currentPageId = $currentPage->get('pageId');
|
$currentPageId = $currentPage->get('pageId');
|
||||||
$currentUrlizedTitle = $currentPage->get('urlizedTitle');
|
$currentUrlizedTitle = $currentPage->get('urlizedTitle');
|
||||||
|
|
@ -221,9 +221,8 @@ sub _traversePageTree {
|
||||||
}
|
}
|
||||||
$wobjects->finish;
|
$wobjects->finish;
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
_depth => $initialDepth || 0
|
);
|
||||||
});
|
|
||||||
|
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
@ -614,7 +613,8 @@ Moves page down in the context of it's sisters.
|
||||||
=cut
|
=cut
|
||||||
sub www_movePageDown {
|
sub www_movePageDown {
|
||||||
if (WebGUI::Page::canEdit($session{page}{pageId})) {
|
if (WebGUI::Page::canEdit($session{page}{pageId})) {
|
||||||
WebGUI::Page->moveDown($session{page}{pageId});
|
my $page = WebGUI::Page->getPage;
|
||||||
|
$page->moveRight;
|
||||||
return "";
|
return "";
|
||||||
} else {
|
} else {
|
||||||
return WebGUI::Privilege::insufficient();
|
return WebGUI::Privilege::insufficient();
|
||||||
|
|
@ -631,7 +631,8 @@ Moves page up in the context of it's sisters.
|
||||||
=cut
|
=cut
|
||||||
sub www_movePageUp {
|
sub www_movePageUp {
|
||||||
if (WebGUI::Page::canEdit($session{page}{pageId})) {
|
if (WebGUI::Page::canEdit($session{page}{pageId})) {
|
||||||
WebGUI::Page->moveUp($session{page}{pageId});
|
my $page = WebGUI::Page->getPage;
|
||||||
|
$page->moveLeft;
|
||||||
return "";
|
return "";
|
||||||
} else {
|
} else {
|
||||||
return WebGUI::Privilege::insufficient();
|
return WebGUI::Privilege::insufficient();
|
||||||
|
|
@ -647,8 +648,8 @@ Same as www_movePageUp wit this difference that this module returns the www_view
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
sub www_moveTreePageUp {
|
sub www_moveTreePageUp {
|
||||||
if (WebGUI::Page::canEdit($session{page}{pageId})) {
|
if (WebGUI::Page::canEdit($session{form}{pageId})) {
|
||||||
WebGUI::Page->moveUp($session{page}{pageId});
|
WebGUI::Page->getPage($session{form}{pageId})->moveLeft;
|
||||||
return www_viewPageTree();
|
return www_viewPageTree();
|
||||||
} else {
|
} else {
|
||||||
return WebGUI::Privilege::insufficient();
|
return WebGUI::Privilege::insufficient();
|
||||||
|
|
@ -664,8 +665,8 @@ Same as www_movePageDown with this difference that this module returns the www_v
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
sub www_moveTreePageDown {
|
sub www_moveTreePageDown {
|
||||||
if (WebGUI::Page::canEdit($session{page}{pageId})) {
|
if (WebGUI::Page::canEdit($session{form}{pageId})) {
|
||||||
WebGUI::Page->moveDown($session{page}{pageId});
|
WebGUI::Page->getPage($session{form}{pageId})->moveRight;
|
||||||
return www_viewPageTree();
|
return www_viewPageTree();
|
||||||
} else {
|
} else {
|
||||||
return WebGUI::Privilege::insufficient();
|
return WebGUI::Privilege::insufficient();
|
||||||
|
|
@ -682,8 +683,8 @@ Another way to look at is that the mother of the current page becomes the elder
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
sub www_moveTreePageLeft {
|
sub www_moveTreePageLeft {
|
||||||
if (WebGUI::Page::canEdit($session{page}{pageId})) {
|
if (WebGUI::Page::canEdit($session{form}{pageId})) {
|
||||||
WebGUI::Page->moveLeft($session{page}{pageId});
|
WebGUI::Page->getPage($session{form}{pageId})->moveUp;
|
||||||
return www_viewPageTree();
|
return www_viewPageTree();
|
||||||
} else {
|
} else {
|
||||||
return WebGUI::Privilege::insufficient();
|
return WebGUI::Privilege::insufficient();
|
||||||
|
|
@ -692,8 +693,8 @@ sub www_moveTreePageLeft {
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
sub www_moveTreePageRight {
|
sub www_moveTreePageRight {
|
||||||
if (WebGUI::Page::canEdit($session{page}{pageId})) {
|
if (WebGUI::Page::canEdit($session{form}{pageId})) {
|
||||||
WebGUI::Page->moveRight($session{page}{pageId});
|
WebGUI::Page->getPage($session{form}{pageId})->moveDown;
|
||||||
return www_viewPageTree();
|
return www_viewPageTree();
|
||||||
} else {
|
} else {
|
||||||
return WebGUI::Privilege::insufficient();
|
return WebGUI::Privilege::insufficient();
|
||||||
|
|
|
||||||
|
|
@ -53,11 +53,11 @@ sub _purgeUserTrash {
|
||||||
|
|
||||||
# Delete pages and all subpages
|
# Delete pages and all subpages
|
||||||
$page = WebGUI::Page->getPage(3);
|
$page = WebGUI::Page->getPage(3);
|
||||||
foreach $currentPage ($page->daughters) {
|
foreach ($page->daughters) {
|
||||||
print "page: ".$currentPage->get('menuTitle')." - UID: ".$currentPage->get('bufferUserId')."\n\n\n<br>";
|
$currentPage = WebGUI::Page->new($_);
|
||||||
if ($currentPage->get('bufferUserId') == $userId) {
|
if ($currentPage->get('bufferUserId') == $userId) {
|
||||||
foreach $currentWobjectPage ($currentPage->self_and_descendants) {
|
foreach $currentWobjectPage ($currentPage->self_and_descendants) {
|
||||||
_purgeWobjects($currentWobjectPage->get('pageId'));
|
_purgeWobjects($currentWobjectPage->{'pageId'});
|
||||||
}
|
}
|
||||||
$currentPage->purge;
|
$currentPage->purge;
|
||||||
}
|
}
|
||||||
|
|
@ -209,7 +209,7 @@ sub www_deleteTrashItemConfirm {
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach my $currentPage ($page->self_and_descendants) {
|
foreach my $currentPage ($page->self_and_descendants) {
|
||||||
_purgeWobjects($currentPage->get("pageId"));
|
_purgeWobjects($currentPage->{"pageId"});
|
||||||
}
|
}
|
||||||
|
|
||||||
$page->purge;
|
$page->purge;
|
||||||
|
|
@ -254,11 +254,12 @@ sub www_emptyTrashConfirm {
|
||||||
}
|
}
|
||||||
if ($allUsers eq "1") {
|
if ($allUsers eq "1") {
|
||||||
$page = WebGUI::Page->getPage(3);
|
$page = WebGUI::Page->getPage(3);
|
||||||
foreach $currentPage ($page->daughters) {
|
foreach ($page->daughters) {
|
||||||
|
$currentPage = WebGUI::Page->new($_);
|
||||||
foreach $currentWobjectPage ($currentPage->self_and_descendants) {
|
foreach $currentWobjectPage ($currentPage->self_and_descendants) {
|
||||||
_purgeWobjects($currentPage->get("pageId"));
|
_purgeWobjects($currentWobjectPage->{"pageId"});
|
||||||
}
|
}
|
||||||
$page->purge;
|
$currentPage->purge;
|
||||||
}
|
}
|
||||||
_purgeWobjects(3);
|
_purgeWobjects(3);
|
||||||
WebGUI::ErrorHandler::audit("emptied system trash");
|
WebGUI::ErrorHandler::audit("emptied system trash");
|
||||||
|
|
|
||||||
1149
lib/WebGUI/Page.pm
1149
lib/WebGUI/Page.pm
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue