diff --git a/classes/class_artists.php b/classes/class_artists.php index a04f7685..3500eccf 100644 --- a/classes/class_artists.php +++ b/classes/class_artists.php @@ -95,16 +95,15 @@ public static function display_artists($Artists, $MakeLink = true, $IncludeHyphe $ampersand = ($Escape) ? ' & ' : ' & '; $link = ''; - $MainArtists = $Artists[1]; - $Guests = $Artists[2]; - $Composers = $Artists[4]; - $Conductors = $Artists[5]; - $DJs = $Artists[6]; + $MainArtists = isset($Artists[1]) ? $Artists[1] : null; + $Guests = isset($Artists[2]) ? $Artists[2] : null; + $Composers = isset($Artists[4]) ? $Artists[4] : null; + $Conductors = isset($Artists[5]) ? $Artists[5] : null; + $DJs = isset($Artists[6]) ? $Artists[6] : null; if ((count($MainArtists) + count($Conductors) + count($DJs) == 0) && (count($Composers) == 0)) { return ''; } - // Various Composers is not needed and is ugly and should die switch(count($Composers)) { case 0: @@ -121,7 +120,7 @@ public static function display_artists($Artists, $MakeLink = true, $IncludeHyphe $link .= ' performed by '; } - $ComposerStr .= $link; + $ComposerStr = $link; switch(count($MainArtists)) { case 0: @@ -182,7 +181,6 @@ public static function display_artists($Artists, $MakeLink = true, $IncludeHyphe default : $link = 'Various DJs'; } - return $link.($IncludeHyphen?' - ':''); } else { return ''; diff --git a/classes/class_torrents.php b/classes/class_torrents.php index b3b60a1e..6760fccc 100644 --- a/classes/class_torrents.php +++ b/classes/class_torrents.php @@ -24,7 +24,7 @@ class Torrents { * GroupID, Media, Format, Encoding, RemasterYear, Remastered, * RemasterTitle, RemasterRecordLabel, RemasterCatalogueNumber, Scene, * HasLog, HasCue, LogScore, FileCount, FreeTorrent, Size, Leechers, - * Seeders, Snatched, Time, HasFile + * Seeders, Snatched, Time, HasFile, PersonalFL * } * } * ExtendedArtists => { @@ -57,7 +57,7 @@ public static function get_groups($GroupIDs, $Return = true, $GetArtists = true, and anywhere else the get_groups function is used. */ - if (count($NotFound)>0) { + if (count($NotFound) > 0) { $DB->query("SELECT g.ID, g.Name, g.Year, g.RecordLabel, g.CatalogueNumber, g.TagList, g.ReleaseType, g.VanityHouse FROM torrents_group AS g WHERE g.ID IN ($IDs)"); @@ -69,6 +69,13 @@ public static function get_groups($GroupIDs, $Return = true, $GetArtists = true, $Found[$Group['ID']]['Artists'] = array(); } + // Orphan torrents. There shouldn't ever be any + if (count($NotFound) > 0) { + foreach (array_keys($NotFound) as $GroupID) { + unset($Found[$GroupID]); + } + } + if ($Torrents) { $DB->query("SELECT ID, GroupID, Media, Format, Encoding, RemasterYear, Remastered, RemasterTitle, @@ -99,21 +106,23 @@ public static function get_groups($GroupIDs, $Return = true, $GetArtists = true, } if ($Return) { // If we're interested in the data, and not just caching it - foreach ($Artists as $GroupID=>$Data) { + foreach ($Artists as $GroupID => $Data) { if (array_key_exists(1, $Data) || array_key_exists(4, $Data) || array_key_exists(6, $Data)) { - $Found[$GroupID]['Artists']=$Data[1]; // Only use main artists (legacy) - $Found[$GroupID]['ExtendedArtists'][1]=$Data[1]; - $Found[$GroupID]['ExtendedArtists'][2]=$Data[2]; - $Found[$GroupID]['ExtendedArtists'][3]=$Data[3]; - $Found[$GroupID]['ExtendedArtists'][4]=$Data[4]; - $Found[$GroupID]['ExtendedArtists'][5]=$Data[5]; - $Found[$GroupID]['ExtendedArtists'][6]=$Data[6]; + $Found[$GroupID]['Artists'] = isset($Data[1]) ? $Data[1] : null; // Only use main artists (legacy) + for ($i = 1; $i <= 6; $i++) { + $Found[$GroupID]['ExtendedArtists'][$i] = isset($Data[$i]) ? $Data[$i] : null; + } } else { $Found[$GroupID]['ExtendedArtists'] = false; } } - + // Fetch all user specific torrent properties + foreach ($Found as &$Group) { + if (!empty($Group['Torrents'])) { + array_walk($Group['Torrents'], 'self::torrent_properties'); + } + } $Matches = array('matches'=>$Found, 'notfound'=>array_flip($NotFound)); return $Matches; @@ -121,6 +130,17 @@ public static function get_groups($GroupIDs, $Return = true, $GetArtists = true, } + /** + * Supplements a torrent array with information that only concerns certain users and therefore cannot be cached + * + * @param array $Torrent torrent array preferably in the form used by Torrents::get_groups() or get_group_info() + * @param int $TorrentID + */ + public static function torrent_properties(&$Torrent, $TorrentID) { + $Torrent['PersonalFL'] = empty($Torrent['FreeTorrent']) && self::has_token($TorrentID); + } + + /* * Write to the group log. * @@ -417,7 +437,7 @@ public static function torrent_info($Data, $ShowMedia = false, $ShowEdition = fa } if ($Data['FreeTorrent'] == '1') { $Info[]='Freeleech!'; } if ($Data['FreeTorrent'] == '2') { $Info[]='Neutral Leech!'; } - if ($Data['PersonalFL'] == 1) { $Info[]='Personal Freeleech!'; } + if ($Data['PersonalFL']) { $Info[]='Personal Freeleech!'; } return implode(' / ', $Info); } @@ -477,5 +497,31 @@ public static function freeleech_groups($GroupIDs, $FreeNeutral = 1, $FreeLeechT } } + /** + * Check if the logged in user has an active freeleech token + * + * @param int $TorrentID + * @return true if an active token exists + */ + + public static function has_token($TorrentID) { + global $DB, $Cache, $LoggedUser; + if (empty($LoggedUser) || empty($LoggedUser['ID'])) { + return false; + } + + static $TokenTorrents; + $UserID = $LoggedUser['ID']; + if (!isset($TokenTorrents)) { + $TokenTorrents = $Cache->get_value('users_tokens_'.$UserID); + if ($TokenTorrents === false) { + $DB->query("SELECT TorrentID FROM users_freeleeches WHERE UserID=$UserID AND Expired=0"); + $TokenTorrents = array_fill_keys($DB->collect('TorrentID', false), true); + $Cache->cache_value('users_tokens_'.$UserID, $TokenTorrents); + } + } + return isset($TokenTorrents[$TorrentID]); + } + } ?> diff --git a/classes/class_users.php b/classes/class_users.php index 559e987a..24831490 100644 --- a/classes/class_users.php +++ b/classes/class_users.php @@ -6,7 +6,7 @@ class Users { * @return array ($Classes, $ClassLevels) */ public static function get_classes() { - global $Cache, $DB, $Debug, $UserClassesHidePMs; + global $Cache, $DB, $Debug; // Get permissions list($Classes, $ClassLevels) = $Cache->get_value('classes'); if (!$Classes || !$ClassLevels) { @@ -120,7 +120,6 @@ public static function user_info($UserID) { */ public static function user_heavy_info($UserID) { global $DB, $Cache; - //global $Debug; $HeavyInfo = $Cache->get_value('user_info_heavy_'.$UserID); @@ -176,16 +175,13 @@ public static function user_heavy_info($UserID) { $PermittedForums = array(); } unset($HeavyInfo['PermittedForums']); - //$Debug->log_var($PermittedForums, 'PermittedForums - User'); $DB->query("SELECT PermissionID FROM users_levels WHERE UserID = $UserID"); $PermIDs = $DB->collect('PermissionID'); foreach ($PermIDs AS $PermID) { $Perms = Permissions::get_permissions($PermID); if (!empty($Perms['PermittedForums'])) { - //$Debug->log_var("'".$Perms['PermittedForums']."'", "PermittedForums - Perm $PermID"); $PermittedForums = array_merge($PermittedForums, array_map('trim', explode(',',$Perms['PermittedForums']))); - //$Debug->log_var($PermittedForums, "PermittedForums - After Perm $PermID"); } } $Perms = Permissions::get_permissions($HeavyInfo['PermissionID']); @@ -193,7 +189,6 @@ public static function user_heavy_info($UserID) { if (!empty($Perms['PermittedForums'])) { $PermittedForums = array_merge($PermittedForums, array_map('trim', explode(',',$Perms['PermittedForums']))); } - //$Debug->log_var($PermittedForums, 'PermittedForums - Done'); if (!empty($PermittedForums) || !empty($RestrictedForums)) { $HeavyInfo['CustomForums'] = array(); @@ -206,7 +201,6 @@ public static function user_heavy_info($UserID) { } else { $HeavyInfo['CustomForums'] = null; } - //$Debug->log_var($HeavyInfo['CustomForums'], 'CustomForums'); $HeavyInfo['SiteOptions'] = unserialize($HeavyInfo['SiteOptions']); if (!empty($HeavyInfo['SiteOptions'])) { diff --git a/sections/ajax/browse.php b/sections/ajax/browse.php index c9aa0d6e..a42ff30e 100644 --- a/sections/ajax/browse.php +++ b/sections/ajax/browse.php @@ -15,13 +15,6 @@ function header_link($SortKey,$DefaultWay="desc") { return "torrents.php?order_way=".$NewWay."&order_by=".$SortKey."&".Format::get_url(array('order_way','order_by')); } -$TokenTorrents = $Cache->get_value('users_tokens_'.$UserID); -if (empty($TokenTorrents)) { - $DB->query("SELECT TorrentID FROM users_freeleeches WHERE UserID=$UserID AND Expired=FALSE"); - $TokenTorrents = $DB->collect('TorrentID'); - $Cache->cache_value('users_tokens_'.$UserID, $TokenTorrents); -} - // Setting default search options if(!empty($_GET['setdefault'])) { $UnsetList = array('page','setdefault'); @@ -490,10 +483,6 @@ function header_link($SortKey,$DefaultWay="desc") { $FirstUnknown = !isset($FirstUnknown); } - if (in_array($TorrentID, $TokenTorrents) && empty($Torrent['FreeTorrent'])) { - $Data['PersonalFL'] = 1; - } - if($CategoryID == 1 && ($Data['RemasterTitle'] != $LastRemasterTitle || $Data['RemasterYear'] != $LastRemasterYear || $Data['RemasterRecordLabel'] != $LastRemasterRecordLabel || $Data['RemasterCatalogueNumber'] != $LastRemasterCatalogueNumber) || $FirstUnknown || $Data['Media'] != $LastMedia) { $EditionID++; @@ -548,10 +537,10 @@ function header_link($SortKey,$DefaultWay="desc") { 'leechers' => (int) $Data['Leechers'], 'isFreeleech' => $Data['FreeTorrent'] == '1', 'isNeutralLeech' => $Data['FreeTorrent'] == '2', - 'isPersonalFreeleech' => in_array($TorrentID, $TokenTorrents), + 'isPersonalFreeleech' => $Data['PersonalFL'], 'canUseToken' => ($LoggedUser['FLTokens'] > 0) && $Data['HasFile'] && ($Data['Size'] < 1073741824) - && !in_array($TorrentID, $TokenTorrents) + && !$Data['PersonalFL'] && empty($Data['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1') ); } @@ -592,10 +581,10 @@ function header_link($SortKey,$DefaultWay="desc") { 'leechers' => (int) $TotalLeechers, 'isFreeleech' => $Data['FreeTorrent'] == '1', 'isNeutralLeech' => $Data['FreeTorrent'] == '2', - 'isPersonalFreeleech' => in_array($TorrentID, $TokenTorrents), + 'isPersonalFreeleech' => $Data['PersonalFL'], 'canUseToken' => ($LoggedUser['FLTokens'] > 0) && $Data['HasFile'] && ($Data['Size'] < 1073741824) - && !in_array($TorrentID, $TokenTorrents) + && !$Data['PersonalFL'] && empty($Data['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1') ); } diff --git a/sections/ajax/notifications.php b/sections/ajax/notifications.php index 835acf0c..e83f04c3 100644 --- a/sections/ajax/notifications.php +++ b/sections/ajax/notifications.php @@ -14,13 +14,6 @@ define('NOTIFICATIONS_PER_PAGE', 50); list($Page,$Limit) = Format::page_limit(NOTIFICATIONS_PER_PAGE); -$TokenTorrents = $Cache->get_value('users_tokens_'.$LoggedUser['ID']); -if (empty($TokenTorrents)) { - $DB->query("SELECT TorrentID FROM users_freeleeches WHERE UserID=$LoggedUser[ID] AND Expired=FALSE"); - $TokenTorrents = $DB->collect('TorrentID'); - $Cache->cache_value('users_tokens_'.$LoggedUser['ID'], $TokenTorrents); -} - $Results = $DB->query("SELECT SQL_CALC_FOUND_ROWS unt.TorrentID, unt.UnRead, unt.FilterID, unf.Label, t.GroupID FROM users_notify_torrents AS unt JOIN torrents AS t ON t.ID = unt.TorrentID diff --git a/sections/ajax/torrentgroup.php b/sections/ajax/torrentgroup.php index 2c8ebaf6..6cd11bbf 100644 --- a/sections/ajax/torrentgroup.php +++ b/sections/ajax/torrentgroup.php @@ -14,11 +14,7 @@ if ($GroupID == 0) { error('bad id parameter', true); } $TorrentCache = get_group_info($GroupID, true, 0); - -// http://stackoverflow.com/questions/4260086/php-how-to-use-array-filter-to-filter-array-keys -function filter_by_key($input, $keys) { return array_intersect_key($input, array_flip($keys)); } - -$TorrentDetails = filter_by_key($TorrentCache[0][0], $GroupAllowed); +list($TorrentDetails, $TorrentList) = $TorrentCache; $ArtistForm = Artists::get_artist($GroupID); if($TorrentDetails['CategoryID'] == 0) { @@ -57,10 +53,7 @@ function filter_by_key($input, $keys) { return array_intersect_key($input, array 'vanityHouse' => $TorrentDetails['VanityHouse'] == 1, 'musicInfo' => $JsonMusicInfo ); -$TorrentList = array(); -foreach ($TorrentCache[1] as $Torrent) { - $TorrentList[] = filter_by_key($Torrent, $TorrentAllowed); -} + $JsonTorrentList = array(); foreach ($TorrentList as $Torrent) { $JsonTorrentList[] = array( diff --git a/sections/artist/artist.php b/sections/artist/artist.php index 2a3a0120..528fdd29 100644 --- a/sections/artist/artist.php +++ b/sections/artist/artist.php @@ -61,13 +61,6 @@ function compare($X, $Y){ list($Name, $Image, $Body, $VanityHouseArtist) = $DB->next_record(MYSQLI_NUM, array(0)); } -$TokenTorrents = $Cache->get_value('users_tokens_'.$UserID); -if (empty($TokenTorrents)) { - $DB->query("SELECT TorrentID FROM users_freeleeches WHERE UserID=$UserID AND Expired=FALSE"); - $TokenTorrents = $DB->collect('TorrentID'); - $Cache->cache_value('users_tokens_'.$UserID, $TokenTorrents); -} - //----------------- Build list and get stats ob_start(); @@ -388,10 +381,6 @@ function compare($X, $Y){ $FirstUnknown = !isset($FirstUnknown); } - if (in_array($TorrentID, $TokenTorrents) && empty($Torrent['FreeTorrent'])) { - $Torrent['PersonalFL'] = 1; - } - if($Torrent['RemasterTitle'] != $LastRemasterTitle || $Torrent['RemasterYear'] != $LastRemasterYear || $Torrent['RemasterRecordLabel'] != $LastRemasterRecordLabel || $Torrent['RemasterCatalogueNumber'] != $LastRemasterCatalogueNumber || $FirstUnknown || $Torrent['Media'] != $LastMedia) { @@ -438,7 +427,7 @@ function compare($X, $Y){ [ 0) && ($Torrent['Size'] < 1073741824) - && !in_array($TorrentID, $TokenTorrents) && empty($Torrent['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> + && !$Torrent['PersonalFL'] && empty($Torrent['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> | FL ] diff --git a/sections/better/transcode.php b/sections/better/transcode.php index 59b7e33f..76db4957 100644 --- a/sections/better/transcode.php +++ b/sections/better/transcode.php @@ -17,7 +17,7 @@ $Query = '@format FLAC @encoding '.$List; if(!empty($_GET['search'])) { - $Query.=' @(groupname,artistname,yearfulltext) '.$SS->escape_string($_GET['search']); + $Query.=' @(groupname,artistname,yearfulltext,taglist) '.$SS->escape_string($_GET['search']); } $SS->SetFilter('logscore', array(100)); diff --git a/sections/bookmarks/torrents.php b/sections/bookmarks/torrents.php index d1658a1c..1381a07b 100644 --- a/sections/bookmarks/torrents.php +++ b/sections/bookmarks/torrents.php @@ -50,13 +50,6 @@ function compare($X, $Y){ } } -$TokenTorrents = $Cache->get_value('users_tokens_'.$UserID); -if (empty($TokenTorrents)) { - $DB->query("SELECT TorrentID FROM users_freeleeches WHERE UserID=$UserID AND Expired=FALSE"); - $TokenTorrents = $DB->collect('TorrentID'); - $Cache->cache_value('users_tokens_'.$UserID, $TokenTorrents); -} - $Title = ($Sneaky)?"$Username's bookmarked torrents":'Your bookmarked torrents'; // Loop through the result set, building up $Collage and $TorrentTable @@ -156,10 +149,6 @@ function compare($X, $Y){ $FirstUnknown = !isset($FirstUnknown); } - if (in_array($TorrentID, $TokenTorrents) && empty($Torrent['FreeTorrent'])) { - $Torrent['PersonalFL'] = 1; - } - if($Torrent['RemasterTitle'] != $LastRemasterTitle || $Torrent['RemasterYear'] != $LastRemasterYear || $Torrent['RemasterRecordLabel'] != $LastRemasterRecordLabel || $Torrent['RemasterCatalogueNumber'] != $LastRemasterCatalogueNumber || $FirstUnknown || $Torrent['Media'] != $LastMedia) { @@ -205,7 +194,7 @@ function compare($X, $Y){ [ DL 0) && ($Torrent['Size'] < 1073741824) - && !in_array($TorrentID, $TokenTorrents) && empty($Torrent['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> + && !$Torrent['PersonalFL'] && empty($Torrent['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> | FL | RP ] @@ -225,10 +214,10 @@ function compare($X, $Y){ list($TorrentID, $Torrent) = each($Torrents); $DisplayName = ''.$GroupName.''; - + if(!empty($Torrent['FreeTorrent'])) { - $DisplayName .=' Freeleech!'; - } elseif(in_array($TorrentID, $TokenTorrents)) { + $DisplayName .=' Freeleech!'; + } elseif($Torrent['PersonalFL']) { $DisplayName .= 'Personal Freeleech!'; } ?> @@ -242,7 +231,7 @@ function compare($X, $Y){ [ DL 0) && ($Torrent['Size'] < 1073741824) - && !in_array($TorrentID, $TokenTorrents) && empty($Torrent['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> + && !$Torrent['PersonalFL'] && empty($Torrent['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> | FL | RP ] diff --git a/sections/collages/collage.php b/sections/collages/collage.php index ee3596d1..55aae219 100644 --- a/sections/collages/collage.php +++ b/sections/collages/collage.php @@ -16,13 +16,6 @@ function compare($X, $Y){ $CollageID = $_GET['id']; if(!is_number($CollageID)) { error(0); } -$TokenTorrents = $Cache->get_value('users_tokens_'.$UserID); -if (empty($TokenTorrents)) { - $DB->query("SELECT TorrentID FROM users_freeleeches WHERE UserID=$UserID AND Expired=FALSE"); - $TokenTorrents = $DB->collect('TorrentID'); - $Cache->cache_value('users_tokens_'.$UserID, $TokenTorrents); -} - $Data = $Cache->get_value('collage_'.$CollageID); if($Data) { @@ -202,10 +195,6 @@ function compare($X, $Y){ $FirstUnknown = !isset($FirstUnknown); } - if (in_array($TorrentID, $TokenTorrents) && empty($Torrent['FreeTorrent'])) { - $Torrent['PersonalFL'] = 1; - } - if($Torrent['RemasterTitle'] != $LastRemasterTitle || $Torrent['RemasterYear'] != $LastRemasterYear || $Torrent['RemasterRecordLabel'] != $LastRemasterRecordLabel || $Torrent['RemasterCatalogueNumber'] != $LastRemasterCatalogueNumber || $FirstUnknown || $Torrent['Media'] != $LastMedia) { $EditionID++; @@ -250,7 +239,7 @@ function compare($X, $Y){ [ DL 0) && ($Torrent['Size'] < 1073741824) - && !in_array($TorrentID, $TokenTorrents) && empty($Torrent['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> + && !$Torrent['PersonalFL'] && empty($Torrent['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> | FL | RP ] @@ -270,10 +259,10 @@ function compare($X, $Y){ list($TorrentID, $Torrent) = each($Torrents); $DisplayName = ''.$GroupName.''; - + if(!empty($Torrent['FreeTorrent'])) { - $DisplayName .=' Freeleech!'; - } elseif(in_array($TorrentID, $TokenTorrents)) { + $DisplayName .=' Freeleech!'; + } elseif($Torrent['PersonalFL']) { $DisplayName .= $AddExtra.'Personal Freeleech!'; } ?> @@ -287,7 +276,7 @@ function compare($X, $Y){ [ DL 0) && ($Torrent['Size'] < 1073741824) - && !in_array($TorrentID, $TokenTorrents) && empty($Torrent['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> + && !$Torrent['PersonalFL'] && empty($Torrent['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> | FL | RP ] diff --git a/sections/index/private.php b/sections/index/private.php index 3b830467..3ba4cfc9 100644 --- a/sections/index/private.php +++ b/sections/index/private.php @@ -288,7 +288,7 @@

    - $Answer) { if ($TotalVotes > 0) { $Ratio = $Votes[$i]/$MaxVotes; $Percent = $Votes[$i]/$TotalVotes; @@ -312,7 +312,7 @@ - + $Answer) { ?>
    diff --git a/sections/torrents/browse2.php b/sections/torrents/browse2.php index 20e962ed..fad3bfea 100644 --- a/sections/torrents/browse2.php +++ b/sections/torrents/browse2.php @@ -35,13 +35,6 @@ function header_link($SortKey,$DefaultWay="desc") { return "torrents.php?order_way=".$NewWay."&order_by=".$SortKey."&".Format::get_url(array('order_way','order_by')); } -$TokenTorrents = $Cache->get_value('users_tokens_'.$UserID); -if (empty($TokenTorrents)) { - $DB->query("SELECT TorrentID FROM users_freeleeches WHERE UserID=$UserID AND Expired=FALSE"); - $TokenTorrents = $DB->collect('TorrentID'); - $Cache->cache_value('users_tokens_'.$UserID, $TokenTorrents); -} - // Search by infohash if(!empty($_GET['searchstr']) || !empty($_GET['groupname'])) { if(!empty($_GET['searchstr'])) { @@ -126,6 +119,7 @@ function header_link($SortKey,$DefaultWay="desc") { } // Collect all entered search terms to find out whether to enable the NOT operator +$SearchWords = array(); foreach(array('artistname','groupname', 'recordlabel', 'cataloguenumber', 'remastertitle', 'remasteryear', 'remasterrecordlabel', 'remastercataloguenumber', 'encoding', 'format', 'media', 'taglist') as $Search) { @@ -749,8 +743,11 @@ function header_link($SortKey,$DefaultWay="desc") { $Data) { - list($Artists, $GroupCatalogueNumber, $ExtendedArtists, $GroupID2, $GroupName, $GroupRecordLabel, $ReleaseType, $TagList, $Torrents, $GroupVanityHouse, $GroupYear, $CategoryID, $FreeTorrent, $HasCue, $HasLog, $TotalLeechers, $LogScore, $ReleaseType, $ReleaseType, $TotalSeeders, $MaxSize, $TotalSnatched, $GroupTime) = array_values($Data); +foreach($Results as $GroupID => $Data) { + list($Artists, $GroupCatalogueNumber, $ExtendedArtists, $GroupID2, $GroupName, $GroupRecordLabel, + $ReleaseType, $TagList, $Torrents, $GroupVanityHouse, $GroupYear, $CategoryID, $FreeTorrent, + $HasCue, $HasLog, $TotalLeechers, $LogScore, $ReleaseType, $ReleaseType, $TotalSeeders, + $MaxSize, $TotalSnatched, $GroupTime) = array_values($Data); $TagList = explode(' ',str_replace('_','.',$TagList)); @@ -815,7 +812,7 @@ function header_link($SortKey,$DefaultWay="desc") { $LastMedia = ''; $EditionID = 0; - unset($FirstUnknown); + $FirstUnknown = null; foreach($Torrents as $TorrentID => $Data) { // All of the individual torrents in the group @@ -914,10 +911,6 @@ function header_link($SortKey,$DefaultWay="desc") { $FirstUnknown = !isset($FirstUnknown); } - if (in_array($TorrentID, $TokenTorrents) && empty($Torrent['FreeTorrent'])) { - $Data['PersonalFL'] = 1; - } - if($CategoryID == 1 && ($Data['RemasterTitle'] != $LastRemasterTitle || $Data['RemasterYear'] != $LastRemasterYear || $Data['RemasterRecordLabel'] != $LastRemasterRecordLabel || $Data['RemasterCatalogueNumber'] != $LastRemasterCatalogueNumber) || $FirstUnknown || $Data['Media'] != $LastMedia) { $EditionID++; @@ -964,7 +957,7 @@ function header_link($SortKey,$DefaultWay="desc") { [ 0) && $Data['HasFile'] && ($Data['Size'] < 1073741824) - && !in_array($TorrentID, $TokenTorrents) && empty($Data['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> + && !$Data['PersonalFL'] && empty($Data['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> | FL | RP ] @@ -986,12 +979,13 @@ function header_link($SortKey,$DefaultWay="desc") { list($TorrentID, $Data) = each($Torrents); $DisplayName = ''.$GroupName.''; - if($Data['FreeTorrent'] == '1') { + + if ($Data['FreeTorrent'] == '1') { $DisplayName .= ' Freeleech!'; - } elseif($Data['FreeTorrent'] == '2') { + } elseif ($Data['FreeTorrent'] == '2') { $DisplayName .= ' Neutral Leech!'; - } elseif(in_array($TorrentID, $TokenTorrents)) { - $DisplayName .= $AddExtra.'Personal Freeleech!'; + } elseif ($Data['PersonalFL']) { + $DisplayName .= $AddExtra.' Personal Freeleech!'; } ?> @@ -1003,7 +997,7 @@ function header_link($SortKey,$DefaultWay="desc") { [ DL 0) && $Data['HasFile'] && ($Data['Size'] < 1073741824) - && !in_array($TorrentID, $TokenTorrents) && empty($Data['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> + && !$Data['PersonalFL'] && empty($Data['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> | FL | RP ] diff --git a/sections/torrents/delete.php b/sections/torrents/delete.php index 58a28e72..9790864f 100644 --- a/sections/torrents/delete.php +++ b/sections/torrents/delete.php @@ -2,12 +2,19 @@ $TorrentID = $_GET['torrentid']; if (!$TorrentID || !is_number($TorrentID)) { error(404); } + + $DB->query("SELECT t.UserID, t.Time, COUNT(x.uid) FROM torrents AS t LEFT JOIN xbt_snatched AS x ON x.fid=t.ID WHERE t.ID=".$TorrentID." GROUP BY t.UserID"); + if($DB->record_count() < 1) { error('Torrent already deleted.'); } + + + list($UserID, $Time, $Snatches) = $DB->next_record(); + if ($LoggedUser['ID']!=$UserID && !check_perms('torrents_delete')) { error(403); } @@ -24,6 +31,7 @@ error('You can no longer delete this torrent as it has been snatched by 5 or more users. If you believe there is a problem with the torrent please report it instead.'); } + View::show_header('Delete torrent', 'reportsv2'); ?>
    diff --git a/sections/torrents/details.php b/sections/torrents/details.php index 42d27673..ed879e33 100644 --- a/sections/torrents/details.php +++ b/sections/torrents/details.php @@ -20,13 +20,14 @@ function compare($X, $Y){ include(SERVER_ROOT.'/sections/torrents/functions.php'); $TorrentCache = get_group_info($GroupID, true, $RevisionID); - $TorrentDetails = $TorrentCache[0]; $TorrentList = $TorrentCache[1]; // Group details -list($WikiBody, $WikiImage, $GroupID, $GroupName, $GroupYear, $GroupRecordLabel, $GroupCatalogueNumber, $ReleaseType, $GroupCategoryID, - $GroupTime, $GroupVanityHouse, $TorrentTags, $TorrentTagIDs, $TorrentTagUserIDs, $TagPositiveVotes, $TagNegativeVotes) = array_shift($TorrentDetails); +list($WikiBody, $WikiImage, $GroupID, $GroupName, $GroupYear, + $GroupRecordLabel, $GroupCatalogueNumber, $ReleaseType, $GroupCategoryID, + $GroupTime, $GroupVanityHouse, $TorrentTags, $TorrentTagIDs, $TorrentTagUserIDs, + $TagPositiveVotes, $TagNegativeVotes) = array_values($TorrentDetails); $DisplayName=$GroupName; $AltName=$GroupName; // Goes in the alt text of the image @@ -79,13 +80,6 @@ function compare($X, $Y){ die(); }*/ -$TokenTorrents = $Cache->get_value('users_tokens_'.$UserID); -if (empty($TokenTorrents)) { - $DB->query("SELECT TorrentID FROM users_freeleeches WHERE UserID=$UserID AND Expired=FALSE"); - $TokenTorrents = $DB->collect('TorrentID'); - $Cache->cache_value('users_tokens_'.$UserID, $TokenTorrents); -} - // Start output View::show_header($Title,'browse,comments,torrent,bbcode'); ?> @@ -387,16 +381,20 @@ function filelist($Str) { $EditionID = 0; foreach ($TorrentList as $Torrent) { - - //t.ID, t.Media, t.Format, t.Encoding, t.Remastered, t.RemasterYear, t.RemasterTitle, t.RemasterRecordLabel,t.RemasterCatalogueNumber, - //t.Scene, t.HasLog, t.HasCue, t.LogScore, t.FileCount, t.Size, t.Seeders, t.Leechers, t.Snatched, t.FreeTorrent, t.Time, t.Description, - //t.FileList, t.FilePath, t.UserID, t.last_action, - //(bad tags), (bad folders), (bad filenames), (cassette approved), (lossy master approved), (lossy web approved), t.LastReseedRequest, LogInDB - - list($TorrentID, $Media, $Format, $Encoding, $Remastered, $RemasterYear, $RemasterTitle, $RemasterRecordLabel, $RemasterCatalogueNumber, - $Scene, $HasLog, $HasCue, $LogScore, $FileCount, $Size, $Seeders, $Leechers, $Snatched, $FreeTorrent, $TorrentTime, $Description, - $FileList, $FilePath, $UserID, $LastActive, - $BadTags, $BadFolders, $BadFiles, $CassetteApproved, $LossymasterApproved, $LossywebApproved, $LastReseedRequest, $LogInDB, $HasFile) = $Torrent; + //t.ID, t.Media, t.Format, t.Encoding, t.Remastered, t.RemasterYear, + //t.RemasterTitle, t.RemasterRecordLabel, t.RemasterCatalogueNumber, t.Scene, + //t.HasLog, t.HasCue, t.LogScore, t.FileCount, t.Size, t.Seeders, t.Leechers, + //t.Snatched, t.FreeTorrent, t.Time, t.Description, t.FileList, + //t.FilePath, t.UserID, t.last_action, (bad tags), (bad folders), (bad filenames), + //(cassette approved), (lossy master approved), (lossy web approved), t.LastReseedRequest, + //LogInDB, (has file), Torrents::torrent_properties() + list($TorrentID, $Media, $Format, $Encoding, $Remastered, $RemasterYear, + $RemasterTitle, $RemasterRecordLabel, $RemasterCatalogueNumber, $Scene, + $HasLog, $HasCue, $LogScore, $FileCount, $Size, $Seeders, $Leechers, + $Snatched, $FreeTorrent, $TorrentTime, $Description, $FileList, + $FilePath, $UserID, $LastActive, $BadTags, $BadFolders, $BadFiles, + $CassetteApproved, $LossymasterApproved, $LossywebApproved, $LastReseedRequest, + $LogInDB, $HasFile, $PersonalFL) = array_values($Torrent); if($Remastered && !$RemasterYear) { $FirstUnknown = !isset($FirstUnknown); @@ -417,7 +415,7 @@ function filelist($Str) { AND Status != 'Resolved'"); $Reports = $DB->to_array(); $Cache->cache_value('reports_torrent_'.$TorrentID, $Reports, 0); - } + } if(count($Reports) > 0) { $Reported = true; include(SERVER_ROOT.'/sections/reportsv2/array.php'); @@ -467,7 +465,7 @@ function filelist($Str) { } if($FreeTorrent == '1') { $ExtraInfo.=$AddExtra.'Freeleech!'; $AddExtra=' / '; } if($FreeTorrent == '2') { $ExtraInfo.=$AddExtra.'Neutral Leech!'; $AddExtra=' / '; } - if(in_array($TorrentID, $TokenTorrents)) { $ExtraInfo.=$AddExtra.'Personal Freeleech!'; $AddExtra=' / '; } + if($PersonalFL) { $ExtraInfo.=$AddExtra.'Personal Freeleech!'; $AddExtra=' / '; } if($Reported) { $ExtraInfo.=$AddExtra.'Reported'; $AddExtra=' / '; } if(!empty($BadTags)) { $ExtraInfo.=$AddExtra.'Bad Tags'; $AddExtra=' / '; } if(!empty($BadFolders)) { $ExtraInfo.=$AddExtra.'Bad Folders'; $AddExtra=' / '; } @@ -527,7 +525,7 @@ function filelist($Str) { [ 0) && $HasFile && ($Size < 1073741824) - && !in_array($TorrentID, $TokenTorrents) && ($FreeTorrent == '0') && ($LoggedUser['CanLeech'] == '1')) { ?> + && !$PersonalFL && ($FreeTorrent == '0') && ($LoggedUser['CanLeech'] == '1')) { ?> | FL | RP diff --git a/sections/torrents/download.php b/sections/torrents/download.php index 1f32f862..a4de8a68 100644 --- a/sections/torrents/download.php +++ b/sections/torrents/download.php @@ -82,13 +82,8 @@ } // First make sure this isn't already FL, and if it is, do nothing - $TokenTorrents = $Cache->get_value('users_tokens_'.$UserID); - if (empty($TokenTorrents)) { - $DB->query("SELECT TorrentID FROM users_freeleeches WHERE UserID=$UserID AND Expired=FALSE"); - $TokenTorrents = $DB->collect('TorrentID'); - } - if (!in_array($TorrentID, $TokenTorrents)) { + if (!Torrents::has_token($TorrentID)) { if ($FLTokens <= 0) { error("You do not have any freeleech tokens left. Please use the regular DL link."); } @@ -101,15 +96,7 @@ error("Sorry! An error occurred while trying to register your token. Most often, this is due to the tracker being down or under heavy load. Please try again later."); } - // We need to fetch and check this again here because of people - // double-clicking the FL link while waiting for a tracker response. - $TokenTorrents = $Cache->get_value('users_tokens_'.$UserID); - if (empty($TokenTorrents)) { - $DB->query("SELECT TorrentID FROM users_freeleeches WHERE UserID=$UserID AND Expired=FALSE"); - $TokenTorrents = $DB->collect('TorrentID'); - } - - if (!in_array($TorrentID, $TokenTorrents)) { + if (!Torrents::has_token($TorrentID)) { $DB->query("INSERT INTO users_freeleeches (UserID, TorrentID, Time) VALUES ($UserID, $TorrentID, NOW()) ON DUPLICATE KEY UPDATE Time=VALUES(Time), Expired=FALSE, Uses=Uses+1"); $DB->query("UPDATE users_main SET FLTokens = FLTokens - 1 WHERE ID=$UserID"); @@ -122,8 +109,7 @@ $Cache->update_row(false, array('FLTokens'=>($FLTokens - 1))); $Cache->commit_transaction(0); - $TokenTorrents[] = $TorrentID; - $Cache->cache_value('users_tokens_'.$UserID, $TokenTorrents); + $Cache->delete_value('users_tokens_'.$UserID); } } } diff --git a/sections/torrents/functions.php b/sections/torrents/functions.php index afa34d67..968ddc34 100644 --- a/sections/torrents/functions.php +++ b/sections/torrents/functions.php @@ -3,21 +3,21 @@ function get_group_info($GroupID, $Return = true, $RevisionID = 0) { global $Cache, $DB; - if(!$RevisionID) { + if (!$RevisionID) { $TorrentCache=$Cache->get_value('torrents_details_'.$GroupID); } - - if($RevisionID || !is_array($TorrentCache)) { + + if ($RevisionID || !is_array($TorrentCache) || isset($TorrentCache[0][0])) { // Fetch the group details $SQL = "SELECT "; - if(!$RevisionID) { - $SQL.=" + if (!$RevisionID) { + $SQL .= " g.WikiBody, g.WikiImage, "; } else { - $SQL.=" + $SQL .= " w.Body, w.Image, "; } @@ -41,17 +41,17 @@ function get_group_info($GroupID, $Return = true, $RevisionID = 0) { LEFT JOIN torrents_tags AS tt ON tt.GroupID=g.ID LEFT JOIN tags ON tags.ID=tt.TagID"; - if($RevisionID) { - $SQL.=" + if ($RevisionID) { + $SQL .= " LEFT JOIN wiki_torrents AS w ON w.PageID='".db_string($GroupID)."' AND w.RevisionID='".db_string($RevisionID)."' "; } - $SQL .=" + $SQL .= " WHERE g.ID='".db_string($GroupID)."' GROUP BY NULL"; $DB->query($SQL); - $TorrentDetails=$DB->to_array(); + $TorrentDetails = $DB->next_record(MYSQLI_ASSOC); // Fetch the individual torrents @@ -82,12 +82,12 @@ function get_group_info($GroupID, $Return = true, $RevisionID = 0) { t.FilePath, t.UserID, t.last_action, - tbt.TorrentID, - tbf.TorrentID, - tfi.TorrentID, - ca.TorrentID, - lma.TorrentID, - lwa.TorrentID, + tbt.TorrentID AS BadTags, + tbf.TorrentID AS BadFolders, + tfi.TorrentID AS BadFiles, + ca.TorrentID AS CassetteApproved, + lma.TorrentID AS LossymasterApproved, + lwa.TorrentID AS LossywebApproved, t.LastReseedRequest, tln.TorrentID AS LogInDB, t.ID AS HasFile @@ -103,27 +103,30 @@ function get_group_info($GroupID, $Return = true, $RevisionID = 0) { GROUP BY t.ID ORDER BY t.Remastered ASC, (t.RemasterYear <> 0) DESC, t.RemasterYear ASC, t.RemasterTitle ASC, t.RemasterRecordLabel ASC, t.RemasterCatalogueNumber ASC, t.Media ASC, t.Format, t.Encoding, t.ID"); - $TorrentList = $DB->to_array(); - if(count($TorrentList) == 0) { + $TorrentList = $DB->to_array('ID', MYSQLI_ASSOC); + if (count($TorrentList) == 0) { header("Location: log.php?search=Torrent+$GroupID"); die(); } - if(in_array(0, $DB->collect('Seeders'))) { + if (in_array(0, $DB->collect('Seeders'))) { $CacheTime = 600; } else { $CacheTime = 3600; } // Store it all in cache - if(!$RevisionID) { - $Cache->cache_value('torrents_details_'.$GroupID,array($TorrentDetails,$TorrentList),$CacheTime); + if (!$RevisionID) { + $Cache->cache_value('torrents_details_'.$GroupID, array($TorrentDetails, $TorrentList), $CacheTime); } } else { // If we're reading from cache - $TorrentDetails=$TorrentCache[0]; - $TorrentList=$TorrentCache[1]; + $TorrentDetails = $TorrentCache[0]; + $TorrentList = $TorrentCache[1]; } - if($Return) { - return array($TorrentDetails,$TorrentList); + // Fetch all user specific torrent properties + array_walk($TorrentList, 'Torrents::torrent_properties'); + + if ($Return) { + return array($TorrentDetails, $TorrentList); } } @@ -144,6 +147,9 @@ function set_torrent_logscore($TorrentID) { } function get_group_requests($GroupID) { + if (empty($GroupID) || !is_number($GroupID)) { + return array(); + } global $DB, $Cache; $Requests = $Cache->get_value('requests_group_'.$GroupID); diff --git a/sections/torrents/notify.php b/sections/torrents/notify.php index b3581b2e..4f450d84 100644 --- a/sections/torrents/notify.php +++ b/sections/torrents/notify.php @@ -4,13 +4,6 @@ define('NOTIFICATIONS_PER_PAGE', 50); list($Page,$Limit) = Format::page_limit(NOTIFICATIONS_PER_PAGE); -$TokenTorrents = $Cache->get_value('users_tokens_'.$LoggedUser['ID']); -if (empty($TokenTorrents)) { - $DB->query("SELECT TorrentID FROM users_freeleeches WHERE UserID=$LoggedUser[ID] AND Expired=FALSE"); - $TokenTorrents = $DB->collect('TorrentID'); - $Cache->cache_value('users_tokens_'.$LoggedUser['ID'], $TokenTorrents); -} - $UserID = $LoggedUser['ID']; @@ -101,13 +94,11 @@ foreach($FilterResults as $Result) { $TorrentID = $Result['TorrentID']; $GroupID = $Result['GroupID']; - $GroupCategoryID = $GroupCategoryIDs[$GroupID]['CategoryID']; - $GroupInfo = $TorrentGroups[$Result['GroupID']]; - if(!$TorrentInfo = $GroupInfo['Torrents'][$TorrentID]) { + if(!isset($GroupInfo['Torrents'][$TorrentID]) || !isset($GroupInfo['ID'])) { continue; } - + $TorrentInfo = $GroupInfo['Torrents'][$TorrentID]; // generate torrent's title $DisplayName = ''; if(!empty($GroupInfo['ExtendedArtists'])) { @@ -115,6 +106,7 @@ } $DisplayName .= "".$GroupInfo['Name'].""; + $GroupCategoryID = $GroupCategoryIDs[$GroupID]['CategoryID']; if($GroupCategoryID == 1) { if($GroupInfo['Year'] > 0) { $DisplayName .= " [$GroupInfo[Year]]"; @@ -152,7 +144,7 @@ [ DL 0) && ($TorrentInfo['Size'] < 1073741824) - && !in_array($TorrentID, $TokenTorrents) && empty($TorrentInfo['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> + && !$TorrentInfo['PersonalFL'] && empty($TorrentInfo['FreeTorrent']) && ($LoggedUser['CanLeech'] == '1')) { ?> | FL | CL ] diff --git a/sections/torrents/takegroupedit.php b/sections/torrents/takegroupedit.php index 2d660e44..cf2db5fb 100644 --- a/sections/torrents/takegroupedit.php +++ b/sections/torrents/takegroupedit.php @@ -37,8 +37,8 @@ $VanityHouse = 0; } - if($GroupInfo = $Cache->get_value('torrents_details_'.$GroupID)) { - $GroupCategoryID = $GroupInfo[0][0]['CategoryID']; + if(($GroupInfo = $Cache->get_value('torrents_details_'.$GroupID)) && !isset($GroupInfo[0][0])) { + $GroupCategoryID = $GroupInfo[0]['CategoryID']; } else { $DB->query("SELECT CategoryID FROM torrents_group WHERE ID='$GroupID'"); list($GroupCategoryID) = $DB->next_record();