summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlpsolit%gmail.com <>2009-11-23 23:46:47 +0100
committerlpsolit%gmail.com <>2009-11-23 23:46:47 +0100
commit2296f779df4debf3d7aa3fc1f2b648e2c929e061 (patch)
treea51eee2ae9d333d45da82909ebfea820d6128874
parent717b3b5c982957c28275b0c177ed56536b93303c (diff)
downloadbugzilla-2296f779df4debf3d7aa3fc1f2b648e2c929e061.tar.gz
bugzilla-2296f779df4debf3d7aa3fc1f2b648e2c929e061.tar.xz
Bug 451716: Deleting a product does not remove its entries from the 'Series' table - Patch by Frédéric Buclin <LpSolit@gmail.com> r=gerv a=LpSolit
-rw-r--r--Bugzilla/Product.pm29
-rwxr-xr-xeditproducts.cgi2
-rw-r--r--template/en/default/admin/products/confirm-delete.html.tmpl5
3 files changed, 32 insertions, 4 deletions
diff --git a/Bugzilla/Product.pm b/Bugzilla/Product.pm
index 7feaa4862..d6eeab123 100644
--- a/Bugzilla/Product.pm
+++ b/Bugzilla/Product.pm
@@ -376,7 +376,7 @@ sub update {
}
sub remove_from_db {
- my $self = shift;
+ my ($self, $params) = @_;
my $user = Bugzilla->user;
my $dbh = Bugzilla->dbh;
@@ -399,8 +399,31 @@ sub remove_from_db {
}
}
- # XXX - This line can go away as soon as bug 427455 is fixed.
- $dbh->do("DELETE FROM group_control_map WHERE product_id = ?", undef, $self->id);
+ if ($params->{delete_series}) {
+ my $series_ids =
+ $dbh->selectcol_arrayref('SELECT series_id
+ FROM series
+ INNER JOIN series_categories
+ ON series_categories.id = series.category
+ WHERE series_categories.name = ?',
+ undef, $self->name);
+
+ $dbh->do('DELETE FROM series WHERE ' . $dbh->sql_in('series_id', $series_ids));
+
+ # If no subcategory uses this product name, completely purge it.
+ my $in_use =
+ $dbh->selectrow_array('SELECT 1
+ FROM series
+ INNER JOIN series_categories
+ ON series_categories.id = series.subcategory
+ WHERE series_categories.name = ? ' .
+ $dbh->sql_limit(1),
+ undef, $self->name);
+ if (!$in_use) {
+ $dbh->do('DELETE FROM series_categories WHERE name = ?', undef, $self->name);
+ }
+ }
+
$dbh->do("DELETE FROM products WHERE id = ?", undef, $self->id);
$dbh->bz_commit_transaction();
diff --git a/editproducts.cgi b/editproducts.cgi
index e1356abbc..1d4335466 100755
--- a/editproducts.cgi
+++ b/editproducts.cgi
@@ -233,7 +233,7 @@ if ($action eq 'delete') {
my $product = $user->check_can_admin_product($product_name);
check_token_data($token, 'delete_product');
- $product->remove_from_db;
+ $product->remove_from_db({ delete_series => scalar $cgi->param('delete_series')});
delete_token($token);
$vars->{'message'} = 'product_deleted';
diff --git a/template/en/default/admin/products/confirm-delete.html.tmpl b/template/en/default/admin/products/confirm-delete.html.tmpl
index d350bdb90..f4a04b86f 100644
--- a/template/en/default/admin/products/confirm-delete.html.tmpl
+++ b/template/en/default/admin/products/confirm-delete.html.tmpl
@@ -248,6 +248,11 @@
<p>Do you really want to delete this product?</p>
<form method="post" action="editproducts.cgi">
+ <input type="checkbox" id="delete_series" name="delete_series" value=1>
+ <label for="delete_series">
+ Delete all related series (you can also delete them later, by visiting
+ the <a href="chart.cgi?category=[% product.name FILTER html %]">New Charts page</a>.)
+ </label><p>
<input type="submit" id="delete" value="Yes, delete">
<input type="hidden" name="action" value="delete">
<input type="hidden" name="product" value="[% product.name FILTER html %]">