summaryrefslogtreecommitdiffstats
path: root/extensions/UserProfile/bin/update.pl
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/UserProfile/bin/update.pl')
-rwxr-xr-xextensions/UserProfile/bin/update.pl80
1 files changed, 80 insertions, 0 deletions
diff --git a/extensions/UserProfile/bin/update.pl b/extensions/UserProfile/bin/update.pl
new file mode 100755
index 000000000..457585f8d
--- /dev/null
+++ b/extensions/UserProfile/bin/update.pl
@@ -0,0 +1,80 @@
+#!/usr/bin/perl
+
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This Source Code Form is "Incompatible With Secondary Licenses", as
+# defined by the Mozilla Public License, v. 2.0.
+
+use strict;
+use warnings;
+
+use FindBin qw($Bin);
+use lib "$Bin/../../..";
+
+use Bugzilla;
+BEGIN { Bugzilla->extensions() }
+
+use Bugzilla::Constants;
+use Bugzilla::Extension::UserProfile::Util;
+use Bugzilla::User;
+
+Bugzilla->usage_mode(USAGE_MODE_CMDLINE);
+my $dbh = Bugzilla->dbh;
+my $user_ids;
+my $verbose = grep { $_ eq '-v' } @ARGV;
+
+$user_ids = $dbh->selectcol_arrayref(
+ "SELECT user_id
+ FROM profiles_statistics_recalc
+ ORDER BY user_id",
+ { Slice => {} }
+);
+
+if (@$user_ids) {
+ print "recalculating last_user_activity\n";
+ my ($count, $total) = (0, scalar(@$user_ids));
+ foreach my $user_id (@$user_ids) {
+ if ($verbose) {
+ $count++;
+ my $login = user_id_to_login($user_id);
+ print "$count/$total $login ($user_id)\n";
+ }
+ $dbh->do(
+ "UPDATE profiles
+ SET last_activity_ts = ?,
+ last_statistics_ts = NULL
+ WHERE userid = ?",
+ undef,
+ last_user_activity($user_id),
+ $user_id
+ );
+ }
+ $dbh->do(
+ "DELETE FROM profiles_statistics_recalc WHERE " . $dbh->sql_in('user_id', $user_ids)
+ );
+}
+
+$user_ids = $dbh->selectcol_arrayref(
+ "SELECT userid
+ FROM profiles
+ WHERE last_activity_ts IS NOT NULL
+ AND (last_statistics_ts IS NULL
+ OR last_activity_ts > last_statistics_ts)
+ ORDER BY userid",
+ { Slice => {} }
+);
+
+if (@$user_ids) {
+ $verbose && print "updating statistics\n";
+ my ($count, $total) = (0, scalar(@$user_ids));
+ foreach my $user_id (@$user_ids) {
+ if ($verbose) {
+ $count++;
+ my $login = user_id_to_login($user_id);
+ print "$count/$total $login ($user_id)\n";
+ }
+ update_statistics_by_user($user_id);
+ }
+}