Commit 6b4e9eda authored by Max Kanat-Alexander's avatar Max Kanat-Alexander

Bug 545551: Hook: object_update_columns

r=mkanat, a=mkanat (module owner)
parent aca53c54
......@@ -715,6 +715,35 @@ L<Bugzilla::Object/update> returns.
=back
=head2 object_update_columns
If you've added fields to bugs via L</object_columns>, then this
hook allows you to say which of those columns should be updated in the
database when L<Bugzilla::Object/update> is called on the object.
If you don't use this hook, then your custom columns won't be modified in
the database by Bugzilla.
Params:
=over
=item C<object>
The object that is about to be updated. You should check this
like C<< if ($object->isa('Some::Class')) >> in your code, to modify
the "update columns" only for certain classes.
=item C<columns>
An arrayref. Add the string names of columns to this array to allow
that column to be updated when C<update()> is called on the object.
This arrayref does not contain the standard column names--you cannot stop
standard columns from being updated by using this hook.
=back
=head2 object_validators
Allows you to add new items to L<Bugzilla::Object/VALIDATORS> for
......
......@@ -322,11 +322,17 @@ sub update {
$dbh->bz_start_transaction();
my $old_self = $self->new($self->id);
my @all_columns = $self->UPDATE_COLUMNS;
my @hook_columns;
Bugzilla::Hook::process('object_update_columns',
{ object => $self, columns => \@hook_columns });
push(@all_columns, @hook_columns);
my %numeric = map { $_ => 1 } $self->NUMERIC_COLUMNS;
my %date = map { $_ => 1 } $self->DATE_COLUMNS;
my (@update_columns, @values, %changes);
foreach my $column ($self->UPDATE_COLUMNS) {
foreach my $column (@all_columns) {
my ($old, $new) = ($old_self->{$column}, $self->{$column});
# This has to be written this way in order to allow us to set a field
# from undef or to undef, and avoid warnings about comparing an undef
......
......@@ -386,6 +386,15 @@ sub object_end_of_update {
}
}
sub object_update_columns {
my ($self, $args) = @_;
my ($object, $columns) = @$args{qw(object columns)};
if ($object->isa('Bugzilla::ExampleObject')) {
push(@$columns, 'example');
}
}
sub object_validators {
my ($self, $args) = @_;
my ($class, $validators) = @$args{qw(class validators)};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment