Commit bbb4f51a authored by lpsolit%gmail.com's avatar lpsolit%gmail.com

Bug 461127: Cannot change status and reassign at the same time if the…

Bug 461127: Cannot change status and reassign at the same time if the assignee/QA contact doesn't have editbugs privs - Patch by Fré©ric Buclin <LpSolit@gmail.com> r/a=mkanat
parent 09d4f0e3
...@@ -791,6 +791,10 @@ sub update { ...@@ -791,6 +791,10 @@ sub update {
$self->_sync_fulltext() $self->_sync_fulltext()
if $self->{added_comments} || $changes->{short_desc}; if $self->{added_comments} || $changes->{short_desc};
# Remove obsolete internal variables.
delete $self->{'_old_assigned_to'};
delete $self->{'_old_qa_contact'};
return $changes; return $changes;
} }
...@@ -1742,6 +1746,8 @@ sub set_alias { $_[0]->set('alias', $_[1]); } ...@@ -1742,6 +1746,8 @@ sub set_alias { $_[0]->set('alias', $_[1]); }
sub set_assigned_to { sub set_assigned_to {
my ($self, $value) = @_; my ($self, $value) = @_;
$self->set('assigned_to', $value); $self->set('assigned_to', $value);
# Store the old assignee. check_can_change_field() needs it.
$self->{'_old_assigned_to'} = $self->{'assigned_to_obj'}->id;
delete $self->{'assigned_to_obj'}; delete $self->{'assigned_to_obj'};
} }
sub reset_assigned_to { sub reset_assigned_to {
...@@ -1983,6 +1989,10 @@ sub set_product { ...@@ -1983,6 +1989,10 @@ sub set_product {
sub set_qa_contact { sub set_qa_contact {
my ($self, $value) = @_; my ($self, $value) = @_;
$self->set('qa_contact', $value); $self->set('qa_contact', $value);
# Store the old QA contact. check_can_change_field() needs it.
if ($self->{'qa_contact_obj'}) {
$self->{'_old_qa_contact'} = $self->{'qa_contact_obj'}->id;
}
delete $self->{'qa_contact_obj'}; delete $self->{'qa_contact_obj'};
} }
sub reset_qa_contact { sub reset_qa_contact {
...@@ -3308,14 +3318,16 @@ sub check_can_change_field { ...@@ -3308,14 +3318,16 @@ sub check_can_change_field {
# Make sure that a valid bug ID has been given. # Make sure that a valid bug ID has been given.
if (!$self->{'error'}) { if (!$self->{'error'}) {
# Allow the assignee to change anything else. # Allow the assignee to change anything else.
if ($self->{'assigned_to'} == $user->id) { if ($self->{'assigned_to'} == $user->id
|| $self->{'_old_assigned_to'} && $self->{'_old_assigned_to'} == $user->id)
{
return 1; return 1;
} }
# Allow the QA contact to change anything else. # Allow the QA contact to change anything else.
if (Bugzilla->params->{'useqacontact'} if (Bugzilla->params->{'useqacontact'}
&& $self->{'qa_contact'} && (($self->{'qa_contact'} && $self->{'qa_contact'} == $user->id)
&& ($self->{'qa_contact'} == $user->id)) || ($self->{'_old_qa_contact'} && $self->{'_old_qa_contact'} == $user->id)))
{ {
return 1; return 1;
} }
......
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