]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 190223: Complete templatization for editkeywords.cgi; reviewed by kiko, jth,...
authorjocuri%softhome.net <>
Wed, 10 Dec 2003 07:12:32 +0000 (07:12 +0000)
committerjocuri%softhome.net <>
Wed, 10 Dec 2003 07:12:32 +0000 (07:12 +0000)
editkeywords.cgi
template/en/default/admin/keywords/confirm-delete.html.tmpl
template/en/default/admin/keywords/create.html.tmpl
template/en/default/admin/keywords/created.html.tmpl [new file with mode: 0755]
template/en/default/admin/keywords/edit.html.tmpl [new file with mode: 0755]
template/en/default/admin/keywords/list.html.tmpl [new file with mode: 0755]
template/en/default/admin/keywords/rebuild-cache.html.tmpl
template/en/default/filterexceptions.pl
template/en/default/global/code-error.html.tmpl
template/en/default/global/user-error.html.tmpl

index c5158027218b541713a1c4132c0b197abc8f9612..cf20d7a0744b0847fc7dd15d9ba2ebebb99b36cb 100755 (executable)
@@ -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;
     }
 
index 5ff826b86e6d2565485f01eedcaca7b83d1e1383..76e2cc31fb42a7fbcfc07b0f76d1d955f2fd902f 100755 (executable)
@@ -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 %] 
index 49698a1db1151b334ca53a04ca225431d8e289a4..6811b99971a1d4f4960d2b7b7cc9a67ceee6bb7a 100755 (executable)
@@ -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 (executable)
index 0000000..ebb6a1f
--- /dev/null
@@ -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 (executable)
index 0000000..2f84e14
--- /dev/null
@@ -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 (executable)
index 0000000..e1f6eef
--- /dev/null
@@ -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&amp;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&amp;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 %]
index 4c4ea4b9aa14084b6359de7c755e8765f7f8c792..bd68f9ed53ec7d1bc97e05d20c8fd17f68008ed2 100755 (executable)
@@ -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 %] 
index c75f86bb319705c635d9ee1d0a89ac1382abf43e..05b52c5b80cb29970535cfc7695e45b1315cf624 100644 (file)
   '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',
index 82be89b1d027a6865c8acf23c5ffddf749c634dc..6f0881c20502fb2cc221b8c7d19eb1de77019b03 100644 (file)
   
   [% 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.
index 1bbd00efcbc7d05e43b34b13b2865788133527e2..f20081529641a81a549a7a8289e3f443e49bc230 100644 (file)
   [% 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" %]