summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--globals.pl9
-rwxr-xr-xprocess_bug.cgi14
2 files changed, 21 insertions, 2 deletions
diff --git a/globals.pl b/globals.pl
index af3c26a3d..6dba9c720 100644
--- a/globals.pl
+++ b/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/process_bug.cgi b/process_bug.cgi
index 70d2625ba..0baadda9a 100755
--- a/process_bug.cgi
+++ b/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'";