From 0b7d46f99997ff8b72a161a7d2892a8bae456f3b Mon Sep 17 00:00:00 2001 From: "jocuri%softhome.net" Date: Sun, 16 Jan 2005 13:48:25 +0000 Subject: [PATCH] Patch for bug 190226: templatize editversions.cgi; patch by GavinS , r=jouni, a=myk. --- webtools/bugzilla/editversions.cgi | 370 +++++++----------- .../template/en/default/filterexceptions.pl | 8 + .../en/default/global/user-error.html.tmpl | 35 +- 3 files changed, 181 insertions(+), 232 deletions(-) diff --git a/webtools/bugzilla/editversions.cgi b/webtools/bugzilla/editversions.cgi index c426891edf2..613f2468af8 100755 --- a/webtools/bugzilla/editversions.cgi +++ b/webtools/bugzilla/editversions.cgi @@ -19,7 +19,8 @@ # Rights Reserved. # # Contributor(s): Holger Schurig -# Terry Weissman +# Terry Weissman +# Gavin Shelley # # # Direct any questions on this source code to @@ -35,6 +36,10 @@ require "globals.pl"; use Bugzilla::Constants; use Bugzilla::Config qw(:DEFAULT $datadir); +use vars qw($template $vars); + +my $cgi = Bugzilla->cgi; + # TestProduct: just returns if the specified product does exists # CheckProduct: same check, optionally emit an error text # TestVersion: just returns if the specified product/version combination exists @@ -47,7 +52,7 @@ sub TestProduct ($) # does the product exist? SendSQL("SELECT name FROM products - WHERE name=" . SqlQuote($prod)); + WHERE name = " . SqlQuote($prod)); return FetchOneColumn(); } @@ -57,14 +62,13 @@ sub CheckProduct ($) # do we have a product? unless ($prod) { - print "Sorry, you haven't specified a product."; - PutTrailer(); + ThrowUserError('product_not_specified'); exit; } unless (TestProduct $prod) { - print "Sorry, product '$prod' does not exist."; - PutTrailer(); + ThrowUserError('product_doesnt_exist', + {'product' => $prod}); exit; } } @@ -74,83 +78,35 @@ sub TestVersion ($$) my ($prod,$ver) = @_; # does the product exist? - SendSQL("SELECT products.name,value + SendSQL("SELECT products.name, value FROM versions, products - WHERE versions.product_id=products.id AND products.name=" . SqlQuote($prod) . " and value=" . SqlQuote($ver)); + WHERE versions.product_id = products.id + AND products.name = " . SqlQuote($prod) . " + AND value = " . SqlQuote($ver)); return FetchOneColumn(); } sub CheckVersion ($$) { - my ($prod,$ver) = @_; + my ($prod, $ver) = @_; # do we have the version? unless ($ver) { - print "Sorry, you haven't specified a version."; - PutTrailer(); + ThrowUserError('version_not_specified'); exit; } CheckProduct($prod); - unless (TestVersion $prod,$ver) { - print "Sorry, version '$ver' for product '$prod' does not exist."; - PutTrailer(); + unless (TestVersion $prod, $ver) { + ThrowUserError('version_not_valid', + {'product' => $prod, + 'version' => $ver}); exit; } } -# -# Displays the form to edit a version -# - -sub EmitFormElements ($$) -{ - my ($product, $version) = @_; - - print " Version:\n"; - print " \n"; - print " \n"; -} - - -# -# Displays a text like "a.", "a or b.", "a, b or c.", "a, b, c or d." -# - -sub PutTrailer (@) -{ - my (@links) = ("Back to the query page", @_); - SendSQL("UNLOCK TABLES"); - - 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(); -} - - - - - - - # # Preliminary checks: # @@ -160,10 +116,7 @@ Bugzilla->login(LOGIN_REQUIRED); print Bugzilla->cgi->header(); unless (UserInGroup("editcomponents")) { - PutHeader("Not allowed"); - print "Sorry, you aren't a member of the 'editcomponents' group.\n"; - print "And so, you aren't allowed to add, modify or delete versions.\n"; - PutTrailer(); + ThrowUserError('auth_cant_edit_versions'); exit; } @@ -171,17 +124,9 @@ unless (UserInGroup("editcomponents")) { # # often used variables # -my $cgi = Bugzilla->cgi; my $product = trim($cgi->param('product') || ''); my $version = trim($cgi->param('version') || ''); my $action = trim($cgi->param('action') || ''); -my $localtrailer; -if ($version) { - $localtrailer = "edit more versions"; -} else { - $localtrailer = "edit more versions"; -} - # @@ -189,31 +134,29 @@ if ($version) { # unless ($product) { - PutHeader("Select product"); - SendSQL("SELECT products.name,products.description,'xyzzy' + my @products = (); + + SendSQL("SELECT products.name, products.description FROM products - GROUP BY products.name ORDER BY products.name"); - print "\n"; - print " \n"; - print " \n"; - print " \n"; - #print " \n"; - print ""; - while ( MoreSQLData() ) { - my ($product, $description, $bugs) = FetchSQLData(); - $description ||= "missing"; - $bugs ||= "none"; - print "\n"; - print " \n"; - print " \n"; - print " \n"; - #print " \n"; - } - print "
Edit versions of ...DescriptionBugsEdit
$product$description$bugsEdit
\n"; - PutTrailer(); + while ( MoreSQLData() ) { + my ($product, $description) = FetchSQLData(); + + my $prod = {}; + + $prod->{'name'} = $product; + $prod->{'description'} = $description; + + push(@products, $prod); + } + + $vars->{'products'} = \@products; + $template->process("admin/versions/select-product.html.tmpl", + $vars) + || ThrowTemplateError($template->error()); + exit; } @@ -222,34 +165,33 @@ unless ($product) { # unless ($action) { - PutHeader("Select version of $product"); + CheckProduct($product); my $product_id = get_product_id($product); + my @versions = (); SendSQL("SELECT value FROM versions - WHERE product_id=$product_id + WHERE product_id = $product_id ORDER BY value"); - print "\n"; - print " \n"; - #print " \n"; - print " \n"; - print ""; while ( MoreSQLData() ) { - my $version = FetchOneColumn(); - print "\n"; - print " \n"; - #print " \n"; - print " \n"; - print ""; - } - print "\n"; - print " \n"; - print " \n"; - print "
Edit version ...BugsAction
$version$bugsDelete
Add a new versionAdd
\n"; + my $name = FetchOneColumn(); + + my $version = {}; + + $version->{'name'} = $name; + + push(@versions, $version); + + } + + $vars->{'product'} = $product; + $vars->{'versions'} = \@versions; + $template->process("admin/versions/list.html.tmpl", + $vars) + || ThrowTemplateError($template->error()); - PutTrailer(); exit; } @@ -263,25 +205,15 @@ unless ($action) { # if ($action eq 'add') { - PutHeader("Add version of $product"); + CheckProduct($product); my $product_id = get_product_id($product); - #print "This page lets you add a new version to a bugzilla-tracked product.\n"; + $vars->{'product'} = $product; + $template->process("admin/versions/create.html.tmpl", + $vars) + || ThrowTemplateError($template->error()); - print "

\n"; - print "\n"; - - EmitFormElements($product, $version); - - print "
\n
\n"; - print "\n"; - print "\n"; - print "
"; - - my $other = $localtrailer; - $other =~ s/more/other/; - PutTrailer($other); exit; } @@ -292,36 +224,40 @@ if ($action eq 'add') { # if ($action eq 'new') { - PutHeader("Adding new version"); + CheckProduct($product); my $product_id = get_product_id($product); # Cleanups and valididy checks unless ($version) { - print "You must enter a text for the new version. Please press\n"; - print "Back and try again.\n"; - PutTrailer($localtrailer); + ThrowUserError('version_blank_name', + {'name' => $version}); exit; } + if (TestVersion($product,$version)) { - print "The version '$version' already exists. Please press\n"; - print "Back and try again.\n"; - PutTrailer($localtrailer); + ThrowUserError('version_already_exists', + {'name' => $version, + 'product' => $product}); exit; } # Add the new version SendSQL("INSERT INTO versions ( " . - "value, product_id" . - " ) VALUES ( " . - SqlQuote($version) . ", $product_id)"); + "value, product_id" . + " ) VALUES ( " . + SqlQuote($version) . ", $product_id)"); # Make versioncache flush unlink "$datadir/versioncache"; - print "OK, done.

\n"; - PutTrailer("add another version or $localtrailer"); + $vars->{'name'} = $version; + $vars->{'product'} = $product; + $template->process("admin/versions/created.html.tmpl", + $vars) + || ThrowTemplateError($template->error()); + exit; } @@ -335,7 +271,7 @@ if ($action eq 'new') { # if ($action eq 'del') { - PutHeader("Delete version of $product"); + CheckVersion($product, $version); my $product_id = get_product_id($product); @@ -343,52 +279,15 @@ if ($action eq 'del') { FROM bugs WHERE product_id = $product_id AND version = " . SqlQuote($version)); - my $bugs = FetchOneColumn(); + my $bugs = FetchOneColumn() || 0; - print "\n"; - print "\n"; - print " \n"; - print " \n"; + $vars->{'bug_count'} = $bugs; + $vars->{'name'} = $version; + $vars->{'product'} = $product; + $template->process("admin/versions/confirm-delete.html.tmpl", + $vars) + || ThrowTemplateError($template->error()); - print "\n"; - print " \n"; - print " \n"; - print "\n"; - print " \n"; - print " \n"; - print "\n"; - print " \n"; - print " \n"; - print "
PartValue
Product:$product
Version:$version
Bugs:", $bugs || 'none' , "
\n"; - - print "

Confirmation

\n"; - - if ($bugs) { - if (!Param("allowbugdeletion")) { - print "Sorry, there are $bugs bugs outstanding for this version. -You must reassign those bugs to another version before you can delete this -one."; - PutTrailer($localtrailer); - exit; - } - print "
\n", - "There are bugs entered for this version! When you delete this ", - "version, all stored bugs will be deleted, too. ", - "You could not even see the bug history for this version anymore!\n", - "
\n"; - } - - print "

Do you really want to delete this version?

\n"; - print "

\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "
"; - - PutTrailer($localtrailer); exit; } @@ -399,7 +298,7 @@ one."; # if ($action eq 'delete') { - PutHeader("Deleting version of $product"); + CheckVersion($product,$version); my $product_id = get_product_id($product); @@ -417,37 +316,48 @@ if ($action eq 'delete') { if (Param("allowbugdeletion")) { + my $deleted_bug_count = 0; + SendSQL("SELECT bug_id - FROM bugs - WHERE product_id=$product_id - AND version=" . SqlQuote($version)); + FROM bugs + WHERE product_id = $product_id + AND version = " . SqlQuote($version)); while (MoreSQLData()) { my $bugid = FetchOneColumn(); PushGlobalSQLState(); - SendSQL("DELETE FROM attachments WHERE bug_id=$bugid"); - SendSQL("DELETE FROM bugs_activity WHERE bug_id=$bugid"); - SendSQL("DELETE FROM dependencies WHERE blocked=$bugid"); + SendSQL("DELETE FROM attachments WHERE bug_id = $bugid"); + SendSQL("DELETE FROM bugs_activity WHERE bug_id = $bugid"); + SendSQL("DELETE FROM dependencies WHERE blocked = $bugid"); PopGlobalSQLState(); - } - print "Attachments, bug activity and dependencies deleted.
\n"; + $deleted_bug_count++; + } + + $vars->{'deleted_bug_count'} = $deleted_bug_count; # Deleting the rest is easier: SendSQL("DELETE FROM bugs - WHERE product_id = $product_id - AND version=" . SqlQuote($version)); - print "Bugs deleted.
\n"; + WHERE product_id = $product_id + AND version = " . SqlQuote($version)); + } SendSQL("DELETE FROM versions WHERE product_id = $product_id - AND value=" . SqlQuote($version)); - print "Version deleted.

\n"; + AND value = " . SqlQuote($version)); + + SendSQL("UNLOCK TABLES;"); unlink "$datadir/versioncache"; - PutTrailer($localtrailer); + + $vars->{'name'} = $version; + $vars->{'product'} = $product; + $template->process("admin/versions/deleted.html.tmpl", + $vars) + || ThrowTemplateError($template->error()); + exit; } @@ -460,27 +370,17 @@ if ($action eq 'delete') { # if ($action eq 'edit') { - PutHeader("Edit version of $product"); + CheckVersion($product,$version); my $product_id = get_product_id($product); - print "

\n"; - print "\n"; + $vars->{'name'} = $version; + $vars->{'product'} = $product; - EmitFormElements($product, $version); + $template->process("admin/versions/edit.html.tmpl", + $vars) + || ThrowTemplateError($template->error()); - print "
\n"; - - print "\n"; - print "\n"; - print "\n"; - - print "
"; - - my $other = $localtrailer; - $other =~ s/more/other/; - PutTrailer($other); exit; } @@ -491,7 +391,6 @@ if ($action eq 'edit') { # if ($action eq 'update') { - PutHeader("Update version of $product"); my $versionold = trim($cgi->param('versionold') || ''); @@ -507,13 +406,16 @@ if ($action eq 'update') { if ($version ne $versionold) { unless ($version) { - print "Sorry, I can't delete the version text."; - PutTrailer($localtrailer); + SendSQL('UNLOCK TABLES'); + ThrowUserError('version_blank_name'); exit; } if (TestVersion($product,$version)) { - print "Sorry, version '$version' is already in use."; - PutTrailer($localtrailer); + SendSQL('UNLOCK TABLES'); + ThrowUserError('version_already_exists', + {'name' => $version, + 'product' => $product}); + exit; } SendSQL("UPDATE bugs @@ -522,14 +424,22 @@ if ($action eq 'update') { WHERE version=" . SqlQuote($versionold) . " AND product_id = $product_id"); SendSQL("UPDATE versions - SET value=" . SqlQuote($version) . " + SET value = " . SqlQuote($version) . " WHERE product_id = $product_id - AND value=" . SqlQuote($versionold)); + AND value = " . SqlQuote($versionold)); unlink "$datadir/versioncache"; - print "Updated version.
\n"; + + $vars->{'updated_name'} = 1; } - PutTrailer($localtrailer); + SendSQL('UNLOCK TABLES'); + + $vars->{'name'} = $version; + $vars->{'product'} = $product; + $template->process("admin/versions/updated.html.tmpl", + $vars) + || ThrowTemplateError($template->error()); + exit; } @@ -538,6 +448,4 @@ if ($action eq 'update') { # # No valid action found # - -PutHeader("Error"); -print "I don't have a clue what you want.
\n"; +ThrowUserError('version_no_action'); diff --git a/webtools/bugzilla/template/en/default/filterexceptions.pl b/webtools/bugzilla/template/en/default/filterexceptions.pl index 3d5ba8fb1be..e8d63dfb50a 100644 --- a/webtools/bugzilla/template/en/default/filterexceptions.pl +++ b/webtools/bugzilla/template/en/default/filterexceptions.pl @@ -589,6 +589,14 @@ 'deleted_bug_count' ], +'admin/versions/confirm-delete.html.tmpl' => [ + 'bug_count' +], + +'admin/versions/deleted.html.tmpl' => [ + 'deleted_bug_count' +], + 'account/login.html.tmpl' => [ 'target', ], diff --git a/webtools/bugzilla/template/en/default/global/user-error.html.tmpl b/webtools/bugzilla/template/en/default/global/user-error.html.tmpl index 7c6b4020173..d2852e80c56 100644 --- a/webtools/bugzilla/template/en/default/global/user-error.html.tmpl +++ b/webtools/bugzilla/template/en/default/global/user-error.html.tmpl @@ -186,6 +186,11 @@ Sorry, you aren't a member of the 'editcomponents' group, and so you aren't allowed to add, modify or delete milestones. + [% ELSIF error == "auth_cant_edit_versions" %] + [% title = "Access Denied" %] + Sorry, you aren't a member of the 'editcomponents' group, and so + you aren't allowed to add, modify or delete versions. + [% ELSIF error == "component_already_exists" %] [% title = "Component Already Exists" %] A component with the name '[% name FILTER html %]' already exists. @@ -232,7 +237,8 @@ [% ELSIF error == "product_not_specified" %] [% title = "No Product Specified" %] - No product specified when trying to edit components. + No product specified when trying to edit components, milestones or + versions. [% ELSIF error == "component_not_specified" %] [% title = "No Component Specified" %] @@ -925,6 +931,33 @@ [% title = "Unknown Tab" %] [% current_tab_name FILTER html %] is not a legal tab name. + [% ELSIF error == "version_already_exists" %] + [% title = "Version Already Exists" %] + The version '[% name FILTER html %]' already exists for product ' + [%- product FILTER html %]'. + + [% ELSIF error == "version_blank_name" %] + [% title = "Blank Version Name Not Allowed" %] + You must enter a name for this version. + + [% ELSIF error == "version_name_too_long" %] + [% title = "Version Name Is Too Long" %] + The name of a version is limited to 20 characters. + '[% name FILTER html %]' is too long ([% name.length %] characters). + + [% ELSIF error == "version_no_action" %] + [% title = "No valid action specified" %] + No valid action was specified when trying to edit versions. + + [% ELSIF error == "version_not_specified" %] + [% title = "No Version Specified" %] + No version specified when trying to edit versions. + + [% ELSIF error == "version_not_valid" %] + [% title = "Specified Version Does Not Exist" %] + The version '[% version FILTER html %]' for product + '[% product FILTER html %]' does not exist. + [% ELSIF error == "votes_must_be_nonnegative" %] [% title = "Votes Must Be Non-negative" %] Only use non-negative numbers for your [% terms.bug %] votes.