]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 324784: editgroups.cgi should make sure groups it edits/removes are not used...
authorlpsolit%gmail.com <>
Tue, 30 May 2006 05:05:30 +0000 (05:05 +0000)
committerlpsolit%gmail.com <>
Tue, 30 May 2006 05:05:30 +0000 (05:05 +0000)
editgroups.cgi
template/en/default/admin/groups/list.html.tmpl
template/en/default/global/user-error.html.tmpl

index c366c6d798f04c0d3045a1c39c27cc2799c0beb5..4baa50e94c9310d5f23cd94a03635411fc6601c3 100755 (executable)
@@ -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;
 
@@ -598,6 +621,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;
index f32e715d67d8124f409def341d06db7f6ae3fe9d..64e30f9e46802c0670824b7a4669e8491f56e388 100644 (file)
      content => "&nbsp;"
    }]
    overrides.action = [ {
-     match_value => "0"
-     match_field => 'isbuggroup'
+     match_value => Param("chartgroup")
+     match_field => 'name'
      override_content => 1
-     content => "&nbsp;"
+     content => "(used as the 'chartgroup')"
+   },
+   {
+     match_value => Param("insidergroup")
+     match_field => 'name'
+     override_content => 1
+     content => "(used as the 'insidergroup')"
+   },
+   {
+     match_value => Param("timetrackinggroup")
+     match_field => 'name'
+     override_content => 1
+     content => "(used as the 'timetrackinggroup')"
    },
    {
      match_value => "1"
index c71ae9dcd912db31fd0df02720abc549a196b0eb..d0f105ef759165022c6b8db63ef864fd8e439662 100644 (file)
     [% title = "The group already exists" %]
     The group [% name FILTER html %] already exists.
 
+  [% ELSIF error == "group_has_special_role" %]
+    [% title = "Group not deletable" %]
+    [% IF groups.size == 1 %]
+      [% attr = "it" %]
+      [% param = "parameter" %]
+    [% ELSE %]
+      [% attr = "them" %]
+      [% param = "parameters" %]
+    [% END %]
+    The group '[% name FILTER html %]' is used by the
+    '[% groups.join("' and '") FILTER html %]' [% param FILTER html %].
+    In order to delete this group, you first have to change the
+    [%+ param FILTER html %] to make [% attr FILTER html %] point to another group.
+
   [% ELSIF error == "group_not_specified" %]
     [% title = "Group not specified" %]
     No group was specified.