2011-03-28 14:21:28 +00:00
< ?
//TODO: freeleech in ratio hit calculations, in addition to a warning of whats freeleech in the Summary.txt
/*
This page is something of a hack so those
easily scared off by funky solutions , don ' t
touch it ! : P
There is a central problem to this page , it ' s
impossible to order before grouping in SQL , and
it ' s slow to run sub queries , so we had to get
creative for this one .
The solution I settled on abuses the way
$DB -> to_array () works . What we ' ve done , is
backwards ordering . The results returned by the
query have the best one for each GroupID last ,
and while to_array traverses the results , it
overwrites the keys and leaves us with only the
desired result . This does mean however , that
the SQL has to be done in a somewhat backwards
fashion .
Thats all you get for a disclaimer , just
remember , this page isn ' t for the faint of
heart . - A9
SQL template :
SELECT
CASE
2011-04-13 15:36:33 +00:00
WHEN t . Format = 'Ogg Vorbis' THEN 0
2011-03-28 14:21:28 +00:00
WHEN t . Format = 'MP3' AND t . Encoding = 'V0 (VBR)' THEN 1
WHEN t . Format = 'MP3' AND t . Encoding = 'V2 (VBR)' THEN 2
ELSE 100
END AS Rank ,
t . GroupID ,
t . Media ,
t . Format ,
t . Encoding ,
IF ( t . Year = 0 , tg . Year , t . Year ),
tg . Name ,
a . Name ,
t . Size
FROM torrents AS t
INNER JOIN torrents_group AS tg ON tg . ID = t . GroupID AND tg . CategoryID = '1'
INNER JOIN artists_group AS a ON a . ArtistID = tg . ArtistID AND a . ArtistID = '59721'
LEFT JOIN torrents_files AS f ON t . ID = f . TorrentID
ORDER BY t . GroupID ASC , Rank DESC , t . Seeders ASC
*/
if (
! isset ( $_REQUEST [ 'artistid' ]) ||
! isset ( $_REQUEST [ 'preference' ]) ||
! is_number ( $_REQUEST [ 'preference' ]) ||
! is_number ( $_REQUEST [ 'artistid' ]) ||
$_REQUEST [ 'preference' ] > 2 ||
count ( $_REQUEST [ 'list' ]) == 0
) { error ( 0 ); }
if ( ! check_perms ( 'zip_downloader' )){ error ( 403 ); }
$Preferences = array ( 'RemasterTitle DESC' , 'Seeders ASC' , 'Size ASC' );
$ArtistID = $_REQUEST [ 'artistid' ];
$Preference = $Preferences [ $_REQUEST [ 'preference' ]];
$DB -> query ( " SELECT Name FROM artists_group WHERE ArtistID=' $ArtistID ' " );
list ( $ArtistName ) = $DB -> next_record ( MYSQLI_NUM , false );
2011-11-07 08:00:19 +00:00
$DB -> query ( " SELECT GroupID, Importance FROM torrents_artists WHERE ArtistID=' $ArtistID ' " );
2011-10-04 08:00:13 +00:00
if ( $DB -> record_count () == 0 ) { error ( 404 ); }
2011-11-07 08:00:19 +00:00
$Releases = $DB -> to_array ( 'GroupID' , MYSQLI_ASSOC , false );
$GroupIDs = array_keys ( $Releases );
2011-09-06 08:00:10 +00:00
2011-03-28 14:21:28 +00:00
$SQL = " SELECT CASE " ;
foreach ( $_REQUEST [ 'list' ] as $Priority => $Selection ) {
2011-11-07 08:00:19 +00:00
if ( ! is_number ( $Priority )) {
continue ;
}
2011-03-28 14:21:28 +00:00
$SQL .= " WHEN " ;
switch ( $Selection ) {
case '00' : $SQL .= " t.Format='MP3' AND t.Encoding='V0 (VBR)' " ; break ;
case '01' : $SQL .= " t.Format='MP3' AND t.Encoding='APX (VBR)' " ; break ;
case '02' : $SQL .= " t.Format='MP3' AND t.Encoding='256 (VBR)' " ; break ;
case '03' : $SQL .= " t.Format='MP3' AND t.Encoding='V1 (VBR)' " ; break ;
case '10' : $SQL .= " t.Format='MP3' AND t.Encoding='224 (VBR)' " ; break ;
case '11' : $SQL .= " t.Format='MP3' AND t.Encoding='V2 (VBR)' " ; break ;
case '12' : $SQL .= " t.Format='MP3' AND t.Encoding='APS (VBR)' " ; break ;
case '13' : $SQL .= " t.Format='MP3' AND t.Encoding='192 (VBR)' " ; break ;
case '20' : $SQL .= " t.Format='MP3' AND t.Encoding='320' " ; break ;
case '21' : $SQL .= " t.Format='MP3' AND t.Encoding='256' " ; break ;
case '22' : $SQL .= " t.Format='MP3' AND t.Encoding='224' " ; break ;
case '23' : $SQL .= " t.Format='MP3' AND t.Encoding='192' " ; break ;
case '30' : $SQL .= " t.Format='FLAC' AND t.Encoding='24bit Lossless' AND t.Media='Vinyl' " ; break ;
case '31' : $SQL .= " t.Format='FLAC' AND t.Encoding='24bit Lossless' AND t.Media='DVD' " ; break ;
case '32' : $SQL .= " t.Format='FLAC' AND t.Encoding='24bit Lossless' AND t.Media='SACD' " ; break ;
2011-12-02 08:00:15 +00:00
case '33' : $SQL .= " t.Format='FLAC' AND t.Encoding='24bit Lossless' AND t.Media='WEB' " ; break ;
case '34' : $SQL .= " t.Format='FLAC' AND t.Encoding='Lossless' AND HasLog='1' AND LogScore='100' AND HasCue='1' " ; break ;
case '35' : $SQL .= " t.Format='FLAC' AND t.Encoding='Lossless' AND HasLog='1' AND LogScore='100' " ; break ;
case '36' : $SQL .= " t.Format='FLAC' AND t.Encoding='Lossless' AND HasLog='1' " ; break ;
case '37' : $SQL .= " t.Format='FLAC' AND t.Encoding='Lossless' " ; break ;
2011-03-28 14:21:28 +00:00
case '40' : $SQL .= " t.Format='DTS' " ; break ;
2011-04-13 15:36:33 +00:00
case '41' : $SQL .= " t.Format='Ogg Vorbis' " ; break ;
2011-03-28 14:21:28 +00:00
case '42' : $SQL .= " t.Format='AAC' AND t.Encoding='320' " ; break ;
case '43' : $SQL .= " t.Format='AAC' AND t.Encoding='256' " ; break ;
case '44' : $SQL .= " t.Format='AAC' AND t.Encoding='q5.5' " ; break ;
case '45' : $SQL .= " t.Format='AAC' AND t.Encoding='q5' " ; break ;
case '46' : $SQL .= " t.Format='AAC' AND t.Encoding='192' " ; break ;
default : error ( 0 );
}
2011-11-07 08:00:19 +00:00
$SQL .= " THEN $Priority " ;
2011-03-28 14:21:28 +00:00
}
$SQL .= " ELSE 100 END AS Rank,
t . GroupID ,
2011-11-06 08:00:31 +00:00
t . ID ,
2011-03-28 14:21:28 +00:00
t . Media ,
t . Format ,
t . Encoding ,
tg . ReleaseType ,
IF ( t . RemasterYear = 0 , tg . Year , t . RemasterYear ),
tg . Name ,
2011-11-06 08:00:31 +00:00
t . Size
2011-03-28 14:21:28 +00:00
FROM torrents AS t
2011-09-06 08:00:10 +00:00
JOIN torrents_group AS tg ON tg . ID = t . GroupID AND tg . CategoryID = '1' AND tg . ID IN ( " .implode(',', $GroupIDs ). " )
2011-03-28 14:21:28 +00:00
ORDER BY t . GroupID ASC , Rank DESC , t . $Preference " ;
$DB -> query ( $SQL );
$Downloads = $DB -> to_array ( '1' , MYSQLI_NUM , false );
2011-11-07 08:00:19 +00:00
$Artists = get_artists ( $GroupIDs , false );
2011-03-28 14:21:28 +00:00
$Skips = array ();
$TotalSize = 0 ;
2011-11-06 08:00:31 +00:00
if ( count ( $Downloads )) {
foreach ( $Downloads as $Download ) {
$TorrentIDs [] = $Download [ 2 ];
}
$DB -> query ( " SELECT TorrentID, file FROM torrents_files WHERE TorrentID IN ( " . implode ( ',' , $TorrentIDs ) . " ) " );
$Torrents = $DB -> to_array ( 'TorrentID' , MYSQLI_ASSOC , false );
}
2011-03-28 14:21:28 +00:00
require ( SERVER_ROOT . '/classes/class_torrent.php' );
require ( SERVER_ROOT . '/classes/class_zip.php' );
$Zip = new ZIP ( file_string ( $ArtistName ));
foreach ( $Downloads as $Download ) {
2011-11-06 08:00:31 +00:00
list ( $Rank , $GroupID , $TorrentID , $Media , $Format , $Encoding , $ReleaseType , $Year , $Album , $Size ) = $Download ;
2011-07-05 08:00:07 +00:00
$Artist = display_artists ( $Artists [ $GroupID ], false , true , false );
2011-03-28 14:21:28 +00:00
if ( $Rank == 100 ) {
$Skips [] = $Artist . $Album . ' ' . $Year ;
continue ;
}
2011-11-07 08:00:19 +00:00
if ( $Releases [ $GroupID ][ 'Importance' ] == 1 ) {
$ReleaseTypeName = $ReleaseTypes [ $ReleaseType ];
} elseif ( $Releases [ $GroupID ][ 'Importance' ] == 2 ) {
$ReleaseTypeName = " Guest Appearance " ;
} elseif ( $Releases [ $GroupID ][ 'Importance' ] == 3 ) {
$ReleaseTypeName = " Remixed By " ;
}
2011-03-28 14:21:28 +00:00
$TotalSize += $Size ;
2011-11-06 08:00:31 +00:00
$Contents = unserialize ( base64_decode ( $Torrents [ $TorrentID ][ 'file' ]));
2011-03-28 14:21:28 +00:00
$Tor = new TORRENT ( $Contents , true );
$Tor -> set_announce_url ( ANNOUNCE_URL . '/' . $LoggedUser [ 'torrent_pass' ] . '/announce' );
unset ( $Tor -> Val [ 'announce-list' ]);
2012-02-28 08:00:21 +00:00
// We need this section for long file names :/
$TorrentName = '' ;
$TorrentInfo = '' ;
$TorrentName = file_string ( $Artist . $Album );
if ( $Year > 0 ) { $TorrentName .= ' - ' . file_string ( $Year ); }
if ( $Media != '' ) { $TorrentInfo .= file_string ( $Media ); }
if ( $Format != '' ) {
if ( $TorrentInfo != '' ) { $TorrentInfo .= ' - ' ; }
$TorrentInfo .= file_string ( $Format );
}
if ( $Encoding != '' ) {
if ( $TorrentInfo != '' ) { $TorrentInfo .= ' - ' ; }
$TorrentInfo .= file_string ( $Encoding );
}
if ( $TorrentInfo != '' ) { $TorrentInfo = " ( $TorrentInfo ) " ; }
if ( strlen ( $TorrentName ) + strlen ( $TorrentInfo ) + 3 > 200 ) {
$TorrentName = file_string ( $Album ) . (( $Year > 0 ) ? ( ' - ' . file_string ( $Year )) : '' );
}
$FileName = cut_string ( $TorrentName . $TorrentInfo , 180 , true , false );
$Zip -> add_file ( $Tor -> enc (), $ReleaseTypeName . '/' . $FileName . '.torrent' );
2011-03-28 14:21:28 +00:00
}
$Analyzed = count ( $Downloads );
$Skipped = count ( $Skips );
$Downloaded = $Analyzed - $Skipped ;
$Time = number_format ((( microtime ( true ) - $ScriptStartTime ) * 1000 ), 5 ) . ' ms' ;
$Used = get_size ( memory_get_usage ( true ));
$Date = date ( 'M d Y, H:i' );
$Zip -> add_file ( 'Collector Download Summary - ' . SITE_NAME . " \r \n \r \n User: \t \t $LoggedUser[Username] \r \n Passkey: \t $LoggedUser[torrent_pass] \r \n \r \n Time: \t \t $Time\r\nUsed : \t \t $Used\r\nDate : \t \t $Date\r\n\r\nTorrents Analyzed: \t \t $Analyzed\r\nTorrents Filtered: \t \t $Skipped\r\nTorrents Downloaded: \t $Downloaded\r\n\r\nTotal Size of Torrents (Ratio Hit): " . get_size ( $TotalSize ) . " \r \n \r \n Albums Unavailable within your criteria (consider making a request for your desired format): \r \n " . implode ( " \r \n " , $Skips ), 'Summary.txt' );
$Settings = array ( implode ( ':' , $_REQUEST [ 'list' ]), $_REQUEST [ 'preference' ]);
$Zip -> close_stream ();
$Settings = array ( implode ( ':' , $_REQUEST [ 'list' ]), $_REQUEST [ 'preference' ]);
if ( ! isset ( $LoggedUser [ 'Collector' ]) || $LoggedUser [ 'Collector' ] != $Settings ) {
$DB -> query ( " SELECT SiteOptions FROM users_info WHERE UserID=' " . $LoggedUser [ 'ID' ] . " ' " );
list ( $Options ) = $DB -> next_record ( MYSQLI_NUM , false );
$Options = unserialize ( $Options );
$Options [ 'Collector' ] = $Settings ;
$DB -> query ( " UPDATE users_info SET SiteOptions=' " . db_string ( serialize ( $Options )) . " ' WHERE UserID=' $LoggedUser[ID] ' " );
$Cache -> begin_transaction ( 'user_info_heavy_' . $LoggedUser [ 'ID' ]);
$Cache -> insert ( 'Collector' , $Settings );
$Cache -> commit_transaction ( 0 );
}
?>