<?php

/**
 * Generated: 2014-03-24 15:01:35
 * @author Rtn_Module_Tool
 */
class Forms_Controller_IndexController extends Eppe_Frontend_Controller_Action {

	private $_fieldsData;
	private $_uploadFileName;
	private $_uploadFileType;
	private $_uploadFileOrginalName;
	private $_uploadFileId;

	public function ajaxAddFormDataAction() {
		$response = array();
		$post = $this->getRequest()->getPost();
		if (!empty($post["0;1;0"]))
			die();
		unset($post["0;1;0"]);

		$formId = $post['id'];
		unset($post['id']);

		//czyszczenie post'a
		foreach ($post as $key => $element) {
			if(preg_match_all('/;/i', $key) != 2){
				unset($post[$key]);
			}
		}
		$fieldsReq = array();
		$success = true;
		foreach ($post as $name => $filed) {

			list($id, $req, $skip) = explode(';', $name);
			if ($req == 1 && $skip == 0) {
				if (strlen($filed) == 0) { //sprawdzenie czy jest puste
					$fieldsReq[$name] = 1;
					$success = false;
				} else {
					$fieldsReq[$name] = 0;
				}
			}
		}

		if ($success) {
			$formBean = R::findOne('forms', "WHERE `id` = $formId");
			$saveFileCode = $this->_saveFile($formBean);
			$this->_sendMails($formBean, $post);
			$this->_insertData($formId, $post);
			$response = array('success' => true,
			    'fields' => $fieldsReq,
			    'message' => '<div class="form-msg msg-ok">
            <span class="semibold">Dziękujemy, Twoje zgłoszenie zostało wysłane.</span> 
        </div>');
		} else {
			$message = '<div class="form-msg msg-error">
            <span class="semibold">Niestety, nie możemy wysłać Twojego zgłoszenia</span>, proszę uzupełnić brakujące pola.';

			$response = array('success' => false,
			    'fields' => $fieldsReq,
			    'message' => $message
			);
		}
		echo Zend_Json::encode($response);
		exit;
		
	}

	private function _saveFile($formBean) {
		reset($_FILES);
		$key = key($_FILES);
		
		if (isset($_FILES[$key]) && $_FILES[$key]["error"] == UPLOAD_ERR_OK) {
			############ Edit settings ##############
			$UploadDirectory = getcwd() . Forms_Module_Module::getInstance()->getFrontFilesPath(); //specify upload directory ends with / (slash)
			##########################################
			/*
			  Note : You will run into errors or blank page if "memory_limit" or "upload_max_filesize" is set to low in "php.ini".
			  Open "php.ini" file, and search for "memory_limit" or "upload_max_filesize" limit
			  and set them adequately, also check "post_max_size".
			 */

			//check if this is an ajax request
			if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
				return 7;
			}


			//Is file size is less than allowed size. 5Mb
			if ($_FILES[$key]["size"] > 5242880) {
				die("Wgrywany plik jest za duży");
				return 6;
			}

			//allowed file type Server side check
			switch (strtolower($_FILES[$key]['type'])) {
				//allowed file types
				case 'image/png':
				case 'image/gif':
				case 'image/jpeg':
				case 'image/pjpeg':
				case 'text/plain':
				case 'text/html': //html file
				case 'application/x-zip-compressed':
				case 'application/pdf':
				case 'application/msword':
				case 'application/vnd.ms-excel':
				case 'video/mp4':
					$this->_uploadFileType = strtolower($_FILES[$key]['type']);
					break;
				default:
//					die('Nie wsipierany rodzaj pliku!'); //output error
					return 5;
			}

			$this->_uploadFileOrginalName = $File_Name = strtolower($_FILES[$key]['name']);
			$File_Ext = substr($File_Name, strrpos($File_Name, '.')); //get file extention
			$Random_Number = rand(0, 9999999999); //Random number to be added to name.
			$NewFileName = $Random_Number . '-' . $formBean->id . $File_Ext; //new file name
			if (move_uploaded_file($_FILES[$key]['tmp_name'], $UploadDirectory . $NewFileName)) {
				// do other stuff ><> Ryby ><> ><>
				$data = array();
				$data['date'] = date('Y-m-d H:i:s');
				$data['forms_id'] = $formBean->id;
				$data['name'] = $UploadDirectory . $NewFileName;
				$data['orginalname'] = $this->_uploadFileOrginalName;
				$data['type'] = $this->_uploadFileType;

				$bean = R::dispense('formfiles');
				$bean->setFromArray($data);
				$this->_uploadFileId = R::store($bean);

				$this->_uploadFileName = $data['name'];
				return 0;
			} else {
//				die('Błąd. Przenioszenie pliku.');
				return 1;
			}
		} else {
//			die('Nie prawidłowe paramertu uploadu w konfiguracji');
			return 2;
		}
	}

	private function _sendMails($formBean, $post) {
		if ($formBean->emails) {
			$data = $this->_getFieldsData($post);
			$mail = new Zend_Mail('UTF-8');
			$mail->setSubject("OIL - Formularz: $formBean->name ($formBean->data)");
			$mail->setFrom('webservice@oil.szczecin.pl', 'Strona OIL Szczecin');

			$mails = explode(';', $formBean->emails);
			$mail->addTo($mails);

			$bodyHtml = "<h1>Formularz: $formBean->name ($formBean->data)</h1><h2>Dane z formularza</h2><p>";
			foreach ($data as $key => $value) {
				$bodyHtml .= "<strong>$key</strong> $value <br />";
			}
			
			if($this->_uploadFileName){
				$attachment = new Zend_Mime_Part(file_get_contents($this->_uploadFileName));
				$attachment->type = $this->_uploadFileType;
				$attachment->disposition = Zend_Mime::DISPOSITION_ATTACHMENT;
				$attachment->encoding = Zend_Mime::ENCODING_BASE64;
				$attachment->filename = $this->_uploadFileOrginalName;
				
				$mail->addAttachment($attachment);
			}
			
			$mail->setBodyHtml($bodyHtml);
			$mail->send();
		}
	}

	private function _getTransportSMTP() {
		$config = array(
		    'ssl' => 'ssl',
		    'port' => '465',
		    'auth' => 'login',
		    'username' => '@gmail.com',
		    'password' => ''
		);
		return new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config);
	}

	private function _insertData($formId, $post) {
		$data = $this->_getFieldsData($post);

		$formData = R::dispense('formdata');
		$formData->data = date('Y-m-d H:i:s');
		$formData->forms_id = $formId;
		$formData->fields = json_encode($data);
		if($this->_uploadFileId){
			$formData->file = $this->_uploadFileId;
		}
		
		
		R::store($formData);
	}

	private function _getFieldsData($post) {
		if (empty($this->_fieldsData)) {
			$data = array();
			foreach ($post as $name => $filed) {
				list($id, $req, $skip) = explode(';', $name);
				$fieldBean = R::findOne('formfields', "WHERE `id` = $id");
				$data["$fieldBean->label"] = $filed;
			}
			$this->_fieldsData = $data;
		}

		return $this->_fieldsData;
	}

}
