diff options
-rwxr-xr-x | editkeywords.cgi | 182 | ||||
-rwxr-xr-x | template/en/default/admin/keywords/confirm-delete.html.tmpl | 3 | ||||
-rwxr-xr-x | template/en/default/admin/keywords/create.html.tmpl | 3 | ||||
-rwxr-xr-x | template/en/default/admin/keywords/created.html.tmpl | 36 | ||||
-rwxr-xr-x | template/en/default/admin/keywords/edit.html.tmpl | 68 | ||||
-rwxr-xr-x | template/en/default/admin/keywords/list.html.tmpl | 95 | ||||
-rwxr-xr-x | template/en/default/admin/keywords/rebuild-cache.html.tmpl | 7 | ||||
-rw-r--r-- | template/en/default/filterexceptions.pl | 10 | ||||
-rw-r--r-- | template/en/default/global/code-error.html.tmpl | 4 | ||||
-rw-r--r-- | template/en/default/global/user-error.html.tmpl | 21 |
10 files changed, 281 insertions, 148 deletions
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 = "<A HREF=\"editkeywords.cgi\">edit</A> 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 <A HREF=\"query.cgi\">query page</A>", @_); - - my $count = $#links; - my $num = 0; - print "<P>\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{<INPUT TYPE="HIDDEN" NAME=id VALUE=$id>}; - - print " <TR><TH ALIGN=\"right\">Name:</TH>\n"; - print " <TD><INPUT SIZE=64 MAXLENGTH=64 NAME=\"name\" VALUE=\"$name\"></TD>\n"; - print "</TR><TR>\n"; - - print " <TH ALIGN=\"right\">Description:</TH>\n"; - print " <TD><TEXTAREA ROWS=4 COLS=64 WRAP=VIRTUAL NAME=\"description\">$description</TEXTAREA></TD>\n"; - print "</TR>\n"; - -} - sub Validate ($$) { my ($name, $description) = @_; if ($name eq "") { - print "You must enter a non-blank name for the keyword. Please press\n"; - print "<b>Back</b> 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 <b>Back</b> 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 <b>Back</b> 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{ -<TABLE BORDER=1 CELLPADDING=4 CELLSPACING=0> -<TR BGCOLOR="#6666FF"> -<TH ALIGN="left">Edit keyword ...</TH> -<TH ALIGN="left">Description</TH> -<TH ALIGN="left">Bugs</TH> -<TH ALIGN="left">Action</TH> -</TR> -}; - 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 ||= "<FONT COLOR=\"red\">missing</FONT>"; - $bugs ||= 'none'; - if ($line_count == $max_table_size) { - print "</table>\n$tableheader"; - $line_count = 0; - } - $line_count++; - - print qq{ -<TR> -<TH VALIGN="top"><A HREF="editkeywords.cgi?action=edit&id=$id">$name</TH> -<TD VALIGN="top">$description</TD> -<TD VALIGN="top" ALIGN="right">$bugs</TD> -<TH VALIGN="top"><A HREF="editkeywords.cgi?action=delete&id=$id">Delete</TH> -</TR> -}; + my $keyword = {}; + $keyword->{'id'} = $id; + $keyword->{'name'} = $name; + $keyword->{'description'} = $description; + $keyword->{'bug_count'} = $bugs; + push(@keywords, $keyword); } - print qq{ -<TR> -<TD VALIGN="top" COLSPAN=3>Add a new keyword</TD><TD><A HREF="editkeywords.cgi?action=add">Add</TD> -</TR> -</TABLE> -}; - 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 "<b>Back</b> 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.<p>\n"; - PutTrailer("<a href=\"editkeywords.cgi\">edit</a> more keywords", - "<a href=\"editkeywords.cgi?action=add\">add</a> 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 "<FORM METHOD=POST ACTION=editkeywords.cgi>\n"; - print "<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=0>\n"; - EmitFormElements($id, $name, $description); - - print "<TR>\n"; - print " <TH ALIGN=\"right\">Bugs:</TH>\n"; - print " <TD>"; SendSQL("SELECT count(*) FROM keywords WHERE keywordid = $id"); my $bugs = ''; $bugs = FetchOneColumn() if MoreSQLData(); - print $bugs || 'none'; - print "</TD>\n</TR></TABLE>\n"; + $vars->{'keyword_id'} = $id; + $vars->{'name'} = $name; + $vars->{'description'} = $description; + $vars->{'bug_count'} = $bugs; - print "<INPUT TYPE=HIDDEN NAME=\"action\" VALUE=\"update\">\n"; - print "<INPUT TYPE=SUBMIT VALUE=\"Update\">\n"; + print Bugzilla->cgi->header(); - print "</FORM>"; + $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 "<b>Back</b> 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 @@ <input type="submit" value="Yes, really delete the keyword"> </form> -<p>Go back to the <a href="query.cgi">query page</a> -or <a href="editkeywords.cgi">edit other keywords</a>.</p> +<p><a href="editkeywords.cgi">Edit other keywords</a>.</p> [% 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 @@ <input type="hidden" name="action" value="new"> </form> -<p>Go back to the <a href="query.cgi">query page</a> -or <a href="editkeywords.cgi">edit other keywords</a>.</p> +<p><a href="editkeywords.cgi">Edit other keywords</a>.</p> [% 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 @@ +<!-- 1.0@bugzilla.org --> +[%# 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 <terry@mozilla.org> + # Vlad Dascalu <jocuri@softhome.net> + #%] + +[%# INTERFACE: + # name: string; the name of the current keyword. + #%] + +[% PROCESS global/header.html.tmpl + title = "Adding new keyword" +%] + +<p>The keyword [% name FILTER html %] has been added.</p> + +<p><a href="editkeywords.cgi">Edit existing keywords</a> or +<a href="editkeywords.cgi?action=add">add another keyword</a>.</p> + +[% 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 @@ +<!-- 1.0@bugzilla.org --> +[%# 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 <terry@mozilla.org> + # Vlad Dascalu <jocuri@softhome.net> + #%] + +[%# 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" +%] + +<form method="post" action="editkeywords.cgi"> + <table border="0" cellpadding="4" cellspacing="0"> + <input type="hidden" name="id" value="[% keyword_id %]"> + <tr> + <th align="right">Name:</th> + <td><input size="64" maxlength="64" name="name" value="[% name FILTER html %]"></td> + </tr> + <tr> + <th align="right">Description:</th> + <td> + <textarea rows="4" cols="64" wrap="virtual" + name="description">[% description FILTER html %]</textarea> + </td> + </tr> + <tr> + <th align="right">[% terms.Bugs %]:</th> + <td> + [% IF bug_count %] + [% bug_count %] + [% ELSE %] + none + [% END %] + </td> + </tr> + </table> + + <input type="submit" value="Update"> + <input type="hidden" name="action" value="update"> +</form> + +<p><a href="editkeywords.cgi">Edit other keywords</a>.</p> + +[% 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 @@ +<!-- 1.0@bugzilla.org --> +[%# 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 <terry@mozilla.org> + # Vlad Dascalu <jocuri@softhome.net> + #%] + +[%# 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 %] + <table border="1" cellpadding="4" cellspacing="0"> + <tr bgcolor="#6666FF"> + <th align="left">Edit keyword ...</th> + <th align="left">Description</th> + <th align="left">[% terms.Bugs %]</th> + <th align="left">Action</th> + </tr> +[% END %] + +[% BLOCK table_footer %] + </table> +[% END %] + +[% FOREACH keyword = keywords %] + [% IF loop.count() % max_table_size == 1 %] + [% PROCESS table_header %] + [% END %] + + <tr> + <th valign="top"> + <a href="editkeywords.cgi?action=edit&id=[% keyword.id %]">[% keyword.name FILTER html %]</a> + </th> + <td valign="top"> + [% IF keyword.description %] + [% keyword.description FILTER html %] + [% ELSE %] + <font color="red">missing</font> + [% END %] + </td> + <td valign="top" align="right"> + [% IF keyword.bug_count %] + [% keyword.bug_count %] + [% ELSE %] + none + [% END %] + </td> + <th valign="top"> + <a href="editkeywords.cgi?action=delete&id=[% keyword.id %]">Delete</a> + </th> + </tr> + + [% IF !loop.last() && loop.count() % max_table_size == 0 %] + [% PROCESS table_footer %] + [% END %] +[% END %] + + <tr> + <td valign="top" colspan="3">Add a new keyword</td> + <td><a href="editkeywords.cgi?action=add">Add</td> + </tr> + +[% 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</a></b> </p> -<p>Go back to the <a href="query.cgi">query page</a> or -<a href="editkeywords.cgi">edit more keywords</a>.</p> +<p><a href="editkeywords.cgi">Edit more keywords</a>.</p> [% 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 <em>[% id FILTER html %]</em> 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" %] |