* * * $Id: QFileInput.class.php 93 2008-08-28 21:23:02Z erikwinn $ *@version 0.1 * *@copyright (C) 2008 by Erik Winn *@license GPL v.2 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA * * @package QuasiContrib * @subpackage Classes */ class QFileInput extends QControl { /** *@var string - the full path to the temporary uploaded file. */ private $strTempUri = null; /** *@var string - the original name of the file on the client machine. */ private $strFileName = null; /** *@var string - the file extension (if any). */ private $strExtension = null; /** *@var string - the mime type uploaded file (NOTE: according to the browser). */ private $strMimeType = null; /** *@var integer - the size of the uploaded file in bytes. */ private $intSize = null; /** *@var string - the error code associated with this file upload. */ private $intErrorCode = null; private $aryErrorMessages = array( UPLOAD_ERR_OK => 'Upload Successful', UPLOAD_ERR_INI_SIZE => 'File exceeds the upload_max_filesize php directive', UPLOAD_ERR_FORM_SIZE => 'File exceeds the MAX_FILE_SIZE HTML directive', UPLOAD_ERR_PARTIAL => 'File was only partially uploaded', UPLOAD_ERR_NO_FILE => 'No file was uploaded', UPLOAD_ERR_NO_TMP_DIR => 'The temporary upload directory does not exist', UPLOAD_ERR_CANT_WRITE => 'Failed to write file to disk', UPLOAD_ERR_EXTENSION => 'File upload stopped by extension', ); /** *@var array - attributes for the form to indicate upload */ protected $strFormAttributes = array('enctype'=>'multipart/form-data'); /** *@var integer - the maximum size of the uploaded file in bytes. */ private $intMaxFileSize = 1000000; public function ParsePostData() { if ( array_key_exists($this->strControlId, $_FILES) && isset($_FILES[$this->strControlId]['tmp_name']) ) { $this->strTempUri = QType::Cast($_FILES[$this->strControlId]['tmp_name'], QType::String); $this->strFileName = QType::Cast($_FILES[$this->strControlId]['name'], QType::String); $this->strMimeType = QType::Cast($_FILES[$this->strControlId]['type'], QType::String); $this->intSize = QType::Cast($_FILES[$this->strControlId]['size'], QType::Integer); $this->intErrorCode = QType::Cast($_FILES[$this->strControlId]['error'], QType::Integer); $pos = strrpos($this->FileName,'.'); if( false !== $pos ) $this->strExtension = substr($this->FileName, $pos +1); } } public function GetJavaScriptAction() { return "onchange"; } protected function GetControlHtml() { $strToReturn = ''; $this->strTempUri = null; $this->strFileName = null; $this->strExtension = null; $this->strMimeType = null; $this->intSize = null; $this->intErrorCode = null; $strStyleAttributes = $this->GetStyleAttributes(); $strStyle = ''; if (! empty($strStyleAttributes) ) $strStyle = sprintf('style="%s"', $strStyleAttributes); $strToReturn = sprintf('', $this->intMaxFileSize); $strToReturn .= sprintf('', $this->strControlId, $this->strControlId, $this->GetAttributes(), $strStyle); return $strToReturn; } public function Validate() { $this->strValidationError = ""; if ($this->ErrorCode != 0) { $this->strValidationError = $this->ErrorMessage; return false; } if (! $this->blnRequired ) return true; if (strlen($this->strFileName) > 0) return true; if(strlen( $this->strName )) $this->strValidationError = $this->strName . ' ' . QApplication::Translate('is required'); else $this->strValidationError = "Filename is required"; return false; } public function __get($strName) { switch ($strName) { case "TempUri": return $this->strTempUri; case "FileName": return $this->strFileName; case "MimeType": return $this->strMimeType; case "Size": return $this->intSize; case "Extension": return $this->strExtension; case "ErrorCode": return $this->intErrorCode; case "ErrorMessage": if($this->intErrorCode !== null) return $this->aryErrorMessages[$this->intErrorCode]; return "Internal Error - Error code unset."; case "MaxFileSize": return $this->intMaxFileSize; default: try { return parent::__get($strName); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } } } public function __set($strName, $mixValue) { $this->blnModified = true; switch ($strName) { case 'MaxFileSize': try { return ($this->intMaxFileSize = QType::Cast($mixValue, QType::Integer )); } catch (QInvalidCastException $objExc) { $objExc->IncrementOffset(); throw $objExc; } default: try { parent::__set($strName, $mixValue); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } break; } } } ?>