summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla/Hook.pm15
-rw-r--r--Bugzilla/Product.pm3
-rw-r--r--extensions/Example/Extension.pm43
3 files changed, 61 insertions, 0 deletions
diff --git a/Bugzilla/Hook.pm b/Bugzilla/Hook.pm
index d29d4cf86..7ee033f86 100644
--- a/Bugzilla/Hook.pm
+++ b/Bugzilla/Hook.pm
@@ -656,6 +656,21 @@ to the user. (F<sanitycheck.cgi>'s C<Status>)
=back
+=head2 product_end_of_create
+
+Called right after a new product has been created, allowing additional
+changes to be made to the new product's attributes. This occurs inside of
+a database transaction, so if the hook throws an error all previous
+changes will be rolled back including the creation of the new product.
+
+Params:
+
+=over
+
+=item C<product> - The new L<Bugzilla::Product> object that was just created.
+
+=back
+
=head2 sanitycheck_repair
This hook allows for extra sanity check repairs to be made, for use by
diff --git a/Bugzilla/Product.pm b/Bugzilla/Product.pm
index d6eeab123..ac2bd4d72 100644
--- a/Bugzilla/Product.pm
+++ b/Bugzilla/Product.pm
@@ -30,6 +30,7 @@ use Bugzilla::Status;
use Bugzilla::Install::Requirements;
use Bugzilla::Mailer;
use Bugzilla::Series;
+use Bugzilla::Hook;
# Currently, we only implement enough of the Bugzilla::Field::Choice
# interface to control the visibility of other fields.
@@ -123,6 +124,8 @@ sub create {
$product->_create_bug_group() if Bugzilla->params->{'makeproductgroups'};
$product->_create_series() if $create_series;
+ Bugzilla::Hook::process('product_end_of_create', { product => $product });
+
$dbh->bz_commit_transaction();
return $product;
}
diff --git a/extensions/Example/Extension.pm b/extensions/Example/Extension.pm
index 425fdfb18..615f7740b 100644
--- a/extensions/Example/Extension.pm
+++ b/extensions/Example/Extension.pm
@@ -24,6 +24,9 @@ package Bugzilla::Extension::Example;
use strict;
use base qw(Bugzilla::Extension);
+use Bugzilla::Constants;
+use Bugzilla::Group;
+use Bugzilla::User;
use Bugzilla::Util qw(diff_arrays html_quote);
# This is extensions/Example/lib/Util.pm. I can load this here in my
@@ -346,6 +349,46 @@ sub product_confirm_delete {
$vars->{'example'} = 1;
}
+
+sub product_end_of_create {
+ my ($self, $args) = @_;
+
+ my $product = $args->{product};
+
+ # For this example, any lines of code that actually make changes to your
+ # database have been commented out.
+
+ # This section will take a group that exists in your installation
+ # (possible called test_group) and automatically makes the new
+ # product hidden to only members of the group. Just remove
+ # the restriction if you want the new product to be public.
+
+ my $example_group = new Bugzilla::Group({ name => 'example_group' });
+
+ if ($example_group) {
+ $product->set_group_controls($example_group,
+ { entry => 1,
+ membercontrol => CONTROLMAPMANDATORY,
+ othercontrol => CONTROLMAPMANDATORY });
+# $product->update();
+ }
+
+ # This section will automatically add a default component
+ # to the new product called 'No Component'.
+
+ my $default_assignee = new Bugzilla::User(
+ { name => Bugzilla->params->{maintainer} });
+
+ if ($default_assignee) {
+# Bugzilla::Component->create(
+# { name => 'No Component',
+# product => $product,
+# description => 'Select this component if one does not ' .
+# 'exist in the current list of components',
+# initialowner => $default_assignee });
+ }
+}
+
sub sanitycheck_check {
my ($self, $args) = @_;