diff options
author | lpsolit%gmail.com <> | 2006-05-30 03:11:03 +0200 |
---|---|---|
committer | lpsolit%gmail.com <> | 2006-05-30 03:11:03 +0200 |
commit | 422a379558b0738d842c1e5b997ef8357ff18ac4 (patch) | |
tree | 23ec4794177a623072f8150c5f0d38dffb8fafe3 /editgroups.cgi | |
parent | 853c40ff96d824455483f3ff8d1d2f6c1710070c (diff) | |
download | bugzilla-422a379558b0738d842c1e5b997ef8357ff18ac4.tar.gz bugzilla-422a379558b0738d842c1e5b997ef8357ff18ac4.tar.xz |
Bug 324784: editgroups.cgi should make sure groups it edits/removes are not used by editparams.cgi (in data/params) - Patch by Frédéric Buclin <LpSolit@gmail.com> r=wicked a=justdave
Diffstat (limited to 'editgroups.cgi')
-rwxr-xr-x | editgroups.cgi | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/editgroups.cgi b/editgroups.cgi index 9c1280d5c..7b86df35a 100755 --- a/editgroups.cgi +++ b/editgroups.cgi @@ -31,6 +31,7 @@ use lib "."; use Bugzilla; use Bugzilla::Constants; +use Bugzilla::Config qw(:DEFAULT :admin); use Bugzilla::Group; use Bugzilla::User; require "globals.pl"; @@ -338,6 +339,17 @@ if ($action eq 'del') { if (!$isbuggroup) { ThrowUserError("system_group_not_deletable", { name => $name }); } + # Groups having a special role cannot be deleted. + my @special_groups; + foreach my $special_group ('chartgroup', 'insidergroup', 'timetrackinggroup') { + if ($name eq Param($special_group)) { + push(@special_groups, $special_group); + } + } + if (scalar(@special_groups)) { + ThrowUserError('group_has_special_role', {'name' => $name, + 'groups' => \@special_groups}); + } # Group inheritance no longer appears in user_group_map. my $grouplist = join(',', @{Bugzilla::User->flatten_group_membership($gid)}); @@ -391,6 +403,17 @@ if ($action eq 'delete') { if (!$isbuggroup) { ThrowUserError("system_group_not_deletable", { name => $name }); } + # Groups having a special role cannot be deleted. + my @special_groups; + foreach my $special_group ('chartgroup', 'insidergroup', 'timetrackinggroup') { + if ($name eq Param($special_group)) { + push(@special_groups, $special_group); + } + } + if (scalar(@special_groups)) { + ThrowUserError('group_has_special_role', {'name' => $name, + 'groups' => \@special_groups}); + } my $cantdelete = 0; @@ -596,6 +619,16 @@ sub doGroupChanges { $chgs = 1; $dbh->do('UPDATE groups SET name = ? WHERE id = ?', undef, ($name, $gid)); + # If the group is used by some parameters, we have to update + # these parameters too. + my $update_params = 0; + foreach my $group ('chartgroup', 'insidergroup', 'timetrackinggroup') { + if ($cgi->param('oldname') eq Param($group)) { + SetParam($group, $name); + $update_params = 1; + } + } + WriteParams() if $update_params; } if ($desc ne $cgi->param('olddesc')) { $chgs = 1; |