<?php
/**
 * [PHPFOX_HEADER]
 */

defined('PHPFOX') or exit('NO DICE!');

/**
 * 
 * 
 * @copyright		[PHPFOX_COPYRIGHT]
 * @author  		Raymond Benc
 * @package  		Module_Attachment
 * @version 		$Id: frame.class.php 6590 2013-09-05 12:29:59Z Miguel_Espinoza $
 */
class Attachment_Component_Controller_Frame extends Phpfox_Component 
{
	/**
	 * Controller
	 */
	public function process()
	{
		if (!isset($_FILES['file']) && isset($_FILES['Filedata']))
		{
			$_FILES['file'] = array();
			$_FILES['file']['error']['file'] = UPLOAD_ERR_OK;
			$_FILES['file']['name']['file'] = $_FILES['Filedata']['name'];
			$_FILES['file']['type']['file'] = $_FILES['Filedata']['type'];
			$_FILES['file']['tmp_name']['file'] = $_FILES['Filedata']['tmp_name'];
			$_FILES['file']['size']['file'] = $_FILES['Filedata']['size'];
		}
		elseif (!isset($_FILES['file']))
		{
			exit;
		}

		$oFile = Phpfox_File::instance();
		$oImage = Phpfox_Image::instance();
		
		$oAttachment = Attachment_Service_Process::instance();
		
		$sIds = '';
        $textareaId =  $this->request()->get('id');
		$sStr = '';
		$iUploaded = 0;
		$iFileSizes = 0;
		foreach ($_FILES['file']['error'] as $iKey => $sError)
		{
			if ($sError == UPLOAD_ERR_OK) 
			{				
				$aValid = array('gif', 'png', 'jpg');
				if ($this->request()->get('custom_attachment') == 'photo')
				{
					$aValid = array('gif', 'png', 'jpg');	
				}

				if ($this->request()->get('input') == '' && $this->request()->get('custom_attachment') == '')
				{
					$aValid = Attachment_Service_Type::instance()->getTypes();
				}
				
				$iMaxSize = null;
				
				if (Phpfox::getUserParam('attachment.item_max_upload_size') !== 0)
				{
					$iMaxSize = (Phpfox::getUserParam('attachment.item_max_upload_size') / 1024);
				}
				
				$aImage = $oFile->load('file[' . $iKey . ']', $aValid, $iMaxSize);
				
				if ($aImage !== false)
				{
					if (!Attachment_Service_Attachment::instance()->isAllowed())
					{
						echo '<script type="text/javascript">window.parent.$(\'#' . $this->request()->get('upload_id') . '\').parents(\'.js_upload_attachment_parent_holder\').html(\'<div class="error_message">' . _p('failed_limit_reached') . '</div>\');</script>';
						
						continue;
					}
					
					$iUploaded++;
					$bIsImage = in_array($aImage['ext'], Phpfox::getParam('attachment.attachment_valid_images'));
					
					$iId = $oAttachment->add(array(
							'category' => $this->request()->get('category_name'),
							'file_name' => $_FILES['file']['name'][$iKey],						
							'extension' => $aImage['ext'],
							'is_image' => $bIsImage
						)
					);
					
					$sIds .= $iId . ',';
					
					$sFileName = $oFile->upload('file[' . $iKey . ']', Phpfox::getParam('core.dir_attachment'), $iId);
                    if (Phpfox::isModule('photo')){
                        Photo_Service_Photo::instance()->cropMaxWidth(Phpfox::getParam('core.dir_attachment') . sprintf($sFileName, ''));
                    }
					$sFileSize = filesize(Phpfox::getParam('core.dir_attachment') . sprintf($sFileName, ''));
					$iFileSizes += $sFileSize;				
					
					$oAttachment->update(array(
						'file_size' => $sFileSize,
						'destination' => $sFileName,
						'server_id' => Phpfox_Request::instance()->getServer('PHPFOX_SERVER_ID')
					), $iId);
					
					if ($bIsImage)
					{
						$sThumbnail = Phpfox::getParam('core.dir_attachment') . sprintf($sFileName, '_thumb');
						$sViewImage = Phpfox::getParam('core.dir_attachment') . sprintf($sFileName, '_view');
						
						$oImage->createThumbnail(Phpfox::getParam('core.dir_attachment') . sprintf($sFileName, ''), $sThumbnail, Phpfox::getParam('attachment.attachment_max_thumbnail'), Phpfox::getParam('attachment.attachment_max_thumbnail'));
						$oImage->createThumbnail(Phpfox::getParam('core.dir_attachment') . sprintf($sFileName, ''), $sViewImage, Phpfox::getParam('attachment.attachment_max_medium'), Phpfox::getParam('attachment.attachment_max_medium'));
						
						$iFileSizes += (filesize($sThumbnail) + filesize($sThumbnail));
					}
	

                    echo '<script type="text/javascript">window.parent.$(\'#' . $this->request()->get('upload_id') . '\').find(\'.js_upload_form_image_holder:first\').html(\'<div class="js_upload_form_image_holder_image">' . Phpfox::getLib('image.helper')->display(array('theme' => 'misc/accept.png')) . '</div>Completed ' . strip_tags($_FILES['file']['name'][$iKey]) . '\');</script>';
				}
				else 
				{
					echo '<script type="text/javascript">window.parent.$(\'#' . $this->request()->get('upload_id') . '\').find(\'.js_upload_form_image_holder:first\').html(\'<div class="js_upload_form_image_holder_image">' . Phpfox::getLib('image.helper')->display(array('theme' => 'misc/delete.png')) . '</div>Failed ' . strip_tags($_FILES['file']['name'][$iKey]) . ' <br /> <div class="error_message">' . implode(' ', Phpfox_Error::get()) . '</div>\');</script>';
				}
			}
		}
		
		if (!$iUploaded)
		{
			exit;
		}	
		
		if ($this->request()->get('custom_attachment') == 'photo' || $this->request()->get('custom_attachment') == 'video')
		{
			$aAttachment = Phpfox_Database::instance()->select('*')
				->from(Phpfox::getT('attachment'))
				->where('attachment_id = ' . (int) $iId)
				->execute('getSlaveRow');
			
			if ($this->request()->get('custom_attachment') == 'photo')
			{				
				$sImagePath = Phpfox::getLib('image.helper')->display(array('server_id' => $aAttachment['server_id'], 'path' => 'core.url_attachment', 'file' => $aAttachment['destination'], 'suffix' => '_view', 'max_width' => 'attachment.attachment_max_medium', 'max_height' =>'attachment.attachment_max_medium', 'return_url' => true));
				
				echo '
				<script type="text/javascript">
					window.parent.Editor.setId("'.$textareaId.'").insert({is_image: true, name: \'\', id: \'' . $iId . ':view\', type: \'image\', path: \'' . $sImagePath . '\'});
				</script>
				';				
			}
			else
			{
				echo '
				<script type="text/javascript">
					window.parent.Editor.setId("'.$textareaId.'").insert({is_image: true, name: \'\', id: \'' . $iId . '\', type: \'video\'});
				</script>
				';				
			}			

		}
		else
		{
			ob_start();
			
			Phpfox::getBlock('attachment.list', array('sIds' => $sIds, 'bCanUseInline' => true, 'attachment_no_header' => true, 'attachment_edit' => true, 'sAttachmentInput' => $this->request()->get('input')));
			
			$sContent = ob_get_contents();
			
			ob_clean();
			
			$sAttachmentObject = $this->request()->get('attachment_obj_id');
			
			if (!empty($sAttachmentObject))
			{
				echo '
				<script type="text/javascript">
					var $oParent = window.parent.$(\'#' . $this->request()->get('attachment_obj_id') . '\');
					$oParent.find(\'.js_attachment:first\').val($oParent.find(\'.js_attachment:first\').val() + \'' . $sIds . '\');
					$oParent.find(\'.js_attachment_list:first\').show();
					$oParent.find(\'.js_attachment_list_holder:first\').prepend(\'' . str_replace("'", "\'", str_replace(array("\n", "\t", "\r"), '', $sContent)) . '\');
					window.parent.$Core.loadInit();
				</script>
				';			
			}
			
			if ($this->request()->get('category_name') == 'theme')
			{
				echo '
				<script type="text/javascript">
					var $oParent = window.parent.$(\'#' . $this->request()->get('input') . '\');
					$oParent.val(\'' . Phpfox::getParam('core.url_attachment') . sprintf($sFileName, '') . '\');
					// window.parent.on_change_image($oParent);
					$oParent.focus();
					$oParent.blur();
					window.parent.tb_remove();
				</script>
				';						
			}
		}
	
		// Update user space usage
		User_Service_Space::instance()->update(Phpfox::getUserId(), 'attachment', $iFileSizes);
		
		if ($this->request()->get('attachment_inline'))
		{
			echo '<script type="text/javascript">window.parent.$Core.updateInlineBox();</script>';
		}

		exit;
	}
}