示例#1
0
 /**
  * Returns kills in json format according to the specified parameters
  *
  * @static
  * @param array $parameters
  * @return array
  */
 public static function getKills($parameters = array())
 {
     $ip = IP::get();
     $userAgent = @$_SERVER["HTTP_USER_AGENT"];
     Log::log("API Fetch: " . $_SERVER["REQUEST_URI"] . " (" . $ip . " / " . $userAgent . ")");
     $tables = array();
     $orWhereClauses = array();
     $andWhereClauses = array();
     Filters::buildFilters($tables, $orWhereClauses, $andWhereClauses, $parameters, true);
     $tables = array_unique($tables);
     //if (sizeof($tables) > 1) throw new Exception("Advanced multi-table searching is currently disabled");
     if (sizeof($tables) == 0) {
         $tables[] = "zz_participants p";
     }
     if (sizeof($tables) == 2) {
         $tablePrefix = "k";
     } else {
         $tablePrefix = substr($tables[0], strlen($tables[0]) - 1, 1);
     }
     $query = "select distinct {$tablePrefix}.killID from ";
     $query .= implode(" left join ", array_unique($tables));
     if (sizeof($tables) == 2) {
         $query .= " on (k.killID = p.killID) ";
     }
     if (sizeof($andWhereClauses) || sizeof($orWhereClauses)) {
         $query .= " where ";
         if (sizeof($orWhereClauses) > 0) {
             $andOr = array_key_exists("combined", $parameters) && $parameters["combined"] == true ? " or " : " and ";
             $query .= " ( " . implode($andOr, $orWhereClauses) . " ) ";
             if (sizeof($andWhereClauses)) {
                 $query .= " and ";
             }
         }
         if (sizeof($andWhereClauses)) {
             $query .= implode(" and ", $andWhereClauses);
         }
     }
     if (array_key_exists("limit", $parameters) && $parameters["limit"] < 200) {
         $limit = $parameters["limit"];
         $offset = 0;
     } else {
         $limit = 200;
         // Hardcoded, yes. This number should never change. -- Squizz
         $page = array_key_exists("page", $parameters) ? (int) $parameters["page"] : 1;
         $offset = ($page - 1) * $limit;
     }
     $orderDirection = array_key_exists("orderDirection", $parameters) ? $parameters["orderDirection"] : "desc";
     $query .= " order by {$tablePrefix}.dttm {$orderDirection} limit {$offset}, {$limit}";
     $cacheTime = 3600;
     $kills = Db::query($query, array(), $cacheTime);
     return self::getJSON($kills, $parameters);
 }
示例#2
0
 /**
  * Gets killmails
  *
  * @param $parameters an array of parameters to fetch mails for
  * @param $allTime gets all mails from the beginning of time or not
  * @return array
  */
 public static function getKills($parameters = array(), $allTime = true)
 {
     $tables = array();
     $orWhereClauses = array();
     $andWhereClauses = array();
     Filters::buildFilters($tables, $orWhereClauses, $andWhereClauses, $parameters, $allTime);
     $tables = array_unique($tables);
     if (sizeof($tables) == 0) {
         $tables[] = "zz_participants p";
     }
     if (sizeof($tables) == 2) {
         $tablePrefix = "k";
     } else {
         $tablePrefix = substr($tables[0], strlen($tables[0]) - 1, 1);
     }
     $query = "select distinct {$tablePrefix}.killID from ";
     $query .= implode(" left join ", array_unique($tables));
     if (sizeof($tables) == 2) {
         $query .= " on (k.killID = p.killID) ";
     }
     if (sizeof($andWhereClauses) || sizeof($orWhereClauses)) {
         $query .= " where ";
         if (sizeof($orWhereClauses) > 0) {
             $andOr = array_key_exists("combined", $parameters) && $parameters["combined"] == true ? " or " : " and ";
             $query .= " ( " . implode($andOr, $orWhereClauses) . " ) ";
             if (sizeof($andWhereClauses)) {
                 $query .= " and ";
             }
         }
         if (sizeof($andWhereClauses)) {
             $query .= implode(" and ", $andWhereClauses);
         }
     }
     $limit = array_key_exists("limit", $parameters) ? (int) $parameters["limit"] : 50;
     $page = array_key_exists("page", $parameters) ? (int) $parameters["page"] : 1;
     $offset = ($page - 1) * $limit;
     $orderBy = array_key_exists("orderBy", $parameters) ? $parameters["orderBy"] : "{$tablePrefix}.dttm";
     $orderDirection = array_key_exists("orderDirection", $parameters) ? $parameters["orderDirection"] : "desc";
     $query .= " order by {$orderBy} {$orderDirection} limit {$offset}, {$limit}";
     $cacheTime = array_key_exists("cacheTime", $parameters) ? (int) $parameters["cacheTime"] : 120;
     $cacheTime = max(120, $cacheTime);
     if (array_key_exists("log", $parameters)) {
         Db::log($query, array());
     }
     $kills = Db::query($query, array(), $cacheTime);
     $merged = self::getKillsDetails($kills);
     return $merged;
 }
示例#3
0
 /**
  * @param string $type
  * @param string $column
  * @param array $data
  * @param integer $id
  * @param array $parameters
  * @return array
  */
 private static function getSummary($type, $column, &$data, $id, $parameters = array())
 {
     $key = "summary:{$type}:{$column}:{$id}:" . json_encode($parameters);
     $mc = Cache::get($key);
     if ($mc) {
         return $mc;
     }
     $rank = Db::queryRow("select * from zz_ranks where type = :type and typeID = :id", array(":type" => $type, ":id" => $id), 300);
     $recentRank = Db::queryField("select overallRank from zz_ranks_recent where type = :type and typeID = :id", "overallRank", array(":type" => $type, ":id" => $id), 300);
     $idCount = 0;
     foreach ($parameters as $key => $value) {
         if (Util::endsWith($key, "ID")) {
             $idCount++;
         }
     }
     if (false) {
         //isset($parameters["solo"]) || $idCount >= 2) {
         $rank = $recentRank = array();
         $tables = array();
         $whereClauses = array();
         if (!isset($parameters["kills"]) && !isset($parameters["losses"])) {
             $parameters["mixed"] = true;
         }
         Filters::buildFilters($tables, $whereClauses, $whereClauses, $parameters, true);
         $whereStatement = implode(" and ", $whereClauses);
         $query = "select groupID, sum(if(isVictim, 0, 1)) destroyed, sum(if(isVictim, 0, total_price)) iskDestroyed, sum(if(isVictim, 0, points)) pointsDestroyed, sum(if(isVictim, 1, 0)) lost, sum(if(isVictim, total_price, 0)) iskLost, sum(if(isVictim, points, 0)) pointsLost from (select vGroupID groupID, isVictim, total_price, points from zz_participants p where {$whereStatement} group by killID) as foo group by groupID";
         $stats = Db::query($query);
     } else {
         if ($type == "system" || $type == "region") {
             $stats = Db::query("select groupID, lost destroyed, 0 lost, pointsLost pointsDestroyed, 0 pointsLost, iskLost iskDestroyed, 0 iskLost from zz_stats where type='{$type}' and typeID = {$id}", array(":id" => $id), 300);
         } else {
             $stats = Db::query("select groupID, destroyed, lost, pointsDestroyed, pointsLost, iskDestroyed, iskLost from zz_stats where type='{$type}' and typeID = :id", array(":id" => $id), 0);
         }
     }
     $infoStats = array();
     $data["shipsDestroyed"] = 0;
     $data["shipsLost"] = 0;
     $data["pointsDestroyed"] = 0;
     $data["pointsLost"] = 0;
     $data["iskDestroyed"] = 0;
     $data["iskLost"] = 0;
     foreach ($stats as $stat) {
         $infoStat = Info::addInfo($stat);
         if ($infoStat["groupID"] == 0) {
             $infoStat["groupName"] = "Unknown";
         }
         $infoStats[$infoStat["groupName"]] = $infoStat;
         $data["shipsDestroyed"] += $infoStat["destroyed"];
         $data["shipsLost"] += $infoStat["lost"];
         $data["iskDestroyed"] += $infoStat["iskDestroyed"];
         $data["iskLost"] += $infoStat["iskLost"];
         $data["pointsDestroyed"] += $infoStat["pointsDestroyed"];
         $data["pointsLost"] += $infoStat["pointsLost"];
     }
     unset($stats);
     ksort($infoStats);
     $data["stats"] = $infoStats;
     if ($rank != null && $recentRank != null) {
         $rank["recentRank"] = $recentRank;
     }
     if ($rank != null) {
         $data["ranks"] = $rank;
     }
     Cache::set($key, $data, 300);
     return $data;
 }