mark: A photo of Mark kneeling on top of the Taal Volcano in the Philippines. It was a long hike. (Default)
Mark Smith ([staff profile] mark) wrote in [site community profile] changelog2009-08-19 04:45 pm

[dw-free] Random Account Sponsorship/Paid Account Fairy

[commit: http://hg.dwscoalition.org/dw-free/rev/d48f49dad17b]

http://bugs.dwscoalition.org/show_bug.cgi?id=211

Fix bugs with creating random user fairy data.

Patch by [personal profile] janinedog.

Files modified:
  • bin/get-users-for-paid-accounts.pl
--------------------------------------------------------------------------------
diff -r 0b3288e64770 -r d48f49dad17b bin/get-users-for-paid-accounts.pl
--- a/bin/get-users-for-paid-accounts.pl	Wed Aug 19 10:55:24 2009 -0500
+++ b/bin/get-users-for-paid-accounts.pl	Wed Aug 19 16:45:42 2009 +0000
@@ -17,27 +17,30 @@ my $week_ago = $starttime - 60*60*24*7;
 my $week_ago = $starttime - 60*60*24*7;
 my $month_ago = $starttime - 60*60*24*30;
 
-my $us = LJ::load_userids( @$userids );
-foreach my $userid ( keys %$us ) {
-    my $u = $us->{$userid};
+while ( @$userids && ( my @userids_chunk = splice( @$userids, 0, 100 ) ) ) {
+    my $us = LJ::load_userids( @userids_chunk );
+    foreach my $userid ( keys %$us ) {
+        my $u = $us->{$userid};
 
-    next if $u->is_paid; # must not be a paid user
-    next unless $u->opt_randompaidgifts; # must allow random paid gifts
-    next if LJ::sysban_check( 'pay_user', $u->user ); # must not be sysbanned from payments
-    next if $u->timecreate > $month_ago; # must be created more than a month ago
-    next if $u->number_of_posts < 10; # must have at least 10 posts
-    next if $u->timeupdate < $week_ago; # must have posted in the past week
+        next if $u->is_paid; # must not be a paid user
+        next unless $u->opt_randompaidgifts; # must allow random paid gifts
+        next if LJ::sysban_check( 'pay_user', $u->user ); # must not be sysbanned from payments
+        next if $u->timecreate > $month_ago; # must be created more than a month ago
+        next if $u->number_of_posts < 10; # must have at least 10 posts
+        next if $u->timeupdate < $week_ago; # must have posted in the past week
 
-    # get the number of entries posted and comments left in the past month
-    my $num_posts = $dbslow->selectrow_array( "SELECT COUNT(*) FROM log2 WHERE journalid = ? AND logtime > ?", undef, $userid, LJ::mysql_time( $month_ago ) );
-    my $num_comments = $dbslow->selectrow_array( "SELECT COUNT(*) FROM talkleft WHERE userid = ? AND posttime > ?", undef, $userid, $month_ago );
+        # get the number of entries posted and comments left in the past month
+        my $dbcr = LJ::get_cluster_reader( $u );
+        my $num_posts = $dbcr->selectrow_array( "SELECT COUNT(*) FROM log2 WHERE journalid = ? AND logtime > ?", undef, $userid, LJ::mysql_time( $month_ago ) );
+        my $num_comments = $dbcr->selectrow_array( "SELECT COUNT(*) FROM talkleft WHERE userid = ? AND posttime > ?", undef, $userid, $month_ago );
 
-    # assign point values based on these numbers
-    my $post_points = min( 10, $num_posts ) || 0;
-    my $comment_points = min( 10, $num_comments ) || 0;
+        # assign point values based on these numbers
+        my $post_points = min( 10, $num_posts ) || 0;
+        my $comment_points = min( 10, $num_comments ) || 0;
 
-    # insert the total points for the user
-    $dbh->do( "INSERT INTO users_for_paid_accounts ( userid, time_inserted, points ) VALUES ( ?, ?, ? )", undef, $userid, $starttime, $post_points + $comment_points );
+        # insert the total points for the user
+        $dbh->do( "INSERT INTO users_for_paid_accounts ( userid, time_inserted, points ) VALUES ( ?, ?, ? )", undef, $userid, $starttime, $post_points + $comment_points );
+    }
 }
 
 # delete all old data
--------------------------------------------------------------------------------