From 71b71d42b4248047c5b403726889bd9a6d4e8724 Mon Sep 17 00:00:00 2001
From: Cameron <cameron@e107coders.org>
Date: Sat, 23 Feb 2013 12:39:58 -0800
Subject: [PATCH] Issue #12  Moved Downloads code out of request.php and into
 it's own requester. Corrected download class issue.

---
 e107_handlers/file_class.php             | 109 ++++-
 e107_plugins/download/includes/admin.php |  10 +-
 e107_plugins/download/request.php        | 381 +++++++++++++++++
 request.php                              | 499 +----------------------
 4 files changed, 510 insertions(+), 489 deletions(-)
 create mode 100644 e107_plugins/download/request.php

diff --git a/e107_handlers/file_class.php b/e107_handlers/file_class.php
index dc25cab35..9d2f4de7a 100644
--- a/e107_handlers/file_class.php
+++ b/e107_handlers/file_class.php
@@ -546,7 +546,114 @@ class e_file
 	
 	
 	
-	
+
+	/**
+	 * File retrieval function. by Cam.
+	 * @param $file actual path or {e_} path to file. 
+	 * 
+	 */
+	function send($file) 
+	{
+		global $e107;
+		
+		$pref = e107::getPref();
+		$tp = e107::getParser();
+		
+		
+		$DOWNLOADS_DIRECTORY = e_BASE.e107::getFolder('DOWNLOADS');
+		$FILES_DIRECTORY = e_BASE.e107::getFolder('FILES');
+		$MEDIA_DIRECTORY	= realpath(e_MEDIA_FILE);
+		
+		$file = $tp->replaceConstants($file);
+		
+			
+		@set_time_limit(10 * 60);
+		@session_write_close();
+		@e107_ini_set("max_execution_time", 10 * 60);
+		while (@ob_end_clean()); // kill all output buffering else it eats server resources
+		@ob_implicit_flush(TRUE);
+		
+		
+		$filename = $file;
+		$file = basename($file);
+		$path = realpath($filename);
+		$path_downloads = realpath($DOWNLOADS_DIRECTORY);
+		$path_public = realpath($FILES_DIRECTORY."public/");
+		if(!strstr($path, $path_downloads) && !strstr($path,$path_public) && !strstr($path, $MEDIA_DIRECTORY)) 
+		{
+	        if(E107_DEBUG_LEVEL > 0 && ADMIN)
+			{
+				echo "Failed to Download <b>".$file."</b><br />";
+				echo "The file-path <b>".$path."<b> didn't match with either <b>{$path_downloads}</b> or <b>{$path_public}</b><br />";
+				echo "Downloads Path: ".$path_downloads. " (".$DOWNLOADS_DIRECTORY.")";
+				exit();
+	        }
+			else
+			{
+				header("location: {$e107->base_path}");
+				exit();
+			}
+		} 
+		else 
+		{
+			if (is_file($filename) && is_readable($filename) && connection_status() == 0) 
+			{
+				$seek = 0;
+				if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
+				{
+					$file = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1);
+				}
+				if (isset($_SERVER['HTTP_RANGE']))
+				{
+					$seek = intval(substr($_SERVER['HTTP_RANGE'] , strlen('bytes=')));
+				}
+				$bufsize = 2048;
+				ignore_user_abort(true);
+				$data_len = filesize($filename);
+				if ($seek > ($data_len - 1)) { $seek = 0; }
+				if ($filename == null) { $filename = basename($this->data); }
+				$res =& fopen($filename, 'rb');
+				if ($seek)
+				{
+					fseek($res , $seek);
+				}
+				$data_len -= $seek;
+				header("Expires: 0");
+				header("Cache-Control: max-age=30" );
+				header("Content-Type: application/force-download");
+				header("Content-Disposition: attachment; filename=\"{$file}\"");
+				header("Content-Length: {$data_len}");
+				header("Pragma: public");
+				if ($seek)
+				{
+					header("Accept-Ranges: bytes");
+					header("HTTP/1.0 206 Partial Content");
+					header("status: 206 Partial Content");
+					header("Content-Range: bytes {$seek}-".($data_len - 1)."/{$data_len}");
+				}
+				while (!connection_aborted() && $data_len > 0)
+				{
+					echo fread($res , $bufsize);
+					$data_len -= $bufsize;
+				}
+				fclose($res);
+			} 
+			else 
+			{
+	            if(E107_DEBUG_LEVEL > 0 && ADMIN)
+				{
+	              	echo "file failed =".$file."<br />";
+					echo "path =".$path."<br />";
+	                exit();
+				}
+				else
+				{
+				  	header("location: ".e_BASE."index.php");
+					exit();
+				}
+			}
+		}
+	}	
 	
 	
 	
diff --git a/e107_plugins/download/includes/admin.php b/e107_plugins/download/includes/admin.php
index f387084c3..a2835a30a 100644
--- a/e107_plugins/download/includes/admin.php
+++ b/e107_plugins/download/includes/admin.php
@@ -1527,8 +1527,12 @@ $columnInfo = array(
 		            {
 		               $filesize = filesize($DOWNLOADS_DIRECTORY.$dlInfo['download_url']);
 		            }
+					elseif($dlInfo['download_url'][0] == '{')
+					{
+						$filesize = filesize($tp->replaceConstants($dlInfo['download_url']));
+					}
 		            else
-		            {
+		            {  	
 		               $filesize = filesize(e_BASE.$DOWNLOADS_DIRECTORY.$dlInfo['download_url']);
 		            }
 				}
@@ -1593,8 +1597,8 @@ $columnInfo = array(
 			$dlInfo['download_thumb']				= $tp->toDB($_POST['download_thumb']);
 	      	$dlInfo['download_image']				= $tp->toDB($_POST['download_image']);
 	      	$dlInfo['download_comment']				= $tp->toDB($_POST['download_comment']);
-	      	$dlInfo['download_class']				= intval($_POST['download_class']);
-	      	$dlInfo['download_visible']				= intval($_POST['download_visible']);
+	      	$dlInfo['download_class']				= $tp->toDB($_POST['download_class']);
+	      	$dlInfo['download_visible']				= $tp->toDB($_POST['download_visible']);
 			$dlInfo['download_datestamp']			= e107::getDate()->convert($_POST['download_datestamp'],'inputdate');
 			
 	
diff --git a/e107_plugins/download/request.php b/e107_plugins/download/request.php
new file mode 100644
index 000000000..f572b50d2
--- /dev/null
+++ b/e107_plugins/download/request.php
@@ -0,0 +1,381 @@
+<?php
+require_once("../../class2.php");
+
+include_lan(e_LANGUAGEDIR.e_LANGUAGE."/lan_download.php");
+
+$id = FALSE;
+
+if (!is_numeric(e_QUERY)) 
+{
+	if ($sql->db_Select('download', 'download_id', "download_url='".$tp -> toDB(e_QUERY)."'")) 
+	{
+		$row = $sql->db_Fetch();
+		$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();
+	} 
+	elseif(file_exists($DOWNLOADS_DIRECTORY.e_QUERY)) 		// 1 - should we allow this?
+	{
+		e107::getFile()->send($DOWNLOADS_DIRECTORY.e_QUERY);
+		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}";
+	if ($sql->db_Select_gen($qry)) 
+	{
+		$row = $sql->db_Fetch();
+		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);
+				}
+			}
+			$sql->db_Update("download", "download_requested = download_requested + 1, download_mirror = '{$mstr}' WHERE download_id = '".intval($download_id)."'");
+			$sql->db_Update("download_mirror", "mirror_count = mirror_count + 1 WHERE mirror_id = '".intval($mirror_id)."'");
+			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 
+{
+	$table = preg_replace("#\W#", "", $tp -> toDB($tmp[0], true));
+	$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();
+		}
+	}
+	if (file_exists($DOWNLOADS_DIRECTORY.e_QUERY)) 
+	{
+		e107::getFile()->send($DOWNLOADS_DIRECTORY.e_QUERY);
+		exit();
+	}
+	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)) 
+	{
+		$row = $sql->db_Fetch();
+		
+		$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);
+				$ns -> tablerender(LAN_dl_61, "<div style='text-align:center'>".str_replace('--LINK--',"<a href='".e_HTTP.'download.php'."'>",LAN_dl_78).'</div>');
+				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);
+					}
+				}
+				$sql -> db_Update("download", "download_requested = download_requested + 1, download_mirror = '{$mstr}' WHERE download_id = '".intval($download_id)."'");
+				$sql -> db_Update("download_mirror", "mirror_count = mirror_count + 1 WHERE mirror_id = '".intval($mirror_id)."'");
+
+				header("Location: ".$gaddress);
+				exit();
+			}
+
+			// increment download count
+			$sql->db_Update("download", "download_requested = download_requested + 1 WHERE download_id = '{$id}'");
+			$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 
+			{
+				if (file_exists($DOWNLOADS_DIRECTORY.$download_url)) 
+				{
+					e107::getFile()->send($DOWNLOADS_DIRECTORY.$download_url);
+					exit();
+				} 
+				elseif(file_exists(ee_UPLOAD.$download_url)) 
+				{
+					e107::getFile()->send(e_UPLOAD.$download_url);
+					exit();
+				}
+			}
+		} 
+		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();
+}
+
+$sql->db_Select($table, "*", "{$table}_id = '{$id}'");
+$row = $sql->db_Fetch();
+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);
+			$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;
+		}
+		exit();
+	}
+}
+
+
+
+
+
+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";
+	if($sql->db_Select_gen($qry)) 
+	{
+		$limits = $sql->db_Fetch();
+		$cutoff = time() - (86400 * $limits['gen_chardata']);
+		if(USER) 
+		{
+			$where = "dr.download_request_datestamp > {$cutoff} AND dr.download_request_userid = ".USERID;
+		} else {
+			$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";
+		if($sql->db_Select_gen($qry)) 
+		{
+			$row=$sql->db_Fetch();
+			if($row['count'] >= $limits['gen_intdata']) 
+			{
+				// Exceeded download count limit
+			  header("Location: ".e_BASE."download.php?error.{$cutoff}.2");
+/*				require_once(HEADERF);
+				$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";
+	if($sql->db_Select_gen($qry)) {
+		$limit = $sql->db_Fetch();
+		$cutoff = time() - (86400*$limit['gen_ip']);
+		if(USER) {
+			$where = "dr.download_request_datestamp > {$cutoff} AND dr.download_request_userid = ".USERID;
+		} else {
+			$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";
+		if($sql->db_Select_gen($qry)) {
+			$row=$sql->db_Fetch();
+			if($row['total_bw'] / 1024 > $limit['gen_user_id']) 
+			{	//Exceed bandwith limit
+			  header("Location: ".e_BASE."download.php?error.{$cutoff}.2");
+/*				require(HEADERF);
+				$ns->tablerender(LAN_dl_61, LAN_dl_62);
+				require(FOOTERF); */
+				exit();
+			}
+		}
+	}
+}
+
+?>
\ No newline at end of file
diff --git a/request.php b/request.php
index 38fe8758a..a0b1a4798 100644
--- a/request.php
+++ b/request.php
@@ -4,24 +4,20 @@
 + ----------------------------------------------------------------------------+
 |     e107 website system
 |
-|     Copyright (C) 2008-2009 e107 Inc 
+|     Copyright (C) 2008-2013 e107 Inc 
 |     http://e107.org
 |
-|
 |     Released under the terms and conditions of the
 |     GNU General Public License (http://gnu.org).
+|		
+|	  Generic File Request Script. 
 |
-|     $Source: /cvs_backup/e107_0.8/request.php,v $
-|     $Revision$
-|     $Date$
-|     $Author$
 +----------------------------------------------------------------------------+
 */
 
-// ********************************** SEE HIGHLIGHTED AND NUMBERED QUERIES *****************************
+
 
 require_once("class2.php");
-include_lan(e_LANGUAGEDIR.e_LANGUAGE."/lan_download.php");
 
 if (!e_QUERY || isset($_POST['userlogin'])) 
 {
@@ -29,493 +25,26 @@ if (!e_QUERY || isset($_POST['userlogin']))
 	exit();
 }
 
-$id = FALSE;
-
-//TODO e_request.php - allow plugins like 'downloads' to hook into request.php which should only be a generic file-downloading function.  
 
 // Media-Manager direct file download. 
-if(vartrue($_GET['file']) && is_numeric($_GET['file']))
+
+if(vartrue($_GET['file']) && is_numeric($_GET['file'])) // eg. request.php?file=1
 {
-	if ($sql->db_Select('core_media', 'media_url', "media_id= ".intval($_GET['file'])." AND media_userclass IN (".USERCLASS_LIST.") LIMIT 1 ")) 
+	$sql = e107::getDb();
+	if ($sql->select('core_media', 'media_url', "media_id= ".intval($_GET['file'])." AND media_userclass IN (".USERCLASS_LIST.") LIMIT 1 ")) 
 	{
-		$row = $sql->db_Fetch();
-		$file = $tp->replaceConstants($row['media_url'],'rel');
-		// echo 'file='.$file;
-		send_file($file);
-		exit();
+		$row = $sql->fetch();
+		// $file = $tp->replaceConstants($row['media_url'],'rel');
+		e107::getFile()->send($row['media_url']);
 	} 	
 }
-
-
-if (!is_numeric(e_QUERY)) 
+else //BC Legacy Support. (Downloads Plugin)
 {
-	if ($sql->db_Select('download', 'download_id', "download_url='".$tp -> toDB(e_QUERY)."'")) 
-	{
-		$row = $sql->db_Fetch();
-		$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();
-	} 
-	elseif(file_exists($DOWNLOADS_DIRECTORY.e_QUERY)) 		// 1 - should we allow this?
-	{
-		send_file($DOWNLOADS_DIRECTORY.e_QUERY);
-		exit();
-	}
+	e107::getRedirect()->redirect(e_PLUGIN."download/request.php?".e_QUERY);
 }
 
+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}";
-	if ($sql->db_Select_gen($qry)) 
-	{
-		$row = $sql->db_Fetch();
-		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);
-				}
-			}
-			$sql->db_Update("download", "download_requested = download_requested + 1, download_mirror = '{$mstr}' WHERE download_id = '".intval($download_id)."'");
-			$sql->db_Update("download_mirror", "mirror_count = mirror_count + 1 WHERE mirror_id = '".intval($mirror_id)."'");
-			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 
-{
-	$table = preg_replace("#\W#", "", $tp -> toDB($tmp[0], true));
-	$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))
-		{
-			send_file(e_UPLOAD.$bid);
-			exit();
-		}
-	}
-	if (file_exists($DOWNLOADS_DIRECTORY.e_QUERY)) 
-	{
-		send_file($DOWNLOADS_DIRECTORY.e_QUERY);
-		exit();
-	}
-	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->db_Select_gen($qry)) 
-	{
-		$row = $sql->db_Fetch();
-		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);
-				$ns -> tablerender(LAN_dl_61, "<div style='text-align:center'>".str_replace('--LINK--',"<a href='".e_HTTP.'download.php'."'>",LAN_dl_78).'</div>');
-				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);
-					}
-				}
-				$sql -> db_Update("download", "download_requested = download_requested + 1, download_mirror = '{$mstr}' WHERE download_id = '".intval($download_id)."'");
-				$sql -> db_Update("download_mirror", "mirror_count = mirror_count + 1 WHERE mirror_id = '".intval($mirror_id)."'");
-
-				header("Location: ".$gaddress);
-				exit();
-			}
-
-			// increment download count
-			$sql->db_Update("download", "download_requested = download_requested + 1 WHERE download_id = '{$id}'");
-			$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 
-			{
-				if (file_exists($DOWNLOADS_DIRECTORY.$download_url)) 
-				{
-					send_file($DOWNLOADS_DIRECTORY.$download_url);
-					exit();
-				} 
-				elseif(file_exists(ee_UPLOAD.$download_url)) 
-				{
-					send_file(e_UPLOAD.$download_url);
-					exit();
-				}
-			}
-		} 
-		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();
-}
-
-$sql->db_Select($table, "*", "{$table}_id = '{$id}'");
-$row = $sql->db_Fetch();
-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);
-			$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;
-		}
-		exit();
-	}
-}
-
-
-
-// File retrieval function. by Cam.
-function send_file($file) 
-{
-	global $DOWNLOADS_DIRECTORY,$FILES_DIRECTORY, $e107;
-	
-	$pref = e107::getPref();
-	
-	/* PHP handling by default. 
-	if (!$pref['download_php'])
-	{
-		header("Location: ".SITEURL.$file);
-		exit();
-	}
-	*/
-	
-	@set_time_limit(10 * 60);
-	@session_write_close();
-	@e107_ini_set("max_execution_time", 10 * 60);
-	while (@ob_end_clean()); // kill all output buffering else it eats server resources
-	@ob_implicit_flush(TRUE);
-	
-	
-	$filename = $file;
-	$file = basename($file);
-	$path = realpath($filename);
-	$path_downloads = realpath($DOWNLOADS_DIRECTORY);
-	$path_public = realpath($FILES_DIRECTORY."public/");
-	if(!strstr($path, $path_downloads) && !strstr($path,$path_public)) 
-	{
-        if(E107_DEBUG_LEVEL > 0 && ADMIN)
-		{
-			echo "Failed to Download <b>".$file."</b><br />";
-			echo "The file-path <b>".$path."<b> didn't match with either <b>{$path_downloads}</b> or <b>{$path_public}</b><br />";
-			exit();
-        }
-		else
-		{
-			header("location: {$e107->base_path}");
-			exit();
-		}
-	} 
-	else 
-	{
-		if (is_file($filename) && is_readable($filename) && connection_status() == 0) 
-		{
-			$seek = 0;
-			if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
-			{
-				$file = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1);
-			}
-			if (isset($_SERVER['HTTP_RANGE']))
-			{
-				$seek = intval(substr($_SERVER['HTTP_RANGE'] , strlen('bytes=')));
-			}
-			$bufsize = 2048;
-			ignore_user_abort(true);
-			$data_len = filesize($filename);
-			if ($seek > ($data_len - 1)) { $seek = 0; }
-			if ($filename == null) { $filename = basename($this->data); }
-			$res =& fopen($filename, 'rb');
-			if ($seek)
-			{
-				fseek($res , $seek);
-			}
-			$data_len -= $seek;
-			header("Expires: 0");
-			header("Cache-Control: max-age=30" );
-			header("Content-Type: application/force-download");
-			header("Content-Disposition: attachment; filename=\"{$file}\"");
-			header("Content-Length: {$data_len}");
-			header("Pragma: public");
-			if ($seek)
-			{
-				header("Accept-Ranges: bytes");
-				header("HTTP/1.0 206 Partial Content");
-				header("status: 206 Partial Content");
-				header("Content-Range: bytes {$seek}-".($data_len - 1)."/{$data_len}");
-			}
-			while (!connection_aborted() && $data_len > 0)
-			{
-				echo fread($res , $bufsize);
-				$data_len -= $bufsize;
-			}
-			fclose($res);
-		} 
-		else 
-		{
-            if(E107_DEBUG_LEVEL > 0 && ADMIN)
-			{
-              	echo "file failed =".$file."<br />";
-				echo "path =".$path."<br />";
-                exit();
-			}
-			else
-			{
-			  	header("location: ".e_BASE."index.php");
-				exit();
-			}
-		}
-	}
-}
-
-
-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";
-	if($sql->db_Select_gen($qry)) 
-	{
-		$limits = $sql->db_Fetch();
-		$cutoff = time() - (86400 * $limits['gen_chardata']);
-		if(USER) 
-		{
-			$where = "dr.download_request_datestamp > {$cutoff} AND dr.download_request_userid = ".USERID;
-		} else {
-			$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";
-		if($sql->db_Select_gen($qry)) 
-		{
-			$row=$sql->db_Fetch();
-			if($row['count'] >= $limits['gen_intdata']) 
-			{
-				// Exceeded download count limit
-			  header("Location: ".e_BASE."download.php?error.{$cutoff}.2");
-/*				require_once(HEADERF);
-				$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";
-	if($sql->db_Select_gen($qry)) {
-		$limit = $sql->db_Fetch();
-		$cutoff = time() - (86400*$limit['gen_ip']);
-		if(USER) {
-			$where = "dr.download_request_datestamp > {$cutoff} AND dr.download_request_userid = ".USERID;
-		} else {
-			$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";
-		if($sql->db_Select_gen($qry)) {
-			$row=$sql->db_Fetch();
-			if($row['total_bw'] / 1024 > $limit['gen_user_id']) 
-			{	//Exceed bandwith limit
-			  header("Location: ".e_BASE."download.php?error.{$cutoff}.2");
-/*				require(HEADERF);
-				$ns->tablerender(LAN_dl_61, LAN_dl_62);
-				require(FOOTERF); */
-				exit();
-			}
-		}
-	}
-}
 
 ?>
\ No newline at end of file