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 = '