_files = $this->_prepareFiles($_FILES); $this->addValidator('Upload', null, $this->_files); if (is_array($options)) { $this->setOptions($options); } } /** * Sets a validator for the class, erasing all previous set * * @param string|array $validator Validator to set * @param string|array $files Files to limit this validator to * @return Zend_File_Transfer_Adapter */ public function setValidators(array $validators, $files = null) { $this->clearValidators(); $this->addValidator('Upload', null, $this->_files); return $this->addValidators($validators, $files); } /** * Send the file to the client (Download) * * @param string|array $options Options for the file(s) to send * @return void * @throws Zend_File_Transfer_Exception Not implemented */ public function send($options = null) { require_once 'Zend/File/Transfer/Exception.php'; throw new Zend_File_Transfer_Exception('Method not implemented'); } /** * Receive the file from the client (Upload) * * @param string|array $files (Optional) Files to receive * @return bool */ public function receive($files = null) { if (!$this->isValid($files)) { return false; } $check = $this->_getFiles($files); foreach ($check as $file => $content) { $directory = ''; $destination = $this->getDestination($file); if ($destination !== null) { $directory = $destination . DIRECTORY_SEPARATOR; } // Should never return false when it's tested by the upload validator if (!move_uploaded_file($content['tmp_name'], ($directory . $content['name']))) { if ($content['options']['ignoreNoFile']) { $this->_files[$file]['received'] = true; $this->_files[$file]['filtered'] = true; continue; } $this->_files[$file]['received'] = false; return false; } $this->_files[$file]['received'] = true; if (!$this->_filter($file)) { $this->_files[$file]['filtered'] = false; return false; } $this->_files[$file]['filtered'] = true; } return true; } /** * Checks if the file was already sent * * @param string|array $file Files to check * @return bool * @throws Zend_File_Transfer_Exception Not implemented */ public function isSent($files = null) { require_once 'Zend/File/Transfer/Exception.php'; throw new Zend_File_Transfer_Exception('Method not implemented'); } /** * Checks if the file was already received * * @param string|array $files (Optional) Files to check * @return bool */ public function isReceived($files = null) { $files = $this->_getFiles($files); foreach ($files as $key => $content) { if ($content['received'] !== true) { return false; } } return true; } /** * Checks if the file was already filtered * * @param string|array $files (Optional) Files to check * @return bool */ public function isFiltered($files = null) { $files = $this->_getFiles($files); foreach ($files as $key => $content) { if ($content['filtered'] !== true) { return false; } } return true; } /** * Has a file been uploaded ? * * @param array|string|null $file * @return bool */ public function isUploaded($files = null) { $files = $this->_getFiles($files); foreach ($files as $file) { if (empty($file['name'])) { return false; } } return true; } /** * Returns the actual progress of file up-/downloads * * @return string Returns the state * @return int * @throws Zend_File_Transfer_Exception Not implemented */ public function getProgress() { require_once 'Zend/File/Transfer/Exception.php'; throw new Zend_File_Transfer_Exception('Method not implemented'); } /** * Prepare the $_FILES array to match the internal syntax of one file per entry * * @param array $files * @return array */ protected function _prepareFiles(array $files = array()) { $result = array(); foreach ($files as $form => $content) { if (is_array($content['name'])) { foreach ($content as $param => $file) { foreach ($file as $number => $target) { $result[$form . '_' . $number . '_'][$param] = $target; $result[$form . '_' . $number . '_']['options'] = $this->_options; $result[$form . '_' . $number . '_']['validated'] = false; $result[$form . '_' . $number . '_']['received'] = false; $result[$form . '_' . $number . '_']['filtered'] = false; } } } else { $result[$form] = $content; $result[$form]['options'] = $this->_options; $result[$form]['validated'] = false; $result[$form]['received'] = false; $result[$form]['filtered'] = false; } } return $result; } }