]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 556869: New Hook: object_before_delete
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Fri, 2 Apr 2010 21:00:18 +0000 (14:00 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Fri, 2 Apr 2010 21:00:18 +0000 (14:00 -0700)
r=mkanat, a=mkanat (module owner)

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

index b8d763d2007f0d686b5ed62bdcacd1fb0cc976b1..7f85e70d80fd737050e77b7b15d64df60f26c25f 100644 (file)
@@ -704,6 +704,25 @@ A hashref. The set of named parameters passed to C<create>.
 
 =back
 
+
+=head2 object_before_delete
+
+This happens in L<Bugzilla::Object/remove_from_db>, after we've confirmed
+that the object can be deleted, but before any rows have actually
+been removed from the database. This sometimes occurs inside a database
+transaction.
+
+Params:
+
+=over
+
+=item C<object> - The L<Bugzilla::Object> being deleted. You will probably
+want to check its type like C<< $object->isa('Some::Class') >> before doing
+anything with it.
+
+=back
+
+
 =head2 object_before_set
 
 Called during L<Bugzilla::Object/set>, before any actual work is done.
index e50be1fbf9d42632935d51d77e281f9b5f20ca0a..2477244df0b898c9b56afd3591bca9c507a6ff70 100644 (file)
@@ -383,6 +383,7 @@ sub update {
 
 sub remove_from_db {
     my $self = shift;
+    Bugzilla::Hook::process('object_before_delete', { object => $self });
     my $table = $self->DB_TABLE;
     my $id_field = $self->ID_FIELD;
     Bugzilla->dbh->do("DELETE FROM $table WHERE $id_field = ?",
index 835d36f807c95ccf921acf3ee94bd561385d6a4b..26a91b789adde972e164792c94b030a2930e0d25 100644 (file)
@@ -354,6 +354,18 @@ sub object_before_create {
     }
 }
 
+sub object_before_delete {
+    my ($self, $args) = @_;
+
+    my $object = $args->{'object'};
+
+    # Note that this is a made-up class, for this example.
+    if ($object->isa('Bugzilla::ExampleObject')) {
+        my $id = $object->id;
+        warn "An object with id $id is about to be deleted!";
+    } 
+}
+
 sub object_before_set {
     my ($self, $args) = @_;