<?php

	/**
	 * The Legend of Z
	 *
	 * @author	Oliver Hanraths <oliver.hanraths@uni-duesseldorf.de>
	 * @copyright	2014 Heinrich-Heine-Universität Düsseldorf
	 * @license	http://www.gnu.org/licenses/gpl.html
	 * @link	https://bitbucket.org/coderkun/the-legend-of-z
	 */
	
	namespace hhu\z\models;
	
	
	/**
	 * Model to handle files to upload.
	 * 
	 * @author	Oliver Hanraths <oliver.hanraths@uni-duesseldorf.de>
	 */
	class UploadsModel extends \hhu\z\Model
	{
		
		
		
		
		/**
		 * Construct a new UploadsModel.
		 */
		public function __construct()
		{
			parent::__construct();
		}
		
		
		
		
		/**
		 * Upload a file and create a database record.
		 * 
		 * @param	int	$userId		ID of user that uploads the file
		 * @param	int	$seminaryId	ID of Seminary
		 * @param	string	$name		Name of file to upload
		 * @param	string	$filename	Filename of file to upload
		 * @param	string	$tmpFilename	Name of temporary uploaded file
		 * @param	string	$mimetype	Mimetype of file to upload
		 * @return	mixed			ID of database record or false
		 */
		public function uploadSeminaryFile($userId, $seminaryId, $name, $filename, $tmpFilename, $mimetype)
		{
			$uploadId = false;
			$this->db->setAutocommit(false);
			
			try {
				// Create database record
				$this->db->query(
					'INSERT INTO seminaryuploads '.
					'(created_user_id, seminary_id, name, url, mimetype) '.
					'VALUES '.
					'(?, ? ,? ,?, ?)',
					'iisss',
					$userId,
					$seminaryId,
					$name,
					\nre\core\Linker::createLinkParam($filename),
					$mimetype
				);
				$uploadId = $this->db->getInsertId();
			
				// Create filename
				$filename = ROOT.DS.\nre\configs\AppConfig::$dirs['seminaryuploads'].DS.$filename;
				if(!move_uploaded_file($tmpFilename, $filename))
				{
					$this->db->rollback();
					$uploadId = false;
				}
			}
			catch(\nre\exceptions\DatamodelException $e) {
				$this->db->rollback();
				$this->db->setAutocommit(true);
			}
			
			
			$this->db->setAutocommit(true);
			return $uploadId;
		}
		
		
		/**
		 * Get an upload by its ID.
		 * 
		 * @throws	IdNotFoundException
		 * @param	int	$uploadId	ID of the uploaded file
		 * @return	array			Upload data
		 */
		public function getSeminaryuploadById($seminaryuploadId)
		{
			$data = $this->db->query(
				'SELECT id, created, created_user_id, seminary_id, name, url, mimetype, public '.
				'FROM seminaryuploads '.
				'WHERE id = ?',
				'i',
				$seminaryuploadId
			);
			if(empty($data)) {
				throw new \nre\exceptions\IdNotFoundException($seminaryuploadId);
			}
			
			
			return $data[0];
		}
		
		
		/**
		 * Get an upload by its URL.
		 * 
		 * @throws	IdNotFoundException
		 * @param	int	$seminaryId	ID of Seminary
		 * @param	int	$uploadId	ID of the uploaded file
		 * @return	array			Upload data
		 */
		public function getSeminaryuploadByUrl($seminaryId, $seminaryuploadUrl)
		{
			$data = $this->db->query(
				'SELECT id, created, created_user_id, seminary_id, name, url, mimetype, public '.
				'FROM seminaryuploads '.
				'WHERE seminary_id = ? AND url = ?',
				'is',
				$seminaryId,
				$seminaryuploadUrl
			);
			if(empty($data)) {
				throw new \nre\exceptions\IdNotFoundException($seminaryuploadUrl);
			}
			
			
			return $data[0];
		}
		
	}

?>
