]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 523411: Hook: product-end_of_create
authormkanat%bugzilla.org <>
Mon, 30 Nov 2009 04:18:36 +0000 (04:18 +0000)
committermkanat%bugzilla.org <>
Mon, 30 Nov 2009 04:18:36 +0000 (04:18 +0000)
Patch by Dave Lawrence <dkl@redhat.com> r=mkanat, a=mkanat

Bugzilla/Hook.pm
Bugzilla/Product.pm
extensions/Example/Extension.pm

index d29d4cf86834523de54b19ae93cb07f3a82bf4b2..7ee033f8651bc451d3fd26d4741b2f7442f34fe0 100644 (file)
@@ -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
index d6eeab12328a1340df0a1f2f7990c898a18f6b9a..ac2bd4d72668d65df498e8fc2872acd7aabea6d7 100644 (file)
@@ -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;
 }
index 425fdfb18667c6da0b5032837b52a079d14466af..615f7740bf1423ae7f87c8c06541a3ec4512b6d1 100644 (file)
@@ -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) = @_;