Ejemplo n.º 1
0
 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));
 }