summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla/Search/Saved.pm31
-rwxr-xr-xcontrib/convert-workflow.pl5
2 files changed, 35 insertions, 1 deletions
diff --git a/Bugzilla/Search/Saved.pm b/Bugzilla/Search/Saved.pm
index cb6371469..32a24eae1 100644
--- a/Bugzilla/Search/Saved.pm
+++ b/Bugzilla/Search/Saved.pm
@@ -174,6 +174,37 @@ sub create {
return $obj;
}
+sub rename_field_value {
+ my ($class, $field, $old_value, $new_value) = @_;
+
+ my $old = url_quote($old_value);
+ my $new = url_quote($new_value);
+ my $old_sql = $old;
+ $old_sql =~ s/([_\%])/\\$1/g;
+
+ my $dbh = Bugzilla->dbh;
+ $dbh->bz_start_transaction();
+
+ my %queries = @{ $dbh->selectcol_arrayref(
+ "SELECT id, query FROM namedqueries WHERE query LIKE ?",
+ {Columns=>[1,2]}, "\%$old_sql\%") };
+ foreach my $id (keys %queries) {
+ my $query = $queries{$id};
+ $query =~ s/\b$field=\Q$old\E\b/$field=$new/gi;
+ # Fix boolean charts.
+ while ($query =~ /\bfield(\d+-\d+-\d+)=\Q$field\E\b/gi) {
+ my $chart_id = $1;
+ # Note that this won't handle lists or substrings inside of
+ # boolean charts. Users will have to fix those themselves.
+ $query =~ s/\bvalue\Q$chart_id\E=\Q$old\E\b/value$chart_id=$new/i;
+ }
+ $dbh->do("UPDATE namedqueries SET query = ? WHERE id = ?",
+ undef, $query, $id);
+ }
+
+ $dbh->bz_commit_transaction();
+}
+
sub preload {
my ($searches) = @_;
my $dbh = Bugzilla->dbh;
diff --git a/contrib/convert-workflow.pl b/contrib/convert-workflow.pl
index 7525bac95..8a740fcb2 100755
--- a/contrib/convert-workflow.pl
+++ b/contrib/convert-workflow.pl
@@ -25,6 +25,7 @@ use lib qw(. lib);
use Bugzilla;
use Bugzilla::Config qw(:admin);
+use Bugzilla::Search::Saved;
use Bugzilla::Status;
my $confirmed = new Bugzilla::Status({ name => 'CONFIRMED' });
@@ -79,7 +80,7 @@ foreach my $pair (@translation) {
}
foreach my $what (qw(added removed)) {
- $dbh->do("UPDATE bugs_activity SET $what = ?
+ $dbh->do("UPDATE bugs_activity SET $what = ?
WHERE fieldid = ? AND $what = ?",
undef, $to, $status_field->id, $from);
}
@@ -99,6 +100,8 @@ foreach my $pair (@translation) {
$dbh->do('UPDATE bug_status SET value = ? WHERE value = ?',
undef, $to, $from);
}
+
+ Bugzilla::Search::Saved->rename_field_value('bug_status', $from, $to);
}
$dbh->bz_commit_transaction();