*
*
* $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;
}
}
}
?>