]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Fix for bug 75482: adding the capability to deactivate a group without deleting it...
authorjustdave%syndicomm.com <>
Wed, 6 Jun 2001 10:16:47 +0000 (10:16 +0000)
committerjustdave%syndicomm.com <>
Wed, 6 Jun 2001 10:16:47 +0000 (10:16 +0000)
Patch by Myk Melez <myk@mozilla.org>
r= justdave@syndicomm.com

bug_form.pl
checksetup.pl
editgroups.cgi
enter_bug.cgi
globals.pl
post_bug.cgi

index 0706ede99efd7b2e309ddd86e97d944e1a033b0f..7801f27545ab87b7f5a6ed7a6fb1f753f8e73a88 100644 (file)
@@ -368,7 +368,14 @@ print "
 
 
 if ($::usergroupset ne '0') {
-    SendSQL("select bit, description, (bit & $bug{'groupset'} != 0) from groups where bit & $::usergroupset != 0 and isbuggroup != 0 order by bit");
+    SendSQL("select bit, description, (bit & $bug{'groupset'} != 0) " . 
+            "from groups where bit & $::usergroupset != 0 " . 
+            "and isbuggroup != 0 " . 
+            # Include active groups as well as inactive groups to which
+            # the bug already belongs.  This way the bug can be removed
+            # from an inactive group but can only be added to active ones.
+            "and (isactive = 1 or (bit & $bug{'groupset'} != 0)) " . 
+            "order by bit");
     while (MoreSQLData()) {
         my ($bit, $description, $ison) = (FetchSQLData());
         my $check0 = !$ison ? " SELECTED" : "";
index 310250e71d2778cf9b0ad22e6d805bbc75392490..0da9af7635dafd356ab0f4b80e1a46387e7dce24 100755 (executable)
@@ -790,6 +790,13 @@ $table{dependencies} =
 # User regexp is which email addresses are initially put into this group.
 # This is only used when an email account is created; otherwise, profiles
 # may be individually tweaked to add them in and out of groups.
+#
+# 2001-04-10 myk@mozilla.org:
+# isactive determines whether or not a group is active.  An inactive group
+# cannot have bugs added to it.  Deactivation is a much milder form of
+# deleting a group that allows users to continue to work on bugs in the group
+# without enabling them to extend the life of the group by adding bugs to it.
+# http://bugzilla.mozilla.org/show_bug.cgi?id=75482
 
 $table{groups} =
    'bit bigint not null,
@@ -797,6 +804,7 @@ $table{groups} =
     description text not null,
     isbuggroup tinyint not null,
     userregexp tinytext not null,
+    isactive tinyint not null default 1,
 
     unique(bit),
     unique(name)';
@@ -2157,6 +2165,16 @@ unless (-d 'data/duplicates') {
     } 
 }
 
+#
+# 2001-04-10 myk@mozilla.org:
+# isactive determines whether or not a group is active.  An inactive group
+# cannot have bugs added to it.  Deactivation is a much milder form of
+# deleting a group that allows users to continue to work on bugs in the group
+# without enabling them to extend the life of the group by adding bugs to it.
+# http://bugzilla.mozilla.org/show_bug.cgi?id=75482
+#
+AddField('groups', 'isactive', 'tinyint not null default 1');
+
 # 2001-04-29 jake@acutex.net - Remove oldemailtech
 #   http://bugzilla.mozilla.org/show_bugs.cgi?id=71552
 if (-d 'shadow') {
index 202cd56b926f3620b71caa75bdd92e24d2102168..1626fc3a4e2b5c8f96feb2264192d8841e5372d9 100755 (executable)
@@ -105,16 +105,17 @@ unless ($action) {
     print "<th>Name</th>";
     print "<th>Description</th>";
     print "<th>User RegExp</th>";
+    print "<th>Active</th>";
     print "<th>Action</th>";
     print "</tr>\n";
 
-    SendSQL("SELECT bit,name,description,userregexp " .
+    SendSQL("SELECT bit,name,description,userregexp,isactive " .
             "FROM groups " .
             "WHERE isbuggroup != 0 " .
             "ORDER BY bit");
 
     while (MoreSQLData()) {
-        my ($bit, $name, $desc, $regexp) = FetchSQLData();
+        my ($bit, $name, $desc, $regexp, $isactive) = FetchSQLData();
         print "<tr>\n";
         print "<td valign=middle>$bit</td>\n";
         print "<td><input size=20 name=\"name-$bit\" value=\"$name\">\n";
@@ -123,12 +124,14 @@ unless ($action) {
         print "<input type=hidden name=\"olddesc-$bit\" value=\"$desc\"></td>\n";
         print "<td><input size=30 name=\"regexp-$bit\" value=\"$regexp\">\n";
         print "<input type=hidden name=\"oldregexp-$bit\" value=\"$regexp\"></td>\n";
+        print "<td><input type=\"checkbox\" name=\"isactive-$bit\" value=\"1\"" . ($isactive ? " checked" : "") . ">\n";
+        print "<input type=hidden name=\"oldisactive-$bit\" value=\"$isactive\"></td>\n";
         print "<td align=center valign=middle><a href=\"editgroups.cgi?action=del&group=$bit\">Delete</a></td>\n";
         print "</tr>\n";
     }
 
     print "<tr>\n";
-    print "<td colspan=4></td>\n";
+    print "<td colspan=5></td>\n";
     print "<td><a href=\"editgroups.cgi?action=add\">Add Group</a></td>\n";
     print "</tr>\n";
     print "</table>\n";
@@ -146,6 +149,11 @@ to others in the same group.<p>";
     print "<b>User RegExp</b> is optional, and if filled in, will automatically
 grant membership to this group to anyone creating a new account with an
 email address that matches this regular expression.<p>";
+    print "The <b>Active</b> flag determines whether or not the group is active.
+If you deactivate a group it will no longer be possible for users to add bugs
+to that group, although bugs already in the group will remain in the group.
+Deactivating a group is a much less drastic way to stop a group from growing
+than deleting the group would be.<p>";
     print "In addition, the following groups that determine user privileges
 exist.  You can only edit the User rexexp on these groups.  You should also take
 care not to duplicate the Names of any of them in your user groups.<p>";
@@ -201,10 +209,12 @@ if ($action eq 'add') {
     print "<th>New Name</th>";
     print "<th>New Description</th>";
     print "<th>New User RegExp</th>";
+    print "<th>Active</th>";
     print "</tr><tr>";
     print "<td><input size=20 name=\"name\"></td>\n";
     print "<td><input size=40 name=\"desc\"></td>\n";
     print "<td><input size=30 name=\"regexp\"></td>\n";
+    print "<td><input type=\"checkbox\" name=\"isactive\" value=\"1\" checked></td>\n";
     print "</TR></TABLE>\n<HR>\n";
     print "<INPUT TYPE=SUBMIT VALUE=\"Add\">\n";
     print "<INPUT TYPE=HIDDEN NAME=\"action\" VALUE=\"new\">\n";
@@ -218,6 +228,12 @@ may not contain any spaces.<p>";
     print "<b>Description</b> is what will be shown in the bug reports to
 members of the group where they can choose whether the bug will be restricted
 to others in the same group.<p>";
+    print "The <b>Active</b> flag determines whether or not the group is active.
+If you deactivate a group it will no longer be possible for users to add bugs
+to that group, although bugs already in the group will remain in the group.
+Deactivating a group is a much less drastic way to stop a group from growing
+than deleting the group would be.  <b>Note: If you are creating a group, you
+probably want it to be active, in which case you should leave this checked.</b><p>";
     print "<b>User RegExp</b> is optional, and if filled in, will automatically
 grant membership to this group to anyone creating a new account with an
 email address that matches this regular expression.<p>";
@@ -239,6 +255,10 @@ if ($action eq 'new') {
     my $name = trim($::FORM{name} || '');
     my $desc = trim($::FORM{desc} || '');
     my $regexp = trim($::FORM{regexp} || '');
+    # convert an undefined value in the inactive field to zero
+    # (this occurs when the inactive checkbox is not checked
+    # and the browser does not send the field to the server)
+    my $isactive = $::FORM{isactive} || 0;
 
     unless ($name) {
         ShowError("You must enter a name for the new group.<BR>" .
@@ -259,6 +279,14 @@ if ($action eq 'new') {
        exit;
     }
 
+    if ($isactive != 0 && $isactive != 1) {
+        ShowError("The active flag was improperly set.  There may be " . 
+                  "a problem with Bugzilla or a bug in your browser.<br>" . 
+                  "Please click the <b>Back</b> button and try again.");
+        PutFooter();
+       exit;
+    }
+
     # Major hack for bit values...  perl can't handle 64-bit ints, so I can't
     # just do the math to get the next available bit number, gotta handle
     # them as strings...  also, we're actually only going to allow 63 bits
@@ -304,13 +332,14 @@ if ($action eq 'new') {
 
     # Add the new group
     SendSQL("INSERT INTO groups ( " .
-            "bit, name, description, isbuggroup, userregexp" .
+            "bit, name, description, isbuggroup, userregexp, isactive" .
             " ) VALUES ( " .
             $bit . "," .
             SqlQuote($name) . "," .
             SqlQuote($desc) . "," .
             "1," .
-            SqlQuote($regexp) . ")" );
+            SqlQuote($regexp) . "," . 
+            $isactive . ")" );
 
     print "OK, done.<p>\n";
     print "Your new group was assigned bit #$bit.<p>";
@@ -573,6 +602,23 @@ if ($action eq 'update') {
                         " WHERE bit=" . SqlQuote($v));
                 print "Group $v user regexp updated.<br>\n";
             }
+            # convert an undefined value in the inactive field to zero
+            # (this occurs when the inactive checkbox is not checked 
+            # and the browser does not send the field to the server)
+            my $isactive = $::FORM{"isactive-$v"} || 0;
+            if ($::FORM{"oldisactive-$v"} != $isactive) {
+                $chgs = 1;
+                if ($isactive == 0 || $isactive == 1) {
+                    SendSQL("UPDATE groups SET isactive=$isactive" .
+                            " WHERE bit=" . SqlQuote($v));
+                    print "Group $v active flag updated.<br>\n";
+                } else {
+                    ShowError("The value '" . $isactive .
+                              "' is not a valid value for the active flag.<BR>" .
+                              "There may be a problem with Bugzilla or a bug in your browser.<br>" . 
+                              "Update of active flag for group $v skipped.");
+                }
+            }
         }
     }
     if (!$chgs) {
index 10c328e1b9de9d7e2d2e23fd0c626430abab0bbd..493dcadd38a974407a7c3835979cb64b58866ebc 100755 (executable)
@@ -410,7 +410,7 @@ print "
 if ($::usergroupset ne '0') {
     SendSQL("SELECT bit, description FROM groups " .
             "WHERE bit & $::usergroupset != 0 " .
-            "  AND isbuggroup != 0 ORDER BY description");
+            "  AND isbuggroup != 0 AND isactive = 1 ORDER BY description");
      while (MoreSQLData()) {
         my ($bit, $description) = (FetchSQLData());
         # Rather than waste time with another Param check and another database
index 81aa80e4ea6e0e4f16cb2377a40e9808456c9d29..e81363673857dc2d64593db569f080dd787ab97f 100644 (file)
@@ -969,6 +969,17 @@ sub GroupExists {
     return $count;
 }
 
+# Determines whether or not a group is active by checking 
+# the "isactive" column for the group in the "groups" table.
+# Note: This function selects groups by bit rather than by name.
+sub GroupIsActive {
+    my ($groupbit) = (@_);
+    ConnectToDatabase();
+    SendSQL("select isactive from groups where bit=$groupbit");
+    my $isactive = FetchOneColumn();
+    return $isactive;
+}
+
 # Determines if the given bug_status string represents an "Opened" bug.  This
 # routine ought to be paramaterizable somehow, as people tend to introduce
 # new states into Bugzilla.
index 90ca32f529c391299e473d76fb7e329afb125c15..68842b64627454ff3c36f119edabaf929ff3fcc0 100755 (executable)
@@ -207,6 +207,17 @@ $query .= "now(), 0";
 foreach my $b (grep(/^bit-\d*$/, keys %::FORM)) {
     if ($::FORM{$b}) {
         my $v = substr($b, 4);
+        $v =~ /^(\d+)$/
+          || PuntTryAgain("One of the group bits submitted was invalid.");
+        if (!GroupIsActive($v)) {
+            # Prevent the user from adding the bug to an inactive group.
+            # Should only happen if there is a bug in Bugzilla or the user
+            # hacked the "enter bug" form since otherwise the UI 
+            # for adding the bug to the group won't appear on that form.
+            PuntTryAgain("You can't add this bug to the inactive group " . 
+                         "identified by the bit '$v'. This shouldn't happen, " . 
+                         "so it may indicate a bug in Bugzilla.");
+        }
         $query .= " + $v";    # Carefully written so that the math is
                                 # done by MySQL, which can handle 64-bit math,
                                 # and not by Perl, which I *think* can not.