2013-02-23 12:39:58 -08:00
< ? php
require_once ( " ../../class2.php " );
2013-05-20 15:36:08 +02:00
include_lan ( e_PLUGIN . " download/languages/ " . e_LANGUAGE . " /download.php " );
2013-06-03 00:41:40 +02:00
$log = e107 :: getAdminLog ();
2013-02-23 12:39:58 -08:00
$id = FALSE ;
if ( ! is_numeric ( e_QUERY ))
{
2013-05-20 15:36:08 +02:00
if ( $sql -> select ( 'download' , 'download_id' , " download_url=' " . $tp -> toDB ( e_QUERY ) . " ' " ))
2013-02-23 12:39:58 -08:00
{
2013-05-20 15:36:08 +02:00
$row = $sql -> fetch ();
2013-02-23 12:39:58 -08:00
$type = 'file' ;
$id = $row [ 'download_id' ];
}
elseif (( strpos ( e_QUERY , " http:// " ) === 0 ) || ( strpos ( e_QUERY , " ftp:// " ) === 0 ) || ( strpos ( e_QUERY , " https:// " ) === 0 ))
{
header ( " location: " . e_QUERY );
exit ();
}
2013-05-30 11:17:57 +02:00
elseif ( file_exists ( e_DOWNLOAD . e_QUERY )) // 1 - should we allow this?
2013-02-23 12:39:58 -08:00
{
2013-05-30 11:17:57 +02:00
e107 :: getFile () -> send ( e_DOWNLOAD . e_QUERY );
2013-02-23 12:39:58 -08:00
exit ();
}
}
if ( strstr ( e_QUERY , " mirror " ))
{ // Download from mirror
list ( $action , $download_id , $mirror_id ) = explode ( " . " , e_QUERY );
$download_id = intval ( $download_id );
$mirror_id = intval ( $mirror_id );
$qry = " SELECT d.*, dc.download_category_class FROM #download as d LEFT JOIN #download_category AS dc ON dc.download_category_id = d.download_category WHERE d.download_id = { $download_id } " ;
2013-05-20 15:36:08 +02:00
if ( $sql -> gen ( $qry ))
2013-02-23 12:39:58 -08:00
{
2013-05-20 15:36:08 +02:00
$row = $sql -> fetch ();
2013-02-23 12:39:58 -08:00
extract ( $row );
if ( check_class ( $download_category_class ) && check_class ( $download_class ))
{
if ( $pref [ 'download_limits' ] && $download_active == 1 )
{
check_download_limits ();
}
$mirrorList = explode ( chr ( 1 ), $download_mirror );
$mstr = " " ;
foreach ( $mirrorList as $mirror )
{
if ( $mirror )
{
$tmp = explode ( " , " , $mirror );
$mid = intval ( $tmp [ 0 ]);
$address = $tmp [ 1 ];
$requests = $tmp [ 2 ];
if ( $tmp [ 0 ] == $mirror_id )
{
$gaddress = trim ( $address );
$requests ++ ;
}
$mstr .= $mid . " , " . $address . " , " . $requests . chr ( 1 );
}
}
2013-05-20 15:36:08 +02:00
$sql -> update ( " download " , " download_requested = download_requested + 1, download_mirror = ' { $mstr } ' WHERE download_id = ' " . intval ( $download_id ) . " ' " );
$sql -> update ( " download_mirror " , " mirror_count = mirror_count + 1 WHERE mirror_id = ' " . intval ( $mirror_id ) . " ' " );
2013-02-23 12:39:58 -08:00
header ( " Location: { $gaddress } " );
exit ();
}
header ( " Location: " . e_BASE . " download.php?error. { $download_id } .1 " );
exit ;
}
}
$tmp = explode ( " . " , e_QUERY );
if ( ! $tmp [ 1 ] || strstr ( e_QUERY , " pub_ " ))
{
$id = intval ( $tmp [ 0 ]);
$type = " file " ;
}
else
{
2013-05-20 15:36:08 +02:00
$table = preg_replace ( " # \ W# " , " " , $tp -> toDB ( $tmp [ 0 ], true ));
2013-02-23 12:39:58 -08:00
$id = intval ( $tmp [ 1 ]);
$type = " image " ;
}
if ( preg_match ( " #.* \ .[a-z,A-Z] { 3,4}# " , e_QUERY ))
{
if ( strstr ( e_QUERY , " pub_ " ))
{
$bid = str_replace ( " pub_ " , " " , e_QUERY );
if ( file_exists ( e_UPLOAD . $bid ))
{
e107 :: getFile () -> send ( e_UPLOAD . $bid );
exit ();
}
2013-06-03 00:41:40 +02:00
$log -> addError ( " Line " . __LINE__ . " : Couldn't find " . e_UPLOAD . $bid . " " );
2013-02-23 12:39:58 -08:00
}
2013-05-30 11:17:57 +02:00
if ( file_exists ( e_DOWNLOAD . e_QUERY ))
2013-02-23 12:39:58 -08:00
{
2013-05-30 11:17:57 +02:00
e107 :: getFile () -> send ( e_DOWNLOAD . e_QUERY );
2013-02-23 12:39:58 -08:00
exit ();
}
2013-06-03 00:41:40 +02:00
$log -> addError ( " Line " . __LINE__ . " : Couldn't find " . e_DOWNLOAD . e_QUERY );
2013-06-15 14:04:04 +02:00
$log -> toFile ( 'download_requests' , 'Download Requests' , true ); // Create a log file and add the log messages
2013-02-23 12:39:58 -08:00
require_once ( HEADERF );
$ns -> tablerender ( LAN_dl_61 , " <div style='text-align:center'> " . LAN_dl_65 . " \n <br /><br /> \n <a href='javascript:history.back(1)'> " . LAN_dl_64 . " </a></div> " );
require_once ( FOOTERF );
exit ();
}
if ( $type == " file " )
{
$qry = " SELECT d.*, dc.download_category_class FROM #download as d LEFT JOIN #download_category AS dc ON dc.download_category_id = d.download_category WHERE d.download_id = { $id } " ;
if ( $sql -> gen ( $qry ))
{
2013-05-20 15:36:08 +02:00
$row = $sql -> fetch ();
2013-02-23 12:39:58 -08:00
$row [ 'download_url' ] = $tp -> replaceConstants ( $row [ 'download_url' ]);
if ( check_class ( $row [ 'download_category_class' ]) && check_class ( $row [ 'download_class' ]))
{
if ( $row [ 'download_active' ] == 0 )
{ // Inactive download - don't allow
require_once ( HEADERF );
2013-05-20 15:36:08 +02:00
$ns -> tablerender ( LAN_dl_61 , " <div style='text-align:center'> " . str_replace ( '--LINK--' , " <a href=' " . e_HTTP . 'download.php' . " '> " , LAN_dl_78 ) . '</div>' );
2013-02-23 12:39:58 -08:00
require_once ( FOOTERF );
exit ();
}
if ( $pref [ 'download_limits' ] && $row [ 'download_active' ] == 1 )
{
check_download_limits ();
}
extract ( $row );
if ( $download_mirror )
{
$array = explode ( chr ( 1 ), $download_mirror );
$c = ( count ( $array ) - 1 );
for ( $i = 1 ; $i < $c ; $i ++ )
{
$d = mt_rand ( 0 , $i );
$tmp = $array [ $i ];
$array [ $i ] = $array [ $d ];
$array [ $d ] = $tmp ;
}
$tmp = explode ( " , " , $array [ 0 ]);
$mirror_id = $tmp [ 0 ];
$mstr = " " ;
foreach ( $array as $mirror )
{
if ( $mirror )
{
$tmp = explode ( " , " , $mirror );
$mid = $tmp [ 0 ];
$address = $tmp [ 1 ];
$requests = $tmp [ 2 ];
if ( $tmp [ 0 ] == $mirror_id )
{
$gaddress = trim ( $address );
$requests ++ ;
}
$mstr .= $mid . " , " . $address . " , " . $requests . chr ( 1 );
}
}
2013-05-20 15:36:08 +02:00
$sql -> update ( " download " , " download_requested = download_requested + 1, download_mirror = ' { $mstr } ' WHERE download_id = ' " . intval ( $download_id ) . " ' " );
$sql -> update ( " download_mirror " , " mirror_count = mirror_count + 1 WHERE mirror_id = ' " . intval ( $mirror_id ) . " ' " );
2013-02-23 12:39:58 -08:00
header ( " Location: " . $gaddress );
exit ();
}
// increment download count
2013-05-20 15:36:08 +02:00
$sql -> update ( " download " , " download_requested = download_requested + 1 WHERE download_id = ' { $id } ' " );
2013-02-23 12:39:58 -08:00
$user_id = USER ? USERID : 0 ;
$ip = e107 :: getIPHandler () -> getIP ( FALSE );
$request_data = " '0', ' { $user_id } ', ' { $ip } ', ' { $id } ', ' " . time () . " ' " ;
//add request info to db
$sql -> db_Insert ( " download_requests " , $request_data , FALSE );
if ( preg_match ( " /Binary \ s(.*?) \ /.*/ " , $download_url , $result ))
{
$bid = $result [ 1 ];
$result = @ mysql_query ( " SELECT * FROM " . MPREFIX . " rbinary WHERE binary_id = ' { $bid } ' " );
$binary_data = @ mysql_result ( $result , 0 , " binary_data " );
$binary_filetype = @ mysql_result ( $result , 0 , " binary_filetype " );
$binary_name = @ mysql_result ( $result , 0 , " binary_name " );
header ( " Content-type: { $binary_filetype } " );
header ( " Content-length: { $download_filesize } " );
header ( " Content-Disposition: attachment; filename= { $binary_name } " );
header ( " Content-Description: PHP Generated Data " );
echo $binary_data ;
exit ();
}
if ( strstr ( $download_url , " http:// " ) || strstr ( $download_url , " ftp:// " ) || strstr ( $download_url , " https:// " )) {
header ( " Location: { $download_url } " );
exit ();
}
else
{
2013-05-30 11:17:57 +02:00
if ( file_exists ( e_DOWNLOAD . $download_url ))
2013-02-23 12:39:58 -08:00
{
2013-05-30 11:17:57 +02:00
e107 :: getFile () -> send ( e_DOWNLOAD . $download_url );
2013-02-23 12:39:58 -08:00
exit ();
}
2013-06-13 15:20:31 +02:00
elseif ( file_exists ( $download_url ))
{
e107 :: getFile () -> send ( $download_url );
exit ();
}
2013-05-30 00:32:14 +02:00
elseif ( file_exists ( e_UPLOAD . $download_url ))
2013-02-23 12:39:58 -08:00
{
e107 :: getFile () -> send ( e_UPLOAD . $download_url );
exit ();
}
2013-06-15 14:04:04 +02:00
$log -> addError ( " Couldn't find " . e_DOWNLOAD . $download_url . " or " . $download_url . " or " . e_UPLOAD . $download_ur );
$log -> toFile ( 'download_requests' , 'Download Requests' , true ); // Create a log file and add the log messages
2013-02-23 12:39:58 -08:00
}
}
else
{ // Download Access Denied.
if (( ! strpos ( $pref [ 'download_denied' ], " .php " ) &&
! strpos ( $pref [ 'download_denied' ], " .htm " ) &&
! strpos ( $pref [ 'download_denied' ], " .html " ) &&
! strpos ( $pref [ 'download_denied' ], " .shtml " ) ||
( strpos ( $pref [ 'download_denied' ], " signup.php " ) && USER == TRUE )
))
{
header ( " Location: " . e_BASE . " download.php?error. { $id } .1 " );
exit ();
}
else
{
header ( " Location: " . trim ( $pref [ 'download_denied' ]));
exit ();
}
}
}
else if ( strstr ( e_QUERY , " pub_ " ))
{
/* check to see if public upload and not in download table ... */
$bid = str_replace ( " pub_ " , " " , e_QUERY );
if ( $result = @ mysql_query ( " SELECT * FROM " . MPREFIX . " rbinary WHERE binary_id = ' $bid ' " ))
{
$binary_data = @ mysql_result ( $result , 0 , " binary_data " );
$binary_filetype = @ mysql_result ( $result , 0 , " binary_filetype " );
$binary_name = @ mysql_result ( $result , 0 , " binary_name " );
header ( " Content-type: { $binary_filetype } " );
header ( " Content-length: { $download_filesize } " );
header ( " Content-Disposition: attachment; filename= { $binary_name } " );
header ( " Content-Description: PHP Generated Data " );
echo $binary_data ;
exit ();
}
}
require_once ( HEADERF );
$ns -> tablerender ( LAN_dl_61 , " <div style='text-align:center'> " . LAN_dl_65 . " <br /><br /><a href='javascript:history.back(1)'> " . LAN_dl_64 . " </a></div> " );
require_once ( FOOTERF );
exit ();
}
2013-05-20 15:36:08 +02:00
$sql -> select ( $table , " * " , " { $table } _id = ' { $id } ' " );
$row = $sql -> fetch ();
2013-02-23 12:39:58 -08:00
extract ( $row );
$image = ( $table == " upload " ? $upload_ss : $download_image );
if ( preg_match ( " /Binary \ s(.*?) \ /.*/ " , $image , $result ))
{
$bid = $result [ 1 ];
$result = @ mysql_query ( " SELECT * FROM " . MPREFIX . " rbinary WHERE binary_id = ' { $bid } ' " );
$binary_data = @ mysql_result ( $result , 0 , " binary_data " );
$binary_filetype = @ mysql_result ( $result , 0 , " binary_filetype " );
$binary_name = @ mysql_result ( $result , 0 , " binary_name " );
header ( " Content-type: { $binary_filetype } " );
header ( " Content-Disposition: inline; filename= { $binary_name } " );
echo $binary_data ;
exit ();
}
$image = ( $table == " upload " ? $upload_ss : $download_image );
if ( strpos ( $image , " http " ) !== FALSE )
{
header ( " Location: { $image } " );
exit ();
}
else
{
if ( $table == " download " )
{
require_once ( HEADERF );
if ( file_exists ( e_FILE . " download/ { $image } " ))
{
$disp = " <div style='text-align:center'><img src=' " . e_FILE . " download/ { $image } ' alt='' /></div> " ;
}
else if ( file_exists ( e_FILE . " downloadimages/ { $image } " ))
{
$disp = " <div style='text-align:center'><img src=' " . e_FILE . " downloadimages/ { $image } ' alt='' /></div> " ;
}
else
{
$disp = " <div style='text-align:center'><img src=' " . e_UPLOAD . $image . " ' alt='' /></div> " ;
}
$disp .= " <br /><div style='text-align:center'><a href='javascript:history.back(1)'> " . LAN_dl_64 . " </a></div> " ;
$ns -> tablerender ( $image , $disp );
require_once ( FOOTERF );
} else
{
if ( is_file ( e_UPLOAD . $image ))
{
echo " <img src=' " . e_UPLOAD . $image . " ' alt='' /> " ;
}
elseif ( is_file ( e_FILE . " downloadimages/ { $image } " ))
{
echo " <img src=' " . e_FILE . " downloadimages/ { $image } ' alt='' /> " ;
}
else
{
require_once ( HEADERF );
2013-05-20 15:36:08 +02:00
$ns -> tablerender ( LAN_dl_61 , " <div style='text-align:center'> " . LAN_dl_65 . " <br /><br /><a href='javascript:history.back(1)'> " . LAN_dl_64 . " </a></div> " );
2013-02-23 12:39:58 -08:00
require_once ( FOOTERF );
exit ;
}
exit ();
}
}
2013-06-15 14:04:04 +02:00
2013-02-23 12:39:58 -08:00
function check_download_limits ()
{
global $pref , $sql , $ns , $HEADER , $e107 , $tp ;
// Check download count limits
$qry = " SELECT gen_intdata, gen_chardata, (gen_intdata/gen_chardata) as count_perday FROM #generic WHERE gen_type = 'download_limit' AND gen_datestamp IN ( " . USERCLASS_LIST . " ) AND (gen_chardata >= 0 AND gen_intdata >= 0) ORDER BY count_perday DESC " ;
2013-05-20 15:36:08 +02:00
if ( $sql -> gen ( $qry ))
2013-02-23 12:39:58 -08:00
{
2013-05-20 15:36:08 +02:00
$limits = $sql -> fetch ();
2013-02-23 12:39:58 -08:00
$cutoff = time () - ( 86400 * $limits [ 'gen_chardata' ]);
if ( USER )
{
$where = " dr.download_request_datestamp > { $cutoff } AND dr.download_request_userid = " . USERID ;
2013-05-20 15:36:08 +02:00
}
else
{
2013-02-23 12:39:58 -08:00
$ip = e107 :: getIPHandler () -> getIP ( FALSE );
$where = " dr.download_request_datestamp > { $cutoff } AND dr.download_request_ip = ' { $ip } ' " ;
}
$qry = " SELECT COUNT(d.download_id) as count FROM #download_requests as dr LEFT JOIN #download as d ON dr.download_request_download_id = d.download_id AND d.download_active = 1 WHERE { $where } GROUP by dr.download_request_userid " ;
2013-05-20 15:36:08 +02:00
if ( $sql -> gen ( $qry ))
2013-02-23 12:39:58 -08:00
{
2013-05-20 15:36:08 +02:00
$row = $sql -> fetch ();
2013-02-23 12:39:58 -08:00
if ( $row [ 'count' ] >= $limits [ 'gen_intdata' ])
{
// Exceeded download count limit
2013-05-20 15:36:08 +02:00
header ( " Location: " . e_BASE . " download.php?error. { $cutoff } .2 " );
/* require_once ( HEADERF );
2013-02-23 12:39:58 -08:00
$ns -> tablerender ( LAN_dl_61 , LAN_dl_62 );
require ( FOOTERF ); */
exit ();
}
}
}
// Check download bandwidth limits
$qry = " SELECT gen_user_id, gen_ip, (gen_user_id/gen_ip) as bw_perday FROM #generic WHERE gen_type='download_limit' AND gen_datestamp IN ( " . USERCLASS_LIST . " ) AND (gen_user_id >= 0 AND gen_ip >= 0) ORDER BY bw_perday DESC " ;
2013-05-20 15:36:08 +02:00
if ( $sql -> gen ( $qry ))
{
$limit = $sql -> fetch ();
2013-02-23 12:39:58 -08:00
$cutoff = time () - ( 86400 * $limit [ 'gen_ip' ]);
2013-05-20 15:36:08 +02:00
if ( USER )
{
2013-02-23 12:39:58 -08:00
$where = " dr.download_request_datestamp > { $cutoff } AND dr.download_request_userid = " . USERID ;
2013-05-20 15:36:08 +02:00
}
else
{
2013-02-23 12:39:58 -08:00
$ip = e107 :: getIPHandler () -> getIP ( FALSE );
$where = " dr.download_request_datestamp > { $cutoff } AND dr.download_request_ip = ' { $ip } ' " ;
}
$qry = " SELECT SUM(d.download_filesize) as total_bw FROM #download_requests as dr LEFT JOIN #download as d ON dr.download_request_download_id = d.download_id AND d.download_active = 1 WHERE { $where } GROUP by dr.download_request_userid " ;
2013-05-20 15:36:08 +02:00
if ( $sql -> gen ( $qry ))
{
$row = $sql -> fetch ();
2013-02-23 12:39:58 -08:00
if ( $row [ 'total_bw' ] / 1024 > $limit [ 'gen_user_id' ])
{ //Exceed bandwith limit
header ( " Location: " . e_BASE . " download.php?error. { $cutoff } .2 " );
2013-05-20 15:36:08 +02:00
/* require ( HEADERF );
2013-02-23 12:39:58 -08:00
$ns -> tablerender ( LAN_dl_61 , LAN_dl_62 );
require ( FOOTERF ); */
exit ();
}
}
}
}
?>