summaryrefslogtreecommitdiffstats
path: root/extensions/Review/lib
diff options
context:
space:
mode:
authorByron Jones <glob@mozilla.com>2014-03-17 17:30:11 +0100
committerByron Jones <glob@mozilla.com>2014-03-17 17:30:11 +0100
commitfa99f05b2e7074e88efea8a0fb4f0c51de77b3e1 (patch)
treea96730e71272977f6f719784bcaa6835a9146137 /extensions/Review/lib
parentbf95aa6a012b934da8b9049c5e3551334ccb7a54 (diff)
downloadbugzilla-fa99f05b2e7074e88efea8a0fb4f0c51de77b3e1.tar.gz
bugzilla-fa99f05b2e7074e88efea8a0fb4f0c51de77b3e1.tar.xz
Bug 981937: update review counter rebuilder to correct negative values
Diffstat (limited to 'extensions/Review/lib')
-rw-r--r--extensions/Review/lib/Util.pm20
1 files changed, 20 insertions, 0 deletions
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("