From 782d536feff3b2dce6c5f231167ed79059c161ea Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Mon, 30 Nov 2009 04:18:36 +0000 Subject: Bug 523411: Hook: product-end_of_create Patch by Dave Lawrence r=mkanat, a=mkanat --- Bugzilla/Hook.pm | 15 ++++++++++++++ Bugzilla/Product.pm | 3 +++ extensions/Example/Extension.pm | 43 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) 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's C) =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 - The new L 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) = @_; -- cgit v1.2.3-24-g4f1b