Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/lib/zend/Zend/Validate/File/Upload.php
Go to the documentation of this file.
00001 <?php
00025 require_once 'Zend/Validate/Abstract.php';
00026 
00035 class Zend_Validate_File_Upload extends Zend_Validate_Abstract
00036 {
00040     const INI_SIZE       = 'fileUploadErrorIniSize';
00041     const FORM_SIZE      = 'fileUploadErrorFormSize';
00042     const PARTIAL        = 'fileUploadErrorPartial';
00043     const NO_FILE        = 'fileUploadErrorNoFile';
00044     const NO_TMP_DIR     = 'fileUploadErrorNoTmpDir';
00045     const CANT_WRITE     = 'fileUploadErrorCantWrite';
00046     const EXTENSION      = 'fileUploadErrorExtension';
00047     const ATTACK         = 'fileUploadErrorAttack';
00048     const FILE_NOT_FOUND = 'fileUploadErrorFileNotFound';
00049     const UNKNOWN        = 'fileUploadErrorUnknown';
00055     protected $_messageTemplates = array(
00056         self::INI_SIZE       => "File '%value%' exceeds the defined ini size",
00057         self::FORM_SIZE      => "File '%value%' exceeds the defined form size",
00058         self::PARTIAL        => "File '%value%' was only partially uploaded",
00059         self::NO_FILE        => "File '%value%' was not uploaded",
00060         self::NO_TMP_DIR     => "No temporary directory was found for file '%value%'",
00061         self::CANT_WRITE     => "File '%value%' can't be written",
00062         self::EXTENSION      => "A PHP extension returned an error while uploading the file '%value%'",
00063         self::ATTACK         => "File '%value%' was illegally uploaded. This could be a possible attack",
00064         self::FILE_NOT_FOUND => "File '%value%' was not found",
00065         self::UNKNOWN        => "Unknown error while uploading file '%value%'"
00066     );
00067 
00072     protected $_files = array();
00073 
00084     public function __construct($files = array())
00085     {
00086         if ($files instanceof Zend_Config) {
00087             $files = $files->toArray();
00088         }
00089 
00090         $this->setFiles($files);
00091     }
00092 
00100     public function getFiles($file = null)
00101     {
00102         if ($file !== null) {
00103             $return = array();
00104             foreach ($this->_files as $name => $content) {
00105                 if ($name === $file) {
00106                     $return[$file] = $this->_files[$name];
00107                 }
00108 
00109                 if ($content['name'] === $file) {
00110                     $return[$name] = $this->_files[$name];
00111                 }
00112             }
00113 
00114             if (count($return) === 0) {
00115                 require_once 'Zend/Validate/Exception.php';
00116                 throw new Zend_Validate_Exception("The file '$file' was not found");
00117             }
00118 
00119             return $return;
00120         }
00121 
00122         return $this->_files;
00123     }
00124 
00131     public function setFiles($files = array())
00132     {
00133         if (count($files) === 0) {
00134             $this->_files = $_FILES;
00135         } else {
00136             $this->_files = $files;
00137         }
00138 
00139         foreach($this->_files as $file => $content) {
00140             if (!isset($content['error'])) {
00141                 unset($this->_files[$file]);
00142             }
00143         }
00144 
00145         return $this;
00146     }
00147 
00157     public function isValid($value, $file = null)
00158     {
00159         $this->_messages = null;
00160         if (array_key_exists($value, $this->_files)) {
00161             $files[$value] = $this->_files[$value];
00162         } else {
00163             foreach ($this->_files as $file => $content) {
00164                 if (isset($content['name']) && ($content['name'] === $value)) {
00165                     $files[$file] = $this->_files[$file];
00166                 }
00167 
00168                 if (isset($content['tmp_name']) && ($content['tmp_name'] === $value)) {
00169                     $files[$file] = $this->_files[$file];
00170                 }
00171             }
00172         }
00173 
00174         if (empty($files)) {
00175             return $this->_throw($file, self::FILE_NOT_FOUND);
00176         }
00177 
00178         foreach ($files as $file => $content) {
00179             $this->_value = $file;
00180             switch($content['error']) {
00181                 case 0:
00182                     if (!is_uploaded_file($content['tmp_name'])) {
00183                         $this->_throw($file, self::ATTACK);
00184                     }
00185                     break;
00186 
00187                 case 1:
00188                     $this->_throw($file, self::INI_SIZE);
00189                     break;
00190 
00191                 case 2:
00192                     $this->_throw($file, self::FORM_SIZE);
00193                     break;
00194 
00195                 case 3:
00196                     $this->_throw($file, self::PARTIAL);
00197                     break;
00198 
00199                 case 4:
00200                     $this->_throw($file, self::NO_FILE);
00201                     break;
00202 
00203                 case 6:
00204                     $this->_throw($file, self::NO_TMP_DIR);
00205                     break;
00206 
00207                 case 7:
00208                     $this->_throw($file, self::CANT_WRITE);
00209                     break;
00210 
00211                 case 8:
00212                     $this->_throw($file, self::EXTENSION);
00213                     break;
00214 
00215                 default:
00216                     $this->_throw($file, self::UNKNOWN);
00217                     break;
00218             }
00219         }
00220 
00221         if (count($this->_messages) > 0) {
00222             return false;
00223         } else {
00224             return true;
00225         }
00226     }
00227 
00235     protected function _throw($file, $errorType)
00236     {
00237         if ($file !== null) {
00238             if (is_array($file) and !empty($file['name'])) {
00239                 $this->_value = $file['name'];
00240             }
00241         }
00242 
00243         $this->_error($errorType);
00244         return false;
00245     }
00246 }
 All Data Structures Namespaces Files Functions Variables Enumerations