summaryrefslogtreecommitdiffstats
path: root/editgroups.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'editgroups.cgi')
-rwxr-xr-xeditgroups.cgi33
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;