Unreviewed. Fix individual benchmark description urls to go to in-depth.html instead...
[WebKit-https.git] / Websites / bugs.webkit.org / editvalues.cgi
1 #!/usr/bin/perl -T
2 # This Source Code Form is subject to the terms of the Mozilla Public
3 # License, v. 2.0. If a copy of the MPL was not distributed with this
4 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 #
6 # This Source Code Form is "Incompatible With Secondary Licenses", as
7 # defined by the Mozilla Public License, v. 2.0.
8
9 use 5.10.1;
10 use strict;
11 use warnings;
12
13 use lib qw(. lib);
14
15 use Bugzilla;
16 use Bugzilla::Util;
17 use Bugzilla::Error;
18 use Bugzilla::Constants;
19 use Bugzilla::Token;
20 use Bugzilla::Field;
21 use Bugzilla::Field::Choice;
22
23 ###############
24 # Subroutines #
25 ###############
26
27 sub display_field_values {
28     my $vars = shift;
29     my $template = Bugzilla->template;
30     $vars->{'values'} = $vars->{'field'}->legal_values;
31     $template->process("admin/fieldvalues/list.html.tmpl", $vars)
32       || ThrowTemplateError($template->error());
33     exit;
34 }
35
36 ######################################################################
37 # Main Body Execution
38 ######################################################################
39
40 # require the user to have logged in
41 my $user = Bugzilla->login(LOGIN_REQUIRED);
42
43 my $dbh      = Bugzilla->dbh;
44 my $cgi      = Bugzilla->cgi;
45 my $template = Bugzilla->template;
46 my $vars = {};
47
48 # Replace this entry by separate entries in templates when
49 # the documentation about legal values becomes bigger.
50 $vars->{'doc_section'} = 'administering/field-values.html';
51
52 print $cgi->header();
53
54 $user->in_group('admin')
55   || ThrowUserError('auth_failure', {group  => "admin",
56                                      action => "edit",
57                                      object => "field_values"});
58
59 #
60 # often-used variables
61 #
62 my $action = trim($cgi->param('action')  || '');
63 my $token  = $cgi->param('token');
64
65 #
66 # field = '' -> Show nice list of fields
67 #
68 if (!$cgi->param('field')) {
69     my @field_list =
70         @{ Bugzilla->fields({ is_select => 1, is_abnormal => 0 }) };
71
72     $vars->{'fields'} = \@field_list;
73     $template->process("admin/fieldvalues/select-field.html.tmpl", $vars)
74       || ThrowTemplateError($template->error());
75     exit;
76 }
77
78 # At this point, the field must be defined.
79 my $field = Bugzilla::Field->check($cgi->param('field'));
80 if (!$field->is_select || $field->is_abnormal) {
81     ThrowUserError('fieldname_invalid', { field => $field });
82 }
83 $vars->{'field'} = $field;
84
85 #
86 # action='' -> Show nice list of values.
87 #
88 display_field_values($vars) unless $action;
89
90 #
91 # action='add' -> show form for adding new field value.
92 # (next action will be 'new')
93 #
94 if ($action eq 'add') {
95     $vars->{'token'} = issue_session_token('add_field_value');
96     $template->process("admin/fieldvalues/create.html.tmpl", $vars)
97       || ThrowTemplateError($template->error());
98     exit;
99 }
100
101 #
102 # action='new' -> add field value entered in the 'action=add' screen
103 #
104 if ($action eq 'new') {
105     check_token_data($token, 'add_field_value');
106
107     my $created_value = Bugzilla::Field::Choice->type($field)->create({
108         value   => scalar $cgi->param('value'), 
109         sortkey => scalar $cgi->param('sortkey'),
110         is_open => scalar $cgi->param('is_open'),
111         visibility_value_id => scalar $cgi->param('visibility_value_id'),
112     });
113
114     delete_token($token);
115
116     $vars->{'message'} = 'field_value_created';
117     $vars->{'value'} = $created_value;
118     display_field_values($vars);
119 }
120
121 # After this, we always have a value
122 my $value = Bugzilla::Field::Choice->type($field)->check($cgi->param('value'));
123 $vars->{'value'} = $value;
124
125 #
126 # action='del' -> ask if user really wants to delete
127 # (next action would be 'delete')
128 #
129 if ($action eq 'del') {
130     # If the value cannot be deleted, throw an error.
131     if ($value->is_static) {
132         ThrowUserError('fieldvalue_not_deletable', $vars);
133     }
134     $vars->{'token'} = issue_session_token('delete_field_value');
135
136     $template->process("admin/fieldvalues/confirm-delete.html.tmpl", $vars)
137       || ThrowTemplateError($template->error());
138
139     exit;
140 }
141
142
143 #
144 # action='delete' -> really delete the field value
145 #
146 if ($action eq 'delete') {
147     check_token_data($token, 'delete_field_value');
148     $value->remove_from_db();
149     delete_token($token);
150     $vars->{'message'} = 'field_value_deleted';
151     $vars->{'no_edit_link'} = 1;
152     display_field_values($vars);
153 }
154
155
156 #
157 # action='edit' -> present the edit-value form
158 # (next action would be 'update')
159 #
160 if ($action eq 'edit') {
161     $vars->{'token'} = issue_session_token('edit_field_value');
162     $template->process("admin/fieldvalues/edit.html.tmpl", $vars)
163       || ThrowTemplateError($template->error());
164
165     exit;
166 }
167
168
169 #
170 # action='update' -> update the field value
171 #
172 if ($action eq 'update') {
173     check_token_data($token, 'edit_field_value');
174     $vars->{'value_old'} = $value->name;
175     my %params = (
176         name    => scalar $cgi->param('value_new'),
177         sortkey => scalar $cgi->param('sortkey'),
178         visibility_value => scalar $cgi->param('visibility_value_id'),
179     );
180     if ($cgi->should_set('is_active')) {
181         $params{is_active} = $cgi->param('is_active');
182     }
183     $value->set_all(\%params);
184     $vars->{'changes'} = $value->update();
185     delete_token($token);
186     $vars->{'message'} = 'field_value_updated';
187     display_field_values($vars);
188 }
189
190 # No valid action found
191 ThrowUserError('unknown_action', {action => $action});