exit(0); } require_once "{$IP}/extensions/wikia/AchievementsII/Ach_setup.php"; echo "Loading list of users to process"; $dbw = WikiFactory::db(DB_MASTER); $users = $dbw->select('ach_user_badges', array("DISTINCT user_id", 'wiki_id'), array('badge_type_id' => BADGE_LUCKYEDIT)); $usersCount = $users->numRows(); echo ": {$usersCount} user(s) to process\n\n"; if ($usersCount) { while ($currentUser = $dbw->fetchObject($users)) { echo "- Processing user {$currentUser->user_id} on wiki {$currentUser->wiki_id}: "; $badges = $dbw->selectField('ach_user_badges', array('COUNT(*) as cnt'), array('wiki_id' => $currentUser->wiki_id, 'user_id' => $currentUser->user_id, 'badge_type_id' => BADGE_LUCKYEDIT)); if ($badges > 1) { $score = $dbw->selectField('ach_user_score', array('score'), array('wiki_id' => $currentUser->wiki_id, 'user_id' => $currentUser->user_id)); echo "lucky edits {$badges}, original score {$score}"; $wgCityId = $currentUser->wiki_id; $srvc = new AchAwardingService(); $srvc->migration($currentUser->user_id); sleep(3); $score = $dbw->selectField('ach_user_score', array('score'), array('wiki_id' => $currentUser->wiki_id, 'user_id' => $currentUser->user_id)); echo ", new score {$score}.\n"; } else { echo "this user has only {$badges} lucky edits, skipping.\n"; } } echo "\nDone\n"; } else { echo "Nothing to do\n"; } $dbw->freeResult($users); echo "\n";
$dbw = wfGetDB(DB_MASTER, array(), $wgExternalSharedDB); $dbw->insert('ach_user_badges', $badgesToInsert); sleep(1); /* * CONUTERS */ $dbr = wfGetDB(DB_MASTER); $res = $dbr->query("select * from achievements_counters"); while ($row = $dbr->fetchObject($res)) { $counter = array(); $counter['user_id'] = $row->user_id; $counter['data'] = array(); $data = unserialize($row->data); foreach ($data as $counter_key => $counter_value) { if ($counter_key == 6) { $counter_value_new = array(1 => $counter_value['counter'], 2 => $counter_value['date']); } else { if ($counter_key == 13) { $counter_value_new = array(1 => $counter_value['counter'], 2 => $counter_value['date']); } else { $counter_value_new = $counter_value; } } $counter['data'][-1 * $counter_key] = $counter_value_new; } $userCountersService = new AchUserCountersService($counter['user_id']); $userCountersService->setCounters($counter['data']); $userCountersService->save(); $awardingService = new AchAwardingService(); $awardingService->migration($counter['user_id']); }
if ($usersCount) { echo "Removing the badges\n\n"; $dbw->delete('ach_user_badges', $queryBadgeFilters); echo "Recalculating user score and counters:\n\n"; while ($currentUser = $dbw->fetchObject($usersList)) { echo "\t* Processing user {$currentUser->user_id}\n"; $userCounters = $dbw->select('ach_user_counters', array('data'), array('user_id' => $currentUser->user_id)); if ($row = $dbw->fetchObject($userCounters)) { $counters = unserialize($row->data); foreach ($counters as $wikiId => $data) { $data[BADGE_BLOGPOST] = 1; $wgCityId = $wikiId; echo "\t\t- Recalculating user counters for Wiki ID {$wikiId}\n"; $userCountersService = new AchUserCountersService($currentUser->user_id); $userCountersService->setCounters($data); $userCountersService->save(); echo "\t\t- Recalculating user score for Wiki ID {$wikiId}\n\n"; $awardingService = new AchAwardingService(); $awardingService->migration($currentUser->user_id); } } else { echo '\\t\\tError, this user has no counters!'; } } $dbw->commit(); echo "\nDone\n"; } else { echo "Nothing to do\n"; } $dbw->freeResult($usersList); echo "\n";
$rows = $dbw->select('ach_user_badges', array("user_id", 'wiki_id', 'badge_type_id', 'badge_lap', 'badge_level', 'min(date) as first', 'count(badge_type_id) as dupes'), array(), __METHOD__, array("GROUP BY" => "wiki_id, user_id,badge_type_id, badge_lap, badge_level having dupes > 1")); $rowCount = $rows->numRows(); print_pre($dbw); echo ": {$rowCount} duplicate badges to process\n\n"; if ($rowCount) { while ($dupe = $dbw->fetchObject($rows)) { echo "- Processing dupe for user {$dupe->user_id} on wiki {$dupe->wiki_id}\n"; // Delete all but the first duplicate badge $criteria = array(); $criteria['user_id'] = $dupe->user_id; $criteria['wiki_id'] = $dupe->wiki_id; $criteria['badge_type_id'] = $dupe->badge_type_id; $criteria['badge_lap'] = $dupe->badge_lap; $criteria['badge_level'] = $dupe->badge_level; $criteria[] = "date > '{$dupe->first}'"; $dbw->delete('ach_user_badges', $criteria); $dbw->commit(); // wait for slave lag sleep(1); // set the global wgCityId so AchAwardingService does the right thing $wgCityId = $dupe->wiki_id; $srvc = new AchAwardingService(); // recalculate score $srvc->migration($dupe->user_id); } echo "\nDone\n"; } else { echo "Nothing to do\n"; } $dbw->freeResult($rows); echo ": {$rowCount} duplicate badges deleted.\n\n";