Unreviewed. Fix individual benchmark description urls to go to in-depth.html instead...
[WebKit-https.git] / Websites / bugs.webkit.org / editversions.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::Constants;
17 use Bugzilla::Util;
18 use Bugzilla::Error;
19 use Bugzilla::Version;
20 use Bugzilla::Token;
21
22 my $cgi = Bugzilla->cgi;
23 my $dbh = Bugzilla->dbh;
24 my $template = Bugzilla->template;
25 my $vars = {};
26 # There is only one section about versions in the documentation,
27 # so all actions point to the same page.
28 $vars->{'doc_section'} = 'administering/categorization.html#versions';
29
30 #
31 # Preliminary checks:
32 #
33
34 my $user = Bugzilla->login(LOGIN_REQUIRED);
35
36 print $cgi->header();
37
38 $user->in_group('editcomponents')
39   || scalar(@{$user->get_products_by_permission('editcomponents')})
40   || ThrowUserError("auth_failure", {group  => "editcomponents",
41                                      action => "edit",
42                                      object => "versions"});
43
44 #
45 # often used variables
46 #
47 my $product_name = trim($cgi->param('product') || '');
48 my $version_name = trim($cgi->param('version') || '');
49 my $action       = trim($cgi->param('action')  || '');
50 my $showbugcounts = (defined $cgi->param('showbugcounts'));
51 my $token        = $cgi->param('token');
52 my $isactive     = $cgi->param('isactive');
53
54 #
55 # product = '' -> Show nice list of products
56 #
57
58 unless ($product_name) {
59     my $selectable_products = $user->get_selectable_products;
60     # If the user has editcomponents privs for some products only,
61     # we have to restrict the list of products to display.
62     unless ($user->in_group('editcomponents')) {
63         $selectable_products = $user->get_products_by_permission('editcomponents');
64     }
65     $vars->{'products'} = $selectable_products;
66     $vars->{'showbugcounts'} = $showbugcounts;
67
68     $template->process("admin/versions/select-product.html.tmpl", $vars)
69       || ThrowTemplateError($template->error());
70     exit;
71 }
72
73 my $product = $user->check_can_admin_product($product_name);
74
75 #
76 # action='' -> Show nice list of versions
77 #
78
79 unless ($action) {
80     $vars->{'showbugcounts'} = $showbugcounts;
81     $vars->{'product'} = $product;
82     $template->process("admin/versions/list.html.tmpl", $vars)
83       || ThrowTemplateError($template->error());
84
85     exit;
86 }
87
88 #
89 # action='add' -> present form for parameters for new version
90 #
91 # (next action will be 'new')
92 #
93
94 if ($action eq 'add') {
95     $vars->{'token'} = issue_session_token('add_version');
96     $vars->{'product'} = $product;
97     $template->process("admin/versions/create.html.tmpl", $vars)
98       || ThrowTemplateError($template->error());
99
100     exit;
101 }
102
103 #
104 # action='new' -> add version entered in the 'action=add' screen
105 #
106
107 if ($action eq 'new') {
108     check_token_data($token, 'add_version');
109     my $version = Bugzilla::Version->create(
110         { value => $version_name, product => $product });
111     delete_token($token);
112
113     $vars->{'message'} = 'version_created';
114     $vars->{'version'} = $version;
115     $vars->{'product'} = $product;
116     $template->process("admin/versions/list.html.tmpl", $vars)
117       || ThrowTemplateError($template->error());
118
119     exit;
120 }
121
122 #
123 # action='del' -> ask if user really wants to delete
124 #
125 # (next action would be 'delete')
126 #
127
128 if ($action eq 'del') {
129     my $version = Bugzilla::Version->check({ product => $product,
130                                              name    => $version_name });
131     $vars->{'version'} = $version;
132     $vars->{'product'} = $product;
133     $vars->{'token'} = issue_session_token('delete_version');
134     $template->process("admin/versions/confirm-delete.html.tmpl", $vars)
135       || ThrowTemplateError($template->error());
136
137     exit;
138 }
139
140 #
141 # action='delete' -> really delete the version
142 #
143
144 if ($action eq 'delete') {
145     check_token_data($token, 'delete_version');
146     my $version = Bugzilla::Version->check({ product => $product, 
147                                              name    => $version_name });
148     $version->remove_from_db;
149     delete_token($token);
150
151     $vars->{'message'} = 'version_deleted';
152     $vars->{'version'} = $version;
153     $vars->{'product'} = $product;
154     $vars->{'no_edit_version_link'} = 1;
155
156     $template->process("admin/versions/list.html.tmpl", $vars)
157       || ThrowTemplateError($template->error());
158
159     exit;
160 }
161
162 #
163 # action='edit' -> present the edit version form
164 #
165 # (next action would be 'update')
166 #
167
168 if ($action eq 'edit') {
169     my $version = Bugzilla::Version->check({ product => $product,
170                                              name    => $version_name });
171     $vars->{'version'} = $version;
172     $vars->{'product'} = $product;
173     $vars->{'token'} = issue_session_token('edit_version');
174
175     $template->process("admin/versions/edit.html.tmpl", $vars)
176       || ThrowTemplateError($template->error());
177
178     exit;
179 }
180
181 #
182 # action='update' -> update the version
183 #
184
185 if ($action eq 'update') {
186     check_token_data($token, 'edit_version');
187     my $version_old_name = trim($cgi->param('versionold') || '');
188     my $version = Bugzilla::Version->check({ product => $product,
189                                              name   => $version_old_name });
190
191     $dbh->bz_start_transaction();
192
193     $version->set_all({
194         value    =>  $version_name,
195         isactive =>  $isactive
196     });
197     my $changes = $version->update();
198
199     $dbh->bz_commit_transaction();
200     delete_token($token);
201
202     $vars->{'message'} = 'version_updated';
203     $vars->{'version'} = $version;
204     $vars->{'product'} = $product;
205     $vars->{'changes'} = $changes;
206     $template->process("admin/versions/list.html.tmpl", $vars)
207       || ThrowTemplateError($template->error());
208
209     exit;
210 }
211
212 # No valid action found
213 ThrowUserError('unknown_action', {action => $action});