From bcccebe2c5955d122ce193bf3c2e4a9335e98788 Mon Sep 17 00:00:00 2001 From: "jocuri%softhome.net" <> Date: Wed, 10 Dec 2003 07:12:32 +0000 Subject: Bug 190223: Complete templatization for editkeywords.cgi; reviewed by kiko, jth, gerv; r/a=justdave. --- editkeywords.cgi | 182 +++++---------------- .../admin/keywords/confirm-delete.html.tmpl | 3 +- .../en/default/admin/keywords/create.html.tmpl | 3 +- .../en/default/admin/keywords/created.html.tmpl | 36 ++++ template/en/default/admin/keywords/edit.html.tmpl | 68 ++++++++ template/en/default/admin/keywords/list.html.tmpl | 95 +++++++++++ .../default/admin/keywords/rebuild-cache.html.tmpl | 7 +- template/en/default/filterexceptions.pl | 10 ++ template/en/default/global/code-error.html.tmpl | 4 + template/en/default/global/user-error.html.tmpl | 21 +++ 10 files changed, 281 insertions(+), 148 deletions(-) create mode 100755 template/en/default/admin/keywords/created.html.tmpl create mode 100755 template/en/default/admin/keywords/edit.html.tmpl create mode 100755 template/en/default/admin/keywords/list.html.tmpl diff --git a/editkeywords.cgi b/editkeywords.cgi index c51580272..cf20d7a07 100755 --- a/editkeywords.cgi +++ b/editkeywords.cgi @@ -1,4 +1,4 @@ -#!/usr/bin/perl -w +#!/usr/bin/perl -wT # -*- Mode: perl; indent-tabs-mode: nil -*- # # The contents of this file are subject to the Mozilla Public @@ -29,83 +29,19 @@ use Bugzilla::Config qw(:DEFAULT $datadir); use vars qw($template $vars); -my $localtrailer = "edit more keywords"; - - -# -# Displays a text like "a.", "a or b.", "a, b or c.", "a, b, c or d." -# -# XXX This implementation of PutTrailer outputs a default link back to -# the query page instead of the index, which is inconsistent with other -# PutTrailer() implementations. -# - -sub PutTrailer (@) -{ - my (@links) = ("Back to the query page", @_); - - my $count = $#links; - my $num = 0; - print "

\n"; - foreach (@links) { - print $_; - if ($num == $count) { - print ".\n"; - } - elsif ($num == $count-1) { - print " or "; - } - else { - print ", "; - } - $num++; - } - PutFooter(); -} - - -# -# Displays the form to edit a keyword's parameters -# - -sub EmitFormElements ($$$) -{ - my ($id, $name, $description) = @_; - - $name = value_quote($name); - $description = value_quote($description); - - print qq{}; - - print " Name:\n"; - print " \n"; - print "\n"; - - print " Description:\n"; - print " \n"; - print "\n"; - -} - sub Validate ($$) { my ($name, $description) = @_; if ($name eq "") { - print "You must enter a non-blank name for the keyword. Please press\n"; - print "Back and try again.\n"; - PutTrailer($localtrailer); + ThrowUserError("keyword_blank_name"); exit; } if ($name =~ /[\s,]/) { - print "You may not use commas or whitespace in a keyword name.\n"; - print "Please press Back and try again.\n"; - PutTrailer($localtrailer); + ThrowUserError("keyword_invalid_name"); exit; } if ($description eq "") { - print "You must enter a non-blank description of the keyword.\n"; - print "Please press Back and try again.\n"; - PutTrailer($localtrailer); + ThrowUserError("keyword_blank_description"); exit; } } @@ -121,10 +57,7 @@ confirm_login(); print Bugzilla->cgi->header(); unless (UserInGroup("editkeywords")) { - PutHeader("Not allowed"); - print "Sorry, you aren't a member of the 'editkeywords' group.\n"; - print "And so, you aren't allowed to add, modify or delete keywords.\n"; - PutTrailer(); + ThrowUserError("keyword_access_denied"); exit; } @@ -136,51 +69,31 @@ detaint_natural($::FORM{id}); if ($action eq "") { - PutHeader("Select keyword"); - my $tableheader = qq{ - - - - - - - -}; - print $tableheader; - my $line_count = 0; - my $max_table_size = 50; + my @keywords; SendSQL("SELECT keyworddefs.id, keyworddefs.name, keyworddefs.description, COUNT(keywords.bug_id) FROM keyworddefs LEFT JOIN keywords ON keyworddefs.id = keywords.keywordid GROUP BY keyworddefs.id ORDER BY keyworddefs.name"); + while (MoreSQLData()) { my ($id, $name, $description, $bugs) = FetchSQLData(); - $description ||= "missing"; - $bugs ||= 'none'; - if ($line_count == $max_table_size) { - print "
Edit keyword ...DescriptionBugsAction
\n$tableheader"; - $line_count = 0; - } - $line_count++; - - print qq{ - -$name -$description -$bugs -Delete - -}; + my $keyword = {}; + $keyword->{'id'} = $id; + $keyword->{'name'} = $name; + $keyword->{'description'} = $description; + $keyword->{'bug_count'} = $bugs; + push(@keywords, $keyword); } - print qq{ - -Add a new keywordAdd - - -}; - PutTrailer(); + + print Bugzilla->cgi->header(); + + $vars->{'keywords'} = \@keywords; + $template->process("admin/keywords/list.html.tmpl", + $vars) + || ThrowTemplateError($template->error()); + exit; } @@ -200,8 +113,6 @@ if ($action eq 'add') { # if ($action eq 'new') { - PutHeader("Adding new keyword"); - # Cleanups and valididy checks my $name = trim($::FORM{name} || ''); @@ -212,9 +123,8 @@ if ($action eq 'new') { SendSQL("SELECT id FROM keyworddefs WHERE name = " . SqlQuote($name)); if (FetchOneColumn()) { - print "The keyword '$name' already exists. Please press\n"; - print "Back and try again.\n"; - PutTrailer($localtrailer); + $vars->{'name'} = $name; + ThrowUserError("keyword_already_exists"); exit; } @@ -244,9 +154,13 @@ if ($action eq 'new') { # Make versioncache flush unlink "$datadir/versioncache"; - print "OK, done.

\n"; - PutTrailer("edit more keywords", - "add another keyword"); + print Bugzilla->cgi->header(); + + $vars->{'name'} = $name; + $template->process("admin/keywords/created.html.tmpl", + $vars) + || ThrowTemplateError($template->error()); + exit; } @@ -259,8 +173,6 @@ if ($action eq 'new') { # if ($action eq 'edit') { - PutHeader("Edit keyword"); - my $id = trim($::FORM{id} || 0); # get data of keyword SendSQL("SELECT name,description @@ -268,35 +180,28 @@ if ($action eq 'edit') { WHERE id=$id"); my ($name, $description) = FetchSQLData(); if (!$name) { - print "Something screwy is going on. Please try again.\n"; - PutTrailer($localtrailer); + $vars->{'id'} = $id; + ThrowCodeError("invalid_keyword_id", $vars); exit; } - print "

\n"; - print "\n"; - EmitFormElements($id, $name, $description); - - print "\n"; - print " \n"; - print " \n
Bugs:"; SendSQL("SELECT count(*) FROM keywords WHERE keywordid = $id"); my $bugs = ''; $bugs = FetchOneColumn() if MoreSQLData(); - print $bugs || 'none'; - print "
\n"; + $vars->{'keyword_id'} = $id; + $vars->{'name'} = $name; + $vars->{'description'} = $description; + $vars->{'bug_count'} = $bugs; - print "\n"; - print "\n"; + print Bugzilla->cgi->header(); - print "
"; + $template->process("admin/keywords/edit.html.tmpl", + $vars) + || ThrowTemplateError($template->error()); - my $x = $localtrailer; - $x =~ s/more/other/; - PutTrailer($x); exit; } @@ -317,11 +222,8 @@ if ($action eq 'update') { my $tmp = FetchOneColumn(); if ($tmp && $tmp != $id) { - PutHeader("Update keyword"); - - print "The keyword '$name' already exists. Please press\n"; - print "Back and try again.\n"; - PutTrailer($localtrailer); + $vars->{'name'} = $name; + ThrowUserError("keyword_already_exists", $vars); exit; } diff --git a/template/en/default/admin/keywords/confirm-delete.html.tmpl b/template/en/default/admin/keywords/confirm-delete.html.tmpl index 5ff826b86..76e2cc31f 100755 --- a/template/en/default/admin/keywords/confirm-delete.html.tmpl +++ b/template/en/default/admin/keywords/confirm-delete.html.tmpl @@ -49,7 +49,6 @@ -

Go back to the query page -or edit other keywords.

+

Edit other keywords.

[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/keywords/create.html.tmpl b/template/en/default/admin/keywords/create.html.tmpl index 49698a1db..6811b9997 100755 --- a/template/en/default/admin/keywords/create.html.tmpl +++ b/template/en/default/admin/keywords/create.html.tmpl @@ -49,7 +49,6 @@ -

Go back to the query page -or edit other keywords.

+

Edit other keywords.

[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/keywords/created.html.tmpl b/template/en/default/admin/keywords/created.html.tmpl new file mode 100755 index 000000000..ebb6a1f9f --- /dev/null +++ b/template/en/default/admin/keywords/created.html.tmpl @@ -0,0 +1,36 @@ + +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # The Initial Developer of the Original Code is Netscape Communications + # Corporation. Portions created by Netscape are + # Copyright (C) 1998 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): Terry Weissman + # Vlad Dascalu + #%] + +[%# INTERFACE: + # name: string; the name of the current keyword. + #%] + +[% PROCESS global/header.html.tmpl + title = "Adding new keyword" +%] + +

The keyword [% name FILTER html %] has been added.

+ +

Edit existing keywords or +add another keyword.

+ +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/keywords/edit.html.tmpl b/template/en/default/admin/keywords/edit.html.tmpl new file mode 100755 index 000000000..2f84e147a --- /dev/null +++ b/template/en/default/admin/keywords/edit.html.tmpl @@ -0,0 +1,68 @@ + +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # The Initial Developer of the Original Code is Netscape Communications + # Corporation. Portions created by Netscape are + # Copyright (C) 1998 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): Terry Weissman + # Vlad Dascalu + #%] + +[%# INTERFACE: + # keyword_id: number. The ID of the keyword. + # name: string. The name of the keyword. + # description: string. The description of the keyword. + # bug_count: number. The number of bugs with the keyword. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Edit keyword" +%] + +
+ + + + + + + + + + + + + + +
Name:
Description: + +
[% terms.Bugs %]: + [% IF bug_count %] + [% bug_count %] + [% ELSE %] + none + [% END %] +
+ + + +
+ +

Edit other keywords.

+ +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/keywords/list.html.tmpl b/template/en/default/admin/keywords/list.html.tmpl new file mode 100755 index 000000000..e1f6eefbd --- /dev/null +++ b/template/en/default/admin/keywords/list.html.tmpl @@ -0,0 +1,95 @@ + +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # The Initial Developer of the Original Code is Netscape Communications + # Corporation. Portions created by Netscape are + # Copyright (C) 1998 Netscape Communications Corporation. All + # Rights Reserved. + # + # Contributor(s): Terry Weissman + # Vlad Dascalu + #%] + +[%# INTERFACE: + # max_table_size: number. Determines the maximum number of + # rows in each keywords table. + # keywords: array with keyword objects having the properties: + # - keyword_id: number. The ID of the keyword. + # - name: string. The name of the keyword. + # - description: string. The description of the keyword. + # - bug_count: number. The number of bugs with the keyword. + #%] + +[% PROCESS global/variables.none.tmpl %] + +[% PROCESS global/header.html.tmpl + title = "Select keyword" +%] + +[% max_table_size = 50 %] + +[% BLOCK table_header %] + + + + + + + +[% END %] + +[% BLOCK table_footer %] +
Edit keyword ...Description[% terms.Bugs %]Action
+[% END %] + +[% FOREACH keyword = keywords %] + [% IF loop.count() % max_table_size == 1 %] + [% PROCESS table_header %] + [% END %] + + + + [% keyword.name FILTER html %] + + + [% IF keyword.description %] + [% keyword.description FILTER html %] + [% ELSE %] + missing + [% END %] + + + [% IF keyword.bug_count %] + [% keyword.bug_count %] + [% ELSE %] + none + [% END %] + + + Delete + + + + [% IF !loop.last() && loop.count() % max_table_size == 0 %] + [% PROCESS table_footer %] + [% END %] +[% END %] + + + Add a new keyword + Add + + +[% PROCESS table_footer %] + +[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/admin/keywords/rebuild-cache.html.tmpl b/template/en/default/admin/keywords/rebuild-cache.html.tmpl index 4c4ea4b9a..bd68f9ed5 100755 --- a/template/en/default/admin/keywords/rebuild-cache.html.tmpl +++ b/template/en/default/admin/keywords/rebuild-cache.html.tmpl @@ -21,8 +21,8 @@ #%] [%# INTERFACE: - # action: string. Contains the current action (either "update" or "delete"). - # name: string. Contains the name of the current keyword. + # action: string; the current action (either "update" or "delete"). + # name: string; the name of the current keyword. #%] [% IF action == "update" %] @@ -50,7 +50,6 @@ Keyword [% name FILTER html %] [%+status FILTER html %]. keyword cache

-

Go back to the query page or -edit more keywords.

+

Edit more keywords.

[% PROCESS global/footer.html.tmpl %] diff --git a/template/en/default/filterexceptions.pl b/template/en/default/filterexceptions.pl index c75f86bb3..05b52c5b8 100644 --- a/template/en/default/filterexceptions.pl +++ b/template/en/default/filterexceptions.pl @@ -492,6 +492,16 @@ 'const.CONTROLMAPMANDATORY', ], +'admin/keywords/list.html.tmpl' => [ + 'keyword.id', + 'keyword.bug_count', +], + +'admin/keywords/edit.html.tmpl' => [ + 'keyword_id', + 'bug_count', +], + 'admin/keywords/confirm-delete.html.tmpl' => [ 'keyword_id', 'bug_count', diff --git a/template/en/default/global/code-error.html.tmpl b/template/en/default/global/code-error.html.tmpl index 82be89b1d..6f0881c20 100644 --- a/template/en/default/global/code-error.html.tmpl +++ b/template/en/default/global/code-error.html.tmpl @@ -171,6 +171,10 @@ [% ELSIF error == "invalid_field_name" %] Can't use [% field FILTER html %] as a field name. + + [% ELSIF error == "invalid_keyword_id" %] + The keyword ID [% id FILTER html %] couldn't be + found. [% ELSIF error == "missing_bug_id" %] No [% terms.bug %] ID was given. diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl index 1bbd00efc..f20081529 100644 --- a/template/en/default/global/user-error.html.tmpl +++ b/template/en/default/global/user-error.html.tmpl @@ -387,6 +387,27 @@ [% ELSIF error == "invalid_username_or_password" %] [% title = "Invalid Username Or Password" %] The username or password you entered is not valid. + + [% ELSIF error == "keyword_access_denied" %] + [% title = "Access Denied" %] + Sorry, you aren't a member of the 'editkeywords' group, and so + you aren't allowed to add, modify or delete keywords. + + [% ELSIF error == "keyword_already_exists" %] + [% title = "Keyword Already Exists" %] + A keyword with the name [% name FILTER html %] already exists. + + [% ELSIF error == "keyword_blank_description" %] + [% title = "Blank Keyword Description Not Allowed" %] + You must enter a non-blank description for the keyword. + + [% ELSIF error == "keyword_blank_name" %] + [% title = "Blank Keyword Name Not Allowed" %] + You must enter a non-blank name for the keyword. + + [% ELSIF error == "keyword_invalid_name" %] + [% title = "Invalid Keyword Name" %] + You may not use commas or whitespace in a keyword name. [% ELSIF error == "login_needed_for_password_change" %] [% title = "Login Name Required" %] -- cgit v1.2.3-24-g4f1b