public static function RefreshRanks($data) { if (isset($data['dayid'])) { $dayid = $data['dayid']; } elseif (isset($data['date'])) { $date = $data['date']; $lb = new Leaderboard(); $dayid = $lb->getLeaderboardId($date)[0]; } if ($dayid == 0) { return false; } if (isset($data['nodamage'])) { self::FlagNoDamage($dayid); } if (isset($data['rush'])) { self::Flag2Fast2Furious($dayid, $data['minutes']); } self::$db = Application::$db; // recompute players hax values /*$stmt = self::$db->query(" UPDATE players AS p INNER JOIN ( SELECT steamid, COUNT(*) AS hax FROM scores WHERE hidden = 1 GROUP BY steamid ) h USING(steamid) SET p.hax = h.hax, p.last_updated = p.last_updated"); */ // recompute score ranks $stmt = self::$db->query("SET @rank = 0"); $stmt = self::$db->prepare("\r\n UPDATE scores AS s\r\n JOIN (\r\n SELECT hash,\r\n CASE\r\n WHEN (hax < 3 AND\r\n hidden != 1 AND\r\n hidden != 3)\r\n THEN (@rank := @rank+1)\r\n ELSE 999999\r\n END AS rank\r\n FROM scores\r\n JOIN players AS p USING (steamid)\r\n WHERE dayid = :dayid\r\n ORDER BY score DESC\r\n ) AS r USING (hash)\r\n SET s.rank = r.rank,\r\n s.last_updated = s.last_updated"); $stmt->execute(array(':dayid' => $dayid)); // recompute time ranks $stmt = self::$db->query("SET @rank = 0"); $stmt = self::$db->prepare("\r\n UPDATE times AS t\r\n JOIN (\r\n SELECT hash,\r\n CASE\r\n WHEN (hax < 3 AND\r\n hidden != 1 AND\r\n hidden != 3)\r\n THEN (@rank := @rank+1)\r\n ELSE 999999\r\n END AS rank\r\n FROM times\r\n JOIN players AS p USING (steamid)\r\n WHERE (dayid = :dayid)\r\n ORDER BY floor DESC,\r\n time ASC\r\n ) AS r USING (hash)\r\n SET t.rank = r.rank"); $stmt->execute(array(':dayid' => $dayid)); }