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";