]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 449306: Add a hook after a bug gets saved, and after flags get updated.
authormkanat%bugzilla.org <>
Wed, 20 Aug 2008 03:14:02 +0000 (03:14 +0000)
committermkanat%bugzilla.org <>
Wed, 20 Aug 2008 03:14:02 +0000 (03:14 +0000)
Patch By Jesse Clark <jjclark1982@gmail.com> r=mkanat, a=mkanat

Bugzilla/Bug.pm
Bugzilla/Flag.pm
Bugzilla/Hook.pm

index 1fb3887f4977263b6b9c85a0da83f31b1159bd5f..0b635012fc1141040126d925803701858c2fd6e8 100644 (file)
@@ -35,6 +35,7 @@ use Bugzilla::Constants;
 use Bugzilla::Field;
 use Bugzilla::Flag;
 use Bugzilla::FlagType;
+use Bugzilla::Hook;
 use Bugzilla::Keyword;
 use Bugzilla::User;
 use Bugzilla::Util;
@@ -692,6 +693,11 @@ sub update {
         $changes->{'dup_id'} = [$old_dup || undef, $cur_dup || undef];
     }
 
+    Bugzilla::Hook::process('bug-end_of_update', { bug       => $self,
+                                                   timestamp => $delta_ts,
+                                                   changes   => $changes,
+                                                 });
+
     # If any change occurred, refresh the timestamp of the bug.
     if (scalar(keys %$changes) || $self->{added_comments}) {
         $dbh->do('UPDATE bugs SET delta_ts = ? WHERE bug_id = ?',
index 6266b0c0cc1d8957de3f92c425aeb069f71ca61c..73266ce9f286d8d3c3c1dc28e7302c2b7ae21c4e 100644 (file)
@@ -54,6 +54,7 @@ whose names start with _ or a re specifically noted as being private.
 =cut
 
 use Bugzilla::FlagType;
+use Bugzilla::Hook;
 use Bugzilla::User;
 use Bugzilla::Util;
 use Bugzilla::Error;
@@ -612,6 +613,12 @@ sub process {
     my @new_summaries = $class->snapshot($bug_id, $attach_id);
 
     update_activity($bug_id, $attach_id, $timestamp, \@old_summaries, \@new_summaries);
+
+    Bugzilla::Hook::process('flag-end_of_update', { bug       => $bug,
+                                                    timestamp => $timestamp,
+                                                    old_flags => \@old_summaries,
+                                                    new_flags => \@new_summaries,
+                                                  });
 }
 
 sub update_activity {
index fb63d3b224272b3880ff217f7486f7f277039065..2436ac1ad301f751806d9cfb7e3c5c503b462911 100644 (file)
@@ -170,6 +170,25 @@ This describes what hooks exist in Bugzilla currently. They are mostly
 in alphabetical order, but some related hooks are near each other instead
 of being alphabetical.
 
+=head2 bug-end_of_update
+
+This happens at the end of L<Bugzilla::Bug/update>, after all other changes are
+made to the database. This generally occurs inside a database transaction.
+
+Params:
+
+=over
+
+=item C<bug> - The changed bug object, with all fields set to their updated
+values.
+
+=item C<timestamp> - The timestamp used for all updates in this transaction.
+
+=item C<changes> - The hash of changed fields. 
+C<$changes-E<gt>{field} = [old, new]>
+
+=back
+
 =head2 buglist-columns
 
 This happens in buglist.cgi after the standard columns have been defined and
@@ -226,6 +245,32 @@ Params:
 
 =back
 
+=head2 flag-end_of_update
+
+This happens at the end of L<Bugzilla::Flag/process>, after all other changes
+are made to the database and after emails are sent. It gives you a before/after
+snapshot of flags so you can react to specific flag changes.
+This generally occurs inside a database transaction.
+
+Note that the interface to this hook is B<UNSTABLE> and it may change in the
+future.
+
+Params:
+
+=over
+
+=item C<bug> - The changed bug object.
+
+=item C<timestamp> - The timestamp used for all updates in this transaction.
+
+=item C<old_flags> - The snapshot of flag summaries from before the change.
+
+=item C<new_flags> - The snapshot of flag summaries after the change. Call
+C<my ($removed, $added) = diff_arrays(old_flags, new_flags)> to get the list of
+changed flags, and search for a specific condition like C<added eq 'review-'>.
+
+=back
+
 =head2 install-requirements
 
 Because of the way Bugzilla installation works, there can't be a normal