зеркало из https://github.com/mozilla/gecko-dev.git
Bug 298688: Forbid the deletion of values used by default for the priority, severity, platform and OS and update data/params when editing them - Patch by Fr�d�ric Buclin <LpSolit@gmail.com> r=GavinS a=justdave
This commit is contained in:
Родитель
4b82e742fb
Коммит
0f3939a57e
|
@ -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
|
||||
|
@ -20,11 +21,12 @@
|
|||
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;
|
||||
|
|
|
@ -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">
|
||||
|
@ -57,49 +60,58 @@
|
|||
</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 %]
|
||||
<p>Sorry, but the '[% value FILTER html %]' value cannot be deleted
|
||||
from the '[% field FILTER html %]' field for the following reason(s):</p>
|
||||
|
||||
<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 %]
|
||||
|
||||
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 %]
|
||||
[% 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 %]
|
||||
</a>
|
||||
to another value before you can delete this value.
|
||||
|
||||
[% END %]
|
||||
[% 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 value_count == 1 %]
|
||||
[% ELSE %]
|
||||
|
||||
<p>Sorry, but '[% value FILTER html %]' is the last value for
|
||||
'[%- field FILTER html %]', and so it can not be deleted.</p>
|
||||
<p>Do you really want to delete this value?</p>
|
||||
|
||||
[% ELSE %]
|
||||
|
||||
[% IF bug_count == 0 %]
|
||||
|
||||
<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>
|
||||
|
||||
[% 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 %]
|
||||
|
||||
|
|
|
@ -50,18 +50,28 @@
|
|||
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>
|
||||
|
|
|
@ -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
|
||||
|
@ -34,6 +36,10 @@
|
|||
|
||||
[% 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 %]
|
||||
|
|
|
@ -384,6 +384,15 @@
|
|||
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.
|
||||
|
|
Загрузка…
Ссылка в новой задаче