]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 298688: Forbid the deletion of values used by default for the priority, severity...
authorlpsolit%gmail.com <>
Thu, 20 Oct 2005 05:21:04 +0000 (05:21 +0000)
committerlpsolit%gmail.com <>
Thu, 20 Oct 2005 05:21:04 +0000 (05:21 +0000)
editvalues.cgi
template/en/default/admin/fieldvalues/confirm-delete.html.tmpl
template/en/default/admin/fieldvalues/list.html.tmpl
template/en/default/admin/fieldvalues/updated.html.tmpl
template/en/default/global/user-error.html.tmpl

index 897498db3ffa8c9f6f37f60f214655b964f18852..5b45aac92f3b48a38419e36fd70ecd0a3ebe31f4 100755 (executable)
@@ -12,6 +12,7 @@
 # The Original Code is the Bugzilla Bug Tracking System.
 #
 # Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org>
+#                 Frédéric Buclin <LpSolit@gmail.com>
 
 # This is a script to edit the values of fields that have drop-down
 # or select boxes. It is largely a copy of editmilestones.cgi, but 
 use strict;
 use lib ".";
 
+require "globals.pl";
 use Bugzilla;
 use Bugzilla::Util;
 use Bugzilla::Error;
 use Bugzilla::Constants;
-use Bugzilla::Config qw(:DEFAULT :locations);
+use Bugzilla::Config qw(:DEFAULT :admin :locations);
 
 # List of different tables that contain the changeable field values
 # (the old "enums.") Keep them in alphabetical order by their 
@@ -115,6 +117,13 @@ my $value   = trim($cgi->param('value')   || '');
 my $sortkey = trim($cgi->param('sortkey') || '0');
 my $action  = trim($cgi->param('action')  || '');
 
+# Gives the name of the parameter associated with the field
+# and representing its default value.
+my %defaults = {};
+$defaults{'op_sys'} = 'defaultopsys';
+$defaults{'rep_platform'} = 'defaultplatform';
+$defaults{'priority'} = 'defaultpriority';
+$defaults{'bug_severity'} = 'defaultseverity';
 
 #
 # field = '' -> Show nice list of fields
@@ -148,6 +157,7 @@ unless ($action) {
                                  {Slice =>{}});
     $vars->{'field'} = $field;
     $vars->{'values'} = $fieldvalues;
+    $vars->{'default'} = Param($defaults{$field});
     $template->process("admin/fieldvalues/list.html.tmpl",
                        $vars)
       || ThrowTemplateError($template->error());
@@ -237,6 +247,7 @@ if ($action eq 'del') {
 
     $vars->{'value'} = $value;
     $vars->{'field'} = $field;
+    $vars->{'param_name'} = $defaults{$field};
     $template->process("admin/fieldvalues/confirm-delete.html.tmpl",
                        $vars)
       || ThrowTemplateError($template->error());
@@ -250,6 +261,11 @@ if ($action eq 'del') {
 #
 if ($action eq 'delete') {
     ValueMustExist($field, $value);
+    if ($value eq Param($defaults{$field})) {
+        ThrowUserError('fieldvalue_is_default', {field      => $field,
+                                                 value      => $value,
+                                                 param_name => $defaults{$field}})
+    }
     trick_taint($field);
     trick_taint($value);
 
@@ -366,7 +382,20 @@ if ($action eq 'update') {
         $vars->{'updated_value'} = 1;
     }
 
-    $dbh->bz_unlock_tables(); 
+    $dbh->bz_unlock_tables();
+
+    # If the old value was the default value for the field,
+    # update data/params accordingly.
+    # This update is done while tables are unlocked due to the
+    # annoying call to GetVersionTable in Bugzilla/Config/Common.pm.
+    if ($value ne $valueold
+        && $valueold eq Param($defaults{$field}))
+    {
+        SetParam($defaults{$field}, $value);
+        WriteParams();
+        unlink "$datadir/versioncache";
+        $vars->{'default_value_updated'} = 1;
+    }
 
     $vars->{'value'} = $value;
     $vars->{'field'} = $field;
index d1a016d8d3d92f9afd150a33ccadf134743d791b..31deb547f47a51da1c7a05bf85d5c833d6191221 100644 (file)
@@ -20,6 +20,8 @@
   # value_count: number; The number of values left for this field, including
   #              this value.
   # field: string; The name of the field.
+  # param_name: string; The name of the parameter (defaultxxx) associated
+  #             with the field.
   #%]
 
 [% title = BLOCK %]Delete Value '[% value FILTER html %]' from the 
@@ -27,6 +29,7 @@
 
 [% PROCESS global/header.html.tmpl
   title = title
+  style_urls = ['skins/standard/admin.css']
 %]
 
 <table border="1" cellpadding="4" cellspacing="0">
 </table>
 
 <h2>Confirmation</h2>
-  
-[% IF bug_count %]
 
-    Sorry, there
+[% IF (Param(param_name) == value) || bug_count || (value_count == 1) %]
 
-    [% IF bug_count > 1 %] 
-      are [% bug_count FILTER html %] [%+ terms.bugs %] 
-    [% ELSE %]
-      is [% bug_count FILTER html %] [%+ terms.bug %] 
-    [% END %]
+  <p>Sorry, but the '[% value FILTER html %]' value cannot be deleted
+  from the '[% field FILTER html %]' field for the following reason(s):</p>
 
-    that still have this field value. You must change the field value on
-    <a title="List of [% terms.bugs %] where '[% field FILTER html %]' is '[% value FILTER html %]'"
-       href="buglist.cgi?[% field FILTER url_quote %]=[%- value FILTER url_quote %]">
-    [% IF bug_count > 1 %]
-       those [% terms.bugs %] 
-    [% ELSE %]
-       that [% terms.bug %]
+  <ul class="warningmessages">
+    [% IF Param(param_name) == value %]
+      <li>'[% value FILTER html %]' is the default value for
+          the '[% field FILTER html %]' field.
+          [% IF user.groups.tweakparams %]
+            You first have to <a href="editparams.cgi?section=bugfields#
+            [%- param_name FILTER url_quote %]">change the default value</a> for
+            this field before you can delete this value.
+          [% END %]
     [% END %]
-    </a>
-    to another value before you can delete this value.
-
-[% END %]
 
-[% IF value_count == 1 %]
-
-    <p>Sorry, but '[% value FILTER html %]' is the last value for
-    '[%- field FILTER html %]', and so it can not be deleted.</p>
+    [% IF bug_count %]
+      <li>There
+          [% IF bug_count > 1 %] 
+            are [% bug_count FILTER html %] [%+ terms.bugs %] 
+          [% ELSE %]
+            is 1 [% terms.bug %] 
+          [% END %]
+          with this field value. You must change the field value on
+          <a title="List of [% terms.bugs %] where '[% field FILTER html %]' is '[% value FILTER html %]'"
+             href="buglist.cgi?[% field FILTER url_quote %]=[% value FILTER url_quote %]">
+            [% IF bug_count > 1 %]
+              those [% terms.bugs %] 
+            [% ELSE %]
+              that [% terms.bug %]
+            [% END %]
+          </a>
+          to another value before you can delete this value.
+    [% END %]
 
-  [% ELSE %]
+    [% IF value_count == 1 %]
+      <li>'[% value FILTER html %]' is the last value for
+          '[%- field FILTER html %]', and so it can not be deleted.
+    [% END %]
+  </ul>
 
-    [% IF bug_count == 0 %]
+[% ELSE %]
 
-      <p>Do you really want to delete this value?<p>
-  
-      <form method="post" action="editvalues.cgi">
-        <input type="submit" value="Yes, delete">
-        <input type="hidden" name="action" value="delete">
-        <input type="hidden" name="field" value="[% field FILTER html %]">
-        <input type="hidden" name="value" value="[% value FILTER html %]">
-      </form>
+  <p>Do you really want to delete this value?</p>
 
-  [% END %]
+  <form method="post" action="editvalues.cgi">
+    <input type="submit" value="Yes, delete">
+    <input type="hidden" name="action" value="delete">
+    <input type="hidden" name="field" value="[% field FILTER html %]">
+    <input type="hidden" name="value" value="[% value FILTER html %]">
+  </form>
 
 [% END %]
 
index b661653de15a5c71373e6097630644fe7e7c34e2..d25adf2b10229b629af3cc553c17477153041c9a 100644 (file)
        name => "sortkey"
        heading => "Sortkey"
      },
-   ]
+     {
+       name => "action"
+       heading => "Action"
+       content => "Delete"
+       contentlink => delete_contentlink
+     } ]
 %]
 
-[% columns.push({
-     heading => "Action"
-     content => "Delete"
-     contentlink => delete_contentlink
-   }) %]
+[% overrides.action = [ {
+     match_value => "$default"
+     match_field => 'name'
+     override_content => 1
+     content => "(Default value)"
+     override_contentlink => 1
+     contentlink => undef
+   } ]
+%] 
 
 [% PROCESS admin/table.html.tmpl
      columns = columns
      data = values
+     overrides = overrides
 %]
 
 <p>
index fc9fcafbcbd2f413ff53322190133e9a63ae59e2..c7f676e6793df1324b33c65320a844f9f4696cd5 100644 (file)
@@ -24,6 +24,8 @@
   # value & updated_value: the name of the field value
   # sortkey & updated_sortkey: the field value sortkey
   # field: string; the field that the value belongs to
+  # default_value_updated: boolean; whether the default value for
+  #                        this field has been updated
   #%]
   
 [% title = BLOCK %]Updating Value '[% value FILTER html %]' of the
 
 [% IF updated_value %]
   <p>Updated field value to: '[% value FILTER html %]'.</p>
+  [% IF default_value_updated %]
+    <p>Note that this value is the default for this field.
+    All references to the default value will now point to this new value.</p>
+  [% END %]
 [% END %]
 
 [% IF updated_sortkey %]
index 09f3d6e8acb17b69bb6cbec4d1be11ee7c511079..334f1c54e8f0c2199b8bfaefb9f51857e234f9a7 100644 (file)
     The value '[% value FILTER html %]' does not exist for
     the '[% field FILTER html %]' field.
 
+  [% ELSIF error == "fieldvalue_is_default" %]
+    [% title = "Specified Field Value Is Default" %]
+    '[% value FILTER html %]' is the default value for
+    the '[% field FILTER html %]' field and cannot be deleted.
+    [% IF user.groups.tweakparams %]
+      You have to <a href="editparams.cgi?section=bugfields#
+      [%- param_name FILTER url_quote %]">change</a> the default value first.
+    [% END %]
+
   [% ELSIF error == "fieldvalue_name_too_long" %]
     [% title = "Field Value Is Too Long" %]
     The value of a field is limited to 60 characters.