]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 577149: Make convert-workflow rename values in saved searches
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Thu, 8 Jul 2010 00:15:45 +0000 (17:15 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Thu, 8 Jul 2010 00:15:45 +0000 (17:15 -0700)
r=LpSolit, a=LpSolit

Bugzilla/Search/Saved.pm
contrib/convert-workflow.pl

index cb63714691091a60ca3ec8374c201aabf1bb546a..32a24eae1dc8b154060f610bff989735ecebdfd6 100644 (file)
@@ -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;
index 7525bac959dab0c889bbf9acc42c8da53edb3612..8a740fcb256754561a32568dc5de0d9ddfd01e33 100755 (executable)
@@ -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();