'failure')); die(); } } else { $Details = 'all'; } // defaults to 10 (duh) $Limit = isset($_GET['limit']) ? intval($_GET['limit']) : 10; $Limit = in_array($Limit, array(10, 100, 250)) ? $Limit : 10; $WhereSum = (empty($Where)) ? '' : md5($Where); $BaseQuery = "SELECT t.ID, g.ID, g.Name, g.CategoryID, g.wikiImage, g.TagList, t.Format, t.Encoding, t.Media, t.Scene, t.HasLog, t.HasCue, t.LogScore, t.RemasterYear, g.Year, t.RemasterTitle, t.Snatched, t.Seeders, t.Leechers, ((t.Size * t.Snatched) + (t.Size * 0.5 * t.Leechers)) AS Data, g.ReleaseType, t.Size FROM torrents AS t LEFT JOIN torrents_group AS g ON g.ID = t.GroupID "; $OuterResults = array(); if ($Details == 'all' || $Details == 'day') { if (!$TopTorrentsActiveLastDay = $Cache->get_value('top10tor_day_'.$Limit.$WhereSum)) { $DayAgo = time_minus(86400); $Query = $BaseQuery.' WHERE t.Seeders>0 AND '; if (!empty($Where)) { $Query .= $Where.' AND '; } $Query .= " t.Time>'$DayAgo' ORDER BY (t.Seeders + t.Leechers) DESC LIMIT $Limit;"; $DB->query($Query); $TopTorrentsActiveLastDay = $DB->to_array(); // TODO: MYSQLI_NUM to avoid duplicate data in the cache (does that break something with generate_torrent_json?) $Cache->cache_value('top10tor_day_'.$Limit.$WhereSum,$TopTorrentsActiveLastDay,3600*2); } $OuterResults[] = generate_torrent_json('Most Active Torrents Uploaded in the Past Day', 'day', $TopTorrentsActiveLastDay, $Limit); } if ($Details == 'all' || $Details == 'week') { if (!$TopTorrentsActiveLastWeek = $Cache->get_value('top10tor_week_'.$Limit.$WhereSum)) { $WeekAgo = time_minus(604800); $Query = $BaseQuery.' WHERE '; if (!empty($Where)) { $Query .= $Where.' AND '; } $Query .= " t.Time>'$WeekAgo' ORDER BY (t.Seeders + t.Leechers) DESC LIMIT $Limit;"; $DB->query($Query); $TopTorrentsActiveLastWeek = $DB->to_array(); $Cache->cache_value('top10tor_week_'.$Limit.$WhereSum,$TopTorrentsActiveLastWeek,3600*6); } $OuterResults[] = generate_torrent_json('Most Active Torrents Uploaded in the Past Week', 'week', $TopTorrentsActiveLastWeek, $Limit); } if ($Details == 'all' || $Details == 'overall') { if (!$TopTorrentsActiveAllTime = $Cache->get_value("top10tor_overall_$Limit$WhereSum")) { // IMPORTANT NOTE - we use WHERE t.Seeders>500 in order to speed up this query. You should remove it! $Query = $BaseQuery; if (!empty($Where)) { $Query .= " WHERE $Where"; } elseif ($Details == 'all') { $Query .= " WHERE t.Seeders > 500 "; } $Query .= " ORDER BY (t.Seeders + t.Leechers) DESC LIMIT $Limit;"; $DB->query($Query); $TopTorrentsActiveAllTime = $DB->to_array(); $Cache->cache_value("top10tor_overall_$Limit$WhereSum", $TopTorrentsActiveAllTime, 3600 * 6); } $OuterResults[] = generate_torrent_json('Most Active Torrents of All Time', 'overall', $TopTorrentsActiveAllTime, $Limit); } if (($Details == 'all' || $Details == 'snatched') && empty($Where)) { if (!$TopTorrentsSnatched = $Cache->get_value("top10tor_snatched_$Limit$WhereSum")) { $Query = $BaseQuery; $Query .= " ORDER BY t.Snatched DESC LIMIT $Limit;"; $DB->query($Query); $TopTorrentsSnatched = $DB->to_array(); $Cache->cache_value("top10tor_snatched_$Limit$WhereSum", $TopTorrentsSnatched, 3600 * 6); } $OuterResults[] = generate_torrent_json('Most Snatched Torrents', 'snatched', $TopTorrentsSnatched, $Limit); } if (($Details == 'all' || $Details == 'data') && empty($Where)) { if (!$TopTorrentsTransferred = $Cache->get_value("top10tor_data_$Limit$WhereSum")) { // IMPORTANT NOTE - we use WHERE t.Snatched>100 in order to speed up this query. You should remove it! $Query = $BaseQuery; if ($Details == 'all') { $Query .= " WHERE t.Snatched > 100 "; } $Query .= " ORDER BY Data DESC LIMIT $Limit;"; $DB->query($Query); $TopTorrentsTransferred = $DB->to_array(); $Cache->cache_value("top10tor_data_$Limit$WhereSum", $TopTorrentsTransferred, 3600 * 6); } $OuterResults[] = generate_torrent_json('Most Data Transferred Torrents', 'data', $TopTorrentsTransferred, $Limit); } if (($Details == 'all' || $Details == 'seeded') && empty($Where)) { if (!$TopTorrentsSeeded = $Cache->get_value("top10tor_seeded_$Limit$WhereSum")) { $Query = $BaseQuery." ORDER BY t.Seeders DESC LIMIT $Limit;"; $DB->query($Query); $TopTorrentsSeeded = $DB->to_array(); $Cache->cache_value("top10tor_seeded_$Limit$WhereSum", $TopTorrentsSeeded, 3600 * 6); } $OuterResults[] = generate_torrent_json('Best Seeded Torrents', 'seeded', $TopTorrentsSeeded, $Limit); } print json_encode( array( 'status' => 'success', 'response' => $OuterResults ) ); function generate_torrent_json($Caption, $Tag, $Details, $Limit) { global $LoggedUser, $Categories; $results = array(); foreach ($Details as $Detail) { list($TorrentID, $GroupID, $GroupName, $GroupCategoryID, $WikiImage, $TorrentTags, $Format, $Encoding, $Media, $Scene, $HasLog, $HasCue, $LogScore, $Year, $GroupYear, $RemasterTitle, $Snatched, $Seeders, $Leechers, $Data, $ReleaseType, $Size) = $Detail; $Artist = Artists::display_artists(Artists::get_artist($GroupID), false, true); $TruncArtist = substr($Artist, 0, strlen($Artist) - 3); $TagList = array(); if ($TorrentTags != '') { $TorrentTags = explode(' ', $TorrentTags); foreach ($TorrentTags as $TagKey => $TagName) { $TagName = str_replace('_', '.', $TagName); $TagList[] = $TagName; } } // Append to the existing array. $results[] = array( 'torrentId' => (int)$TorrentID, 'groupId' => (int)$GroupID, 'artist' => $TruncArtist, 'groupName' => $GroupName, 'groupCategory' => (int)$GroupCategory, 'groupYear' => (int)$GroupYear, 'remasterTitle' => $RemasterTitle, 'format' => $Format, 'encoding' => $Encoding, 'hasLog' => $HasLog == 1, 'hasCue' => $HasCue == 1, 'media' => $Media, 'scene' => $Scene == 1, 'year' => (int)$Year, 'tags' => $TagList, 'snatched' => (int)$Snatched, 'seeders' => (int)$Seeders, 'leechers' => (int)$Leechers, 'data' => (int)$Data, 'size' => (int)$Size, ); } return array( 'caption' => $Caption, 'tag' => $Tag, 'limit' => (int)$Limit, 'results' => $results ); } ?>