From: mkanat%bugzilla.org <> Date: Tue, 6 Oct 2009 05:38:29 +0000 (+0000) Subject: Bug 512618: Make Bugzilla::Bug::choices return Field::Choice objects, not just values X-Git-Tag: bugzilla-3.5.1~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4671e0ffd9920d000fb6191999288ed12d4dac52;p=thirdparty%2Fbugzilla.git Bug 512618: Make Bugzilla::Bug::choices return Field::Choice objects, not just values Patch by Max Kanat-Alexander r=LpSolit, a=LpSolit --- diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index 567c130f4a..98547cd95b 100644 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -2108,6 +2108,7 @@ sub set_resolution { my $old_res = $self->resolution; $self->set('resolution', $value); + delete $self->{choices}; my $new_res = $self->resolution; if ($new_res ne $old_res) { @@ -2899,38 +2900,38 @@ sub user { return $self->{'user'}; } +# This is intended to get values that can be selected by the user in the +# UI. It should not be used for security or validation purposes. sub choices { my $self = shift; return $self->{'choices'} if exists $self->{'choices'}; return {} if $self->{'error'}; + my $user = Bugzilla->user; - $self->{'choices'} = {}; - - my @prodlist = map {$_->name} @{Bugzilla->user->get_enterable_products}; + my @products = @{ $user->get_enterable_products }; # The current product is part of the popup, even if new bugs are no longer # allowed for that product - if (lsearch(\@prodlist, $self->product) < 0) { - push(@prodlist, $self->product); - @prodlist = sort @prodlist; - } - - # Hack - this array contains "". See bug 106589. - my @res = grep ($_, @{get_legal_field_values('resolution')}); - - $self->{'choices'} = - { - 'product' => \@prodlist, - 'rep_platform' => get_legal_field_values('rep_platform'), - 'priority' => get_legal_field_values('priority'), - 'bug_severity' => get_legal_field_values('bug_severity'), - 'op_sys' => get_legal_field_values('op_sys'), - 'bug_status' => get_legal_field_values('bug_status'), - 'resolution' => \@res, - 'component' => [map($_->name, @{$self->product_obj->components})], - 'version' => [map($_->name, @{$self->product_obj->versions})], - 'target_milestone' => [map($_->name, @{$self->product_obj->milestones})], - }; + if (!grep($_->name eq $self->product_obj->name, @products)) { + unshift(@products, $self->product_obj); + } + + my %choices = ( + product => \@products, + component => $self->product_obj->components, + version => $self->product_obj->versions, + target_milestone => $self->product_obj->milestones, + ); + + my $resolution_field = new Bugzilla::Field({ name => 'resolution' }); + # Don't include the empty resolution in drop-downs. + my @resolutions = grep($_->name, @{ $resolution_field->legal_values }); + # And don't include MOVED in the list unless the bug is already MOVED. + if ($self->resolution ne 'MOVED') { + @resolutions= grep { $_->name ne 'MOVED' } @resolutions; + } + $choices{'resolution'} = \@resolutions; + $self->{'choices'} = \%choices; return $self->{'choices'}; } diff --git a/template/en/default/bug/edit.html.tmpl b/template/en/default/bug/edit.html.tmpl index d8a7fa4d75..76ca259e59 100644 --- a/template/en/default/bug/edit.html.tmpl +++ b/template/en/default/bug/edit.html.tmpl @@ -375,16 +375,9 @@ [%#############%] - [% IF bug.check_can_change_field('product', 0, 1) %] - [% prod_list = user.get_enterable_products %] - [% IF NOT user.can_enter_product(bug.product) %] - [% prod_list.unshift(bug.product_obj) %] - [% END %] - [% END %] - [% INCLUDE bug/field.html.tmpl bug = bug, field = select_fields.product, - override_legal_values = prod_list + override_legal_values = bug.choices.product desc_url = 'describecomponents.cgi', value = bug.product editable = bug.check_can_change_field('product', 0, 1) %] @@ -1112,24 +1105,21 @@ [%############################################################################%] [% BLOCK select %] - [% IF NOT no_td %] - [% END %] - [% IF bug.check_can_change_field(selname, 0, 1) AND bug.choices.${selname}.size > 1 %] + [% IF bug.check_can_change_field(selname, 0, 1) + AND bug.choices.${selname}.size > 1 %] [% ELSE %] [% bug.${selname} FILTER html %] [% END %] - [% IF NOT no_td %] - [% END %] - [% no_td = 0 %] [% END %] [%############################################################################%] diff --git a/template/en/default/bug/knob.html.tmpl b/template/en/default/bug/knob.html.tmpl index cd586fcebb..10d58e51b0 100644 --- a/template/en/default/bug/knob.html.tmpl +++ b/template/en/default/bug/knob.html.tmpl @@ -147,10 +147,9 @@ [% BLOCK select_resolution %] [% END %]