<?php
// -----------------------------------------
// downloader.php
// logged file access to monitor downloads.
// 8/2009 Dietmar Schreiner
// -----------------------------------------

$logfileName="../collector/download.log";
$downloadDir="../downloads";

// last ID in array
$paperCount=24;

$papers = array(
//	1 => "2012_SARS_Schreiner.pdf",
	2 => "2012_STTT_Schreiner.pdf",
	3 => "2012_ARWS_Schreiner.pdf",
	4 => "2011_INF_Schreiner.pdf",
	5 => "2011_SARS_Schreiner.pdf",
	6 => "2011_ARWS_Schreiner.pdf",
	7 => "2010_ARC_Schreiner.pdf",
	8 => "2010_EDCC_Schreiner.pdf",
	9 => "2010_ISOLA_Lisper.pdf",
	10 => "2009_PhDThesis_Schreiner.pdf",
	11 => "2009_ISORCb_Schreiner.pdf",
	12 => "2009_ISORCa_Schreiner.pdf",
	13 => "2008_MESA_Schreiner.pdf",
	14 => "2008_GIPRK_Schreiner.pdf",
	15 => "2007_MESA_Schreiner.pdf",
	16 => "2007_SIES_Galla.pdf",
	17 => "2007_SECAD_Schreiner.pdf",
	18 => "2007_ISORC_Forster.pdf",
	19 => "2007_SC_Schreiner.pdf",
	20 => "2007_SAC_Schreiner.pdf",
	21 => "2007_SAC_Schreiner_poster.jpg",
	22 => "2007_SOFSEM_Schreiner.pdf",
	23 => "2006_ECOOP_Schreiner_posterAbstract.pdf",
//	24 => "2005_MasterThesis_Schreiner.pdf",
);



// -----------------------------------------
// FN: download
// param: fileID: IDX of file to download.
// global $logfileName 
//		contains name (and path) of logfile
// global $downloadDir 
//		directory containing the downloads
//		(no terminating / required)
// 
// -----------------------------------------
function download($fileID){
	global $logfileName;
	global $downloadDir;
	global $paperCount;
	global $papers;


	$message=date("Y-m-d H:i:s").";".$_SERVER['REMOTE_ADDR'].";".gethostbyaddr($_SERVER['REMOTE_ADDR']);



	// get file name
	if(is_numeric($fileID) or is_int($fileID)){
		$fileID = $fileID + 0;

		if( $fileID>=1 and $fileID<=$paperCount ){
			$fileName=$papers[$fileID];

			if(isset($fileName)){

				// create message
				$message=$message."; ".$fileName;

				// should be irrelevant due to LUT
				$fileName=str_replace('/', '_', $fileName);
				$downloadFileName=$downloadDir."/".$fileName;
	
				if(file_exists($downloadFileName)){
					header("Pragma: public"); 
					header('Content-type: "application/octet-stream');
					//header('Accept-Ranges: bytes');
					header("Content-Transfer-Encoding: binary"); 
					header('Content-Length: '.filesize($downloadFileName));
					header('Content-Disposition: attachment; filename="'.$fileName.'"');
				
					// send it here
					readfile($downloadFileName);
					$message=$message."; download succeeded.";
				}
				else{
					// file error (does not exists)
					$message=$message."; ERROR: File does not exist";
					echo ("<HTML><BODY>Error: File does not exist.</BODY><HTML>");
				}
			}
			else{
				$message=$message."; ERROR: Invalid Index ".$fileID;
				echo ("<HTML><BODY>Error: File not available.</BODY><HTML>");
			}

		}
		else{
			// bad argument
			$message=$message."; ERROR: Index out of Bounds; ".$fileID." of ".$paperCount;
			echo ("<HTML><BODY>ID? (_|_) </BODY><HTML>");
		}

	}
	else{
				// bad argument
				$message=$message."; ERROR: BAD argument; ".$fileID;
				echo ("<HTML><BODY>RLY? (-.-)Zzz... </BODY><HTML>");
	}


	// write to log
	$log=fopen($logfileName, "a");
	if($log!=false){
			
		// aquire mutex
		flock($log,LOCK_EX);
		$permitted=false;
		while(!$permitted){
	    	$permitted=flock($log, LOCK_EX);
	    }
		
		// write access gained here
		fputs ($log,$message."\r\n");
		
		fclose($log);
	}
	else{
		//echo("error opening ".$logfileName." at ".getcwd()."<BR>");
	}
}


// -----------------------------------------
// main() ;)
// -----------------------------------------


download($_GET["file"]);

?>