From fa99f05b2e7074e88efea8a0fb4f0c51de77b3e1 Mon Sep 17 00:00:00 2001 From: Byron Jones Date: Tue, 18 Mar 2014 00:30:11 +0800 Subject: Bug 981937: update review counter rebuilder to correct negative values --- extensions/Review/lib/Util.pm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'extensions/Review') diff --git a/extensions/Review/lib/Util.pm b/extensions/Review/lib/Util.pm index 83589e2d0..c00e31b6b 100644 --- a/extensions/Review/lib/Util.pm +++ b/extensions/Review/lib/Util.pm @@ -19,6 +19,7 @@ sub rebuild_review_counters { my $dbh = Bugzilla->dbh; $dbh->bz_start_transaction; + my $rows = $dbh->selectall_arrayref(" SELECT flags.requestee_id AS user_id, flagtypes.name AS flagtype, @@ -41,9 +42,28 @@ sub rebuild_review_counters { $current->{$row->{flagtype}} = $row->{count}; } _update_profile($dbh, $current) if $current->{id}; + + foreach my $field (qw( review feedback needinfo )) { + _fix_negatives($dbh, $field); + } + $dbh->bz_commit_transaction; } +sub _fix_negatives { + my ($dbh, $field) = @_; + my $user_ids = $dbh->selectcol_arrayref( + "SELECT userid FROM profiles WHERE ${field}_request_count < 0" + ); + return unless @$user_ids; + $dbh->do( + "UPDATE profiles SET ${field}_request_count = 0 WHERE " . $dbh->sql_in('userid', $user_ids) + ); + foreach my $user_id (@$user_ids) { + Bugzilla->memcached->clear({ table => 'profiles', id => $user_id }); + } +} + sub _update_profile { my ($dbh, $data) = @_; $dbh->do(" -- cgit v1.2.3-24-g4f1b