/** * 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); }
/** * 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; }
/** * @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; }