diff options
Diffstat (limited to 'editkeywords.cgi')
-rwxr-xr-x | editkeywords.cgi | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/editkeywords.cgi b/editkeywords.cgi new file mode 100755 index 0000000..ab86a2f --- /dev/null +++ b/editkeywords.cgi @@ -0,0 +1,173 @@ +#!/usr/bin/perl -wT +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +use strict; +use lib qw(. lib); + +use Bugzilla; +use Bugzilla::Constants; +use Bugzilla::Util; +use Bugzilla::Error; +use Bugzilla::Keyword; +use Bugzilla::Token; + +my $cgi = Bugzilla->cgi; +my $dbh = Bugzilla->dbh; +my $template = Bugzilla->template; +my $vars = {}; + +# +# Preliminary checks: +# + +my $user = Bugzilla->login(LOGIN_REQUIRED); + +print $cgi->header(); + +$user->in_group('editkeywords') + || ThrowUserError("auth_failure", {group => "editkeywords", + action => "edit", + object => "keywords"}); + +my $action = trim($cgi->param('action') || ''); +my $key_id = $cgi->param('id'); +my $token = $cgi->param('token'); + +$vars->{'action'} = $action; + + +if ($action eq "") { + $vars->{'keywords'} = Bugzilla::Keyword->get_all_with_bug_count(); + + print $cgi->header(); + $template->process("admin/keywords/list.html.tmpl", $vars) + || ThrowTemplateError($template->error()); + + exit; +} + + +if ($action eq 'add') { + $vars->{'token'} = issue_session_token('add_keyword'); + + print $cgi->header(); + + $template->process("admin/keywords/create.html.tmpl", $vars) + || ThrowTemplateError($template->error()); + + exit; +} + +# +# action='new' -> add keyword entered in the 'action=add' screen +# +if ($action eq 'new') { + check_token_data($token, 'add_keyword'); + my $name = $cgi->param('name') || ''; + my $desc = $cgi->param('description') || ''; + + my $keyword = Bugzilla::Keyword->create( + { name => $name, description => $desc }); + + delete_token($token); + + print $cgi->header(); + + $vars->{'message'} = 'keyword_created'; + $vars->{'name'} = $keyword->name; + $vars->{'keywords'} = Bugzilla::Keyword->get_all_with_bug_count(); + + $template->process("admin/keywords/list.html.tmpl", $vars) + || ThrowTemplateError($template->error()); + exit; +} + + +# +# action='edit' -> present the edit keywords from +# +# (next action would be 'update') +# + +if ($action eq 'edit') { + my $keyword = new Bugzilla::Keyword($key_id) + || ThrowUserError('invalid_keyword_id', { id => $key_id }); + + $vars->{'keyword'} = $keyword; + $vars->{'token'} = issue_session_token('edit_keyword'); + + print $cgi->header(); + $template->process("admin/keywords/edit.html.tmpl", $vars) + || ThrowTemplateError($template->error()); + exit; +} + + +# +# action='update' -> update the keyword +# + +if ($action eq 'update') { + check_token_data($token, 'edit_keyword'); + my $keyword = new Bugzilla::Keyword($key_id) + || ThrowUserError('invalid_keyword_id', { id => $key_id }); + + $keyword->set_all({ + name => scalar $cgi->param('name'), + description => scalar $cgi->param('description'), + }); + my $changes = $keyword->update(); + + delete_token($token); + + print $cgi->header(); + + $vars->{'message'} = 'keyword_updated'; + $vars->{'keyword'} = $keyword; + $vars->{'changes'} = $changes; + $vars->{'keywords'} = Bugzilla::Keyword->get_all_with_bug_count(); + + $template->process("admin/keywords/list.html.tmpl", $vars) + || ThrowTemplateError($template->error()); + exit; +} + +if ($action eq 'del') { + my $keyword = new Bugzilla::Keyword($key_id) + || ThrowUserError('invalid_keyword_id', { id => $key_id }); + + $vars->{'keyword'} = $keyword; + $vars->{'token'} = issue_session_token('delete_keyword'); + + print $cgi->header(); + $template->process("admin/keywords/confirm-delete.html.tmpl", $vars) + || ThrowTemplateError($template->error()); + exit; +} + +if ($action eq 'delete') { + check_token_data($token, 'delete_keyword'); + my $keyword = new Bugzilla::Keyword($key_id) + || ThrowUserError('invalid_keyword_id', { id => $key_id }); + + $keyword->remove_from_db(); + + delete_token($token); + + print $cgi->header(); + + $vars->{'message'} = 'keyword_deleted'; + $vars->{'keyword'} = $keyword; + $vars->{'keywords'} = Bugzilla::Keyword->get_all_with_bug_count(); + + $template->process("admin/keywords/list.html.tmpl", $vars) + || ThrowTemplateError($template->error()); + exit; +} + +ThrowUserError('unknown_action', {action => $action}); |