diff --git a/lib/WebGUI/Grouping.pm b/lib/WebGUI/Grouping.pm index a11692486..bf94919f9 100755 --- a/lib/WebGUI/Grouping.pm +++ b/lib/WebGUI/Grouping.pm @@ -18,6 +18,8 @@ use strict; use WebGUI::DateTime; use WebGUI::Session; use WebGUI::SQL; +use WebGUI::ErrorHandler; +use WebGUI::Utility; =head1 NAME @@ -74,7 +76,8 @@ sub addGroupsToGroups { foreach my $toGid (@{$_[1]}) { my ($isIn) = WebGUI::SQL->quickArray("select count(*) from groupGroupings where groupId=$gid and inGroup=$toGid"); - unless ($isIn) { + my $recursive = isIn($toGid, @{getGroupsInGroup($gid,1)}); + unless ($isIn || $recursive) { WebGUI::SQL->write("insert into groupGroupings (groupId,inGroup) values ($gid,$toGid)"); } } @@ -257,9 +260,14 @@ sub getGroupsInGroup { return undef unless $_[0]; my $groups = WebGUI::SQL->buildArrayRef("select groupId from groupGroupings where inGroup=$_[0]"); if ($_[1]) { + my $loopCount = $_[2]++ || 1; + if ($loopCount > 99) { + WebGUI::ErrorHandler::fatalError("Endless recursive loop detected while determinating". + " groups in group.\nRequested groupId: ".$_[0]."\nGroups in that group: ".join(",",@$groups)); + } my @groupsOfGroups = @$groups; foreach my $group (@$groups) { - my $gog = getGroupsInGroup($group,1); + my $gog = getGroupsInGroup($group,1,$loopCount); push(@groupsOfGroups, @$gog); } return \@groupsOfGroups; diff --git a/lib/WebGUI/Operation/Navigation.pm b/lib/WebGUI/Operation/Navigation.pm index eae4c7d0a..55b4bc755 100644 --- a/lib/WebGUI/Operation/Navigation.pm +++ b/lib/WebGUI/Operation/Navigation.pm @@ -115,7 +115,7 @@ sub www_editNavigation { $config->{showUnprivilegedPages} = 0; $config->{'reverse'} = 0; } - my $output = '

'.WebGUI::International::get(22, 'Navigation').'

'; + my $output = helpIcon(79).'

'.WebGUI::International::get(22, 'Navigation').'

'; tie my (%tabs) , 'Tie::IxHash'; %tabs = ( properties=>{ @@ -270,7 +270,7 @@ sub www_editNavigationSave { #------------------------------------------------------------------- sub www_listNavigation { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(3)); - my $output .= '

'.WebGUI::International::get(34,'Navigation').'

'; + my $output .= helpIcon(80).'

'.WebGUI::International::get(34,'Navigation').'

'; my $sth = WebGUI::SQL->read("select navigationId, identifier from Navigation order by identifier"); my $i = 0; my @row = (); @@ -315,7 +315,7 @@ sub www_previewNavigation { Configuration Output - + Identifier: $session{form}{identifier}
startAt: $session{form}{startAt}