From f1aceec2a833f2cbb73d0c4762ae17818b030c14 Mon Sep 17 00:00:00 2001 From: "jake%acutex.net" Date: Fri, 14 Sep 2001 21:50:08 +0000 Subject: [PATCH] Fix for bug 30731 - Reassigning closed bugs from the mass change page caused their status to be set to new. r= myk@mozilla.org, zach@zachlipton.com --- webtools/bugzilla/globals.pl | 9 ++++++++- webtools/bugzilla/process_bug.cgi | 14 +++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/webtools/bugzilla/globals.pl b/webtools/bugzilla/globals.pl index af3c26a3de31..6dba9c720479 100644 --- a/webtools/bugzilla/globals.pl +++ b/webtools/bugzilla/globals.pl @@ -1171,12 +1171,19 @@ sub GroupIsActive { sub IsOpenedState { my ($state) = (@_); - if ($state =~ /^(NEW|REOPENED|ASSIGNED)$/ || $state eq $::unconfirmedstate) { + if (grep($_ eq $state, OpenStates())) { return 1; } return 0; } +# This sub will return an array containing any status that +# is considered an open bug. + +sub OpenStates { + return ('NEW', 'REOPENED', 'ASSIGNED', $::unconfirmedstate); +} + sub RemoveVotes { my ($id, $who, $reason) = (@_); diff --git a/webtools/bugzilla/process_bug.cgi b/webtools/bugzilla/process_bug.cgi index 70d2625ba125..0baadda9aca3 100755 --- a/webtools/bugzilla/process_bug.cgi +++ b/webtools/bugzilla/process_bug.cgi @@ -507,7 +507,19 @@ sub ChangeStatus { my ($str) = (@_); if ($str ne $::dontchange) { DoComma(); - if (IsOpenedState($str)) { + # Ugly, but functional. We don't want to change Status if we are + # reasigning non-open bugs via the mass change form. + if ( ($::FORM{knob} eq 'reassign' || $::FORM{knob} eq 'reassignbycomponent') && + ! defined $::FORM{id} && $str eq 'NEW' ) { + # If we got to here, we're dealing with a reassign from the mass + # change page. We don't know (and can't easily figure out) if this + # bug is open or closed. If it's closed, we don't want to change + # its status to NEW. We have to put some logic into the SQL itself + # to handle that. + my @open_state = map(SqlQuote($_), OpenStates()); + my $open_state = join(", ", @open_state); + $::query .= "bug_status = IF(bug_status IN($open_state), '$str', bug_status)"; + } elsif (IsOpenedState($str)) { $::query .= "bug_status = IF(everconfirmed = 1, '$str', '$::unconfirmedstate')"; } else { $::query .= "bug_status = '$str'";