<?php
if(isset($_GET['file'])) {
	require_once('../lib/Ressource.class.php');
	require_once('../lib/EnsRessource.class.php');
	require_once('../lib/EnsFactory.class.php');
	
	$ensRes = EnsFactory::createEns('EnsRessource');
	if($ensRes->existeRessource($_GET['file'])) {
		$filename = $ensRes->getElement(array($_GET['file']))->path();
		
		// required for IE, otherwise Content-disposition is ignored
		if(ini_get('zlib.output_compression'))
			ini_set('zlib.output_compression', 'Off');
		
		$file_extension = strtolower(substr(strrchr($filename,"."),1));
		
		if($filename == '') {
			header("HTTP/1.1 404 Not Found");
			exit;
		} 
		elseif(!file_exists($filename)) {
			header("HTTP/1.1 404 Not Found");
			exit;
		};
		
		switch($file_extension) {
			//[textes]
			case "txt": $ctype="text/plain"; break;
			
			//[images]
			case "png": $ctype="image/png"; break;
			case "gif": $ctype="image/gif"; break;
			case "jpg": $ctype="image/jpeg"; break;
			case "jpeg": $ctype="image/jpeg"; break;
			case "bmp": $ctype="image/bmp"; break;
			case "tif": $ctype="image/tiff"; break;
			
			//[archives]
			case "bz2": $ctype="application/x-bzip"; break;
			case "gz": $ctype="application/x-gzip"; break;
			case "tar": $ctype="application/x-tar"; break;
			case "zip": $ctype="application/zip"; break;
			case "rar": $ctype="application/x-rar-compressed"; break;
			
			//[audio]
			case "aif": $ctype="audio/aiff"; break;
			case "aiff": $ctype="audio/aiff"; break;
			case "mid": $ctype="audio/mid"; break;
			case "midi": $ctype="audio/mid"; break;
			case "mp3": $ctype="audio/mpeg"; break;
			case "ogg": $ctype="audio/ogg"; break;
			case "wav": $ctype="audio/wav"; break;
			case "wma": $ctype="audio/x-ms-wma"; break;
			
			//[video]
			case "asf": $ctype="video/x-ms-asf"; break;
			case "asx": $ctype="video/x-ms-asf"; break;
			case "avi": $ctype="video/avi"; break;
			case "mpg": $ctype="video/mpeg"; break;
			case "mpeg": $ctype="video/mpeg"; break;
			case "wmv": $ctype="video/x-ms-wmv"; break;
			case "wmx": $ctype="video/x-ms-wmx"; break;
			
			//[microsoft]
			case "doc": $ctype="application/msword"; break;
			case "rtf": $ctype="application/msword"; break;
			case "xls": $ctype="application/excel"; break;
			case "pps": $ctype="application/vnd.ms-powerpoint"; break;
			case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
			case "docx": $ctype="application/vnd.openxmlformats-officedocument.wordprocessingml.document"; break;
			case "ppsx": $ctype="application/vnd.openxmlformats-officedocument.presentationml.slideshow"; break;
			case "pptx": $ctype="application/vnd.openxmlformats-officedocument.presentationml.presentation"; break;
			case "xlsx": $ctype="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break;
			
			//[OOo]
			case "odt": $ctype="application/vnd.oasis.opendocument.text"; break;
			case "ods": $ctype="application/vnd.oasis.opendocument.spreadsheet"; break;
			case "odp": $ctype="application/vnd.oasis.opendocument.presentation"; break;
			case "odg": $ctype="application/vnd.oasis.opendocument.graphics"; break;
			
			//[adobe]
			case "pdf": $ctype="application/pdf"; break;
			case "psd": $ctype="image/psd"; break;
			
			//[macromedia]
			case "swf": $ctype="application/x-shockwave-flash"; break;
			
			//[real]
			case "ra": $ctype="audio/vnd.rn-realaudio"; break;
			case "ram": $ctype="audio/x-pn-realaudio"; break;
			case "rm": $ctype="application/vnd.rn-realmedia"; break;
			case "rv": $ctype="video/vnd.rn-realvideo"; break;
			
			//[autres]
			case "exe": $ctype="application/x-msdownload"; break;
			default: $ctype="application/force-download";
		}
		
		header("Pragma: public"); // required
		header("Expires: 0");
		header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
		header("Cache-Control: private",false); // required for certain browsers 
		header("Content-Type: $ctype");
		header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
		header("Content-Transfer-Encoding: binary");
		header("Content-Length: ".filesize($filename));
		readfile("$filename");
		exit();
	}
}
?>