<?php
/**
 * @copyright 2010 City of Bloomington, Indiana
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.txt
 * @author Cliff Ingham <inghamn@bloomington.in.gov>
 */
class Map
{
	public static $extensions = array(
		'jpg'=>array('mime_type'=>'image/jpeg','media_type'=>'image'),
		'gif'=>array('mime_type'=>'image/gif','media_type'=>'image'),
		'png'=>array('mime_type'=>'image/png','media_type'=>'image'),
		'tiff'=>array('mime_type'=>'image/tiff','media_type'=>'image')
	);

	/**
	 * @param string $directory Where to store the file
	 * @param array|string $file  Either an entry from $_FILES or a path to a file
	 * @param string $newName	The filename to use
	 */
	public static function saveFile($directory,$file,$newName)
	{
		// Handle passing in either a $_FILES array or just a path to a file
		$tempFile = is_array($file) ? $file['tmp_name'] : $file;
		if (!$tempFile) {
			throw new Exception('media/uploadFailed');
		}

		# Find out the mime type for this file
		$filename = is_array($file) ? basename($file['name']) : basename($file);
		preg_match("/[^.]+$/",$filename,$matches);
		$extension = strtolower($matches[0]);

		// Make sure it's a known file type
		if (!array_key_exists(strtolower($extension),self::$extensions)) {
			throw new Exception('unknownFileType');
		}

		// Clean out any previous version of the file
		foreach(glob("$directory/$newName.*") as $file) {
			unlink($file);
		}

		// Move the file where it's supposed to go
		if (!is_dir($directory)) {
			mkdir($directory,0777,true);
		}
		$newFile = "$directory/$newName.$extension";
		rename($tempFile,$newFile);
		chmod($newFile,0666);

		if (!is_file($newFile)) {
			throw new Exception('media/uploadFailed');
		}
	}
}
