/** * Creates the cache directory on demand * * @param sfFilebasePluginDirectory | string: The pathname of the cache directory. * @return sfFilebasePluginDirectory $cache_directory */ public function initCacheDirectory($cache_directory) { $this->cacheDirectory = $this->filebase->getFilebaseFile($cache_directory); if (!$this->cacheDirectory->fileExists()) { $this->cacheDirectory = $this->filebase->mkDir($this->cacheDirectory); } return $this->cacheDirectory; }
/** * Returns filename for a cached thumbnail, calculated * by its properties and dimensions. * * @param sfFilebasePluginFile $file * @param array $thumbnail_properties * @return sfFilebasePluginImage $filename */ public function getThumbnailFileinfo(sfFilebasePluginImage $file, $dimensions, $mime) { $thumbnail_properties = $this->getScaledImageData($file, $dimensions); // Wrap in sfFilebasePluginImage because isImage may return false if file does not exist. return new sfFilebasePluginThumbnail($this->filebase->getFilebaseFile($this->filebase->getCacheDirectory() . DIRECTORY_SEPARATOR . $this->filebase->getHashForFile($file) . '_' . $thumbnail_properties['new_width'] . '_' . $thumbnail_properties['new_height'] . '.' . (sfFilebasePluginUtil::getExtensionByMime($mime) === null ? $thumbnail_properties['extension'] : sfFilebasePluginUtil::getExtensionByMime($mime))), $this->filebase, $file); }
/** * Moves an uploaded File to specified Destination. * Inclusion and exclusion rules consist of regex-strings, * they are used to check the target filenames against them. * Exclusion: Matched filenames throw exceptions. * Inclusion: Matched filenames will be passed as valid filenames. * * You should wrap this method into a try-catch block because many * things can go wrong during or after the upload, so if you upload * many files and did not validate them before, this would be a good * starting point do to some "low level" validation. * * $destination can be a string (absolute or relative pathname) or an * instance of sfFilebasePluginFile, it is the directory, not the full pathName of * the new file. The file can be renamed by setting $file_name, otherwise * the original name will be taken as filename. * * @param mixed $tmp_file * @param mixed $destination_directory: The directory the file will be moved in. * @param boolean $allow_overwrite True if existing files should be overwritten * @param array $inclusion_rules * @param array $exclusion_rules * @param string $file_name: If given, file will be renamed when moving. * @throws sfFilebasePluginException * @return sfFilebasePluginFile $moved_file */ public function moveUploadedFile(sfFilebasePluginUploadedFile $tmp_file, $destination_directory, $allow_overwrite = true, $chmod = 0777, array $inclusion_rules = array(), $exclusion_rules = array(), $file_name = null) { $destination_directory = $this->filebase->getFilebaseFile($destination_directory); // Error handling if ($tmp_file->isError()) { switch ($tmp_file->getError()) { case sfFilebasePluginUploadedFile::UPLOAD_ERR_EXTENSION: throw new sfFilebasePluginException('Upload error thrown by extension.', sfFilebasePluginUploadedFile::UPLOAD_ERR_EXTENSION); case sfFilebasePluginUploadedFile::UPLOAD_ERR_PARTIAL: throw new sfFilebasePluginException('Upload error: Upload interrupted.', sfFilebasePluginUploadedFile::UPLOAD_ERR_PARTIAL); case sfFilebasePluginUploadedFile::UPLOAD_ERR_CANT_WRITE: throw new sfFilebasePluginException('Upload error: Cannot write temporary file.', sfFilebasePluginUploadedFile::UPLOAD_ERR_CANT_WRITE); case sfFilebasePluginUploadedFile::UPLOAD_ERR_EXTENSION: throw new sfFilebasePluginException('Upload error: Extension error.', sfFilebasePluginUploadedFile::UPLOAD_ERR_EXTENSION); case sfFilebasePluginUploadedFile::UPLOAD_ERR_FORM_SIZE: throw new sfFilebasePluginException('Upload error: Form size exceeded.', sfFilebasePluginUploadedFile::UPLOAD_ERR_FORM_SIZE); case sfFilebasePluginUploadedFile::UPLOAD_ERR_INI_SIZE: throw new sfFilebasePluginException('Upload error: Ini size exceeded.', sfFilebasePluginUploadedFile::UPLOAD_ERR_INI_SIZE); case sfFilebasePluginUploadedFile::UPLOAD_ERR_NO_FILE: throw new sfFilebasePluginException('Upload error: no file was uploaded.', sfFilebasePluginUploadedFile::UPLOAD_ERR_NO_FILE); case sfFilebasePluginUploadedFile::UPLOAD_ERR_NO_TMP_DIR: throw new sfFilebasePluginException('Upload error: There is no temp dir.', sfFilebasePluginUploadedFile::UPLOAD_ERR_NO_TMP_DIR); return false; } } // Validation, excuting inclusion rules foreach ($inclusion_rules as $rule) { if (!preg_match($rule, $tmp_file->getOriginalName())) { throw new sfFilebasePluginException(sprintf('Inclusion-Validation failed while uploading file %s: Rule %s', $tmp_file->getOriginalName(), $rule)); } } // Valdating using exclusion rules foreach ($exclusion_rules as $rule) { if (preg_match($rule, $tmp_file->getOriginalName())) { throw new sfFilebasePluginException(sprintf('Exclusion-Validation failed while uploading file %s: Rule %s', $tmp_file->getOriginalName(), $rule)); } } if (!$destination_directory instanceof sfFilebasePluginDirectory) { throw new sfFilebasePluginException(sprintf('Destination %s is not a directory.', $destination_directory->getPathname())); } $destination = null; // Filename given? Rename file... if ($file_name === null) { $destination = $this->filebase->getFilebaseFile($destination_directory->getPathname() . '/' . $tmp_file->getOriginalName()); } else { $file_name = (string) $file_name; if (strlen($file_name > 0)) { $destination = $this->filebase->getFilebaseFile($destination_directory->getPathname() . '/' . $file_name); } } if (!$this->filebase->isInFilebase($destination)) { throw new sfFilebasePluginException(sprintf('Destination %s does not lie within Filebase %s, access denied due to security reasons.', $destination->getPathname(), $this->filebase->getPathname())); } if ($destination->fileExists()) { if ($allow_overwrite) { if (!$destination->isWritable()) { throw new sfFilebasePluginException(sprintf('File %s is write protected.', $destination->getPathname())); } } else { throw new sfFilebasePluginException(sprintf('Destination file %s already exists', $destination->getPathname())); } } else { if (!$destination_directory->isWritable()) { throw new sfFilebasePluginException(sprintf('Destination directory %s is write protected', $destination_directory->getPathname())); } } if (!@move_uploaded_file($tmp_file->getTempName(), $destination->getPathname())) { throw new sfFilebasePluginException(sprintf('Error while moving uploaded file %s', $tmp_file->getOriginalName())); } $destination->chmod($chmod); return $destination; }
$t->isa_ok($f->mkDir('my_dir'), 'sfFilebasePluginDirectory', 'Directory "my_dir" successfully created by sfFilebasePlugin::mkDir().'); $t->isa_ok($dir = $dir->rename('my_other_dir'), 'sfFilebasePluginDirectory', 'Directory "my_dir" was successfully renamed to "my_other_dir"'); $t->isa_ok($dir = $dir->rename('my_dir'), 'sfFilebasePluginDirectory', 'Directory re-renamed to "my_dir"'); ### CHMOD $t->diag('Let\'s chmod the directory'); $t->isa_ok($dir->chmod(0755), 'sfFilebasePluginDirectory', 'chmod() 0755 successful.'); $t->isa_ok($dir->chmod(0777), 'sfFilebasePluginDirectory', 'chmod() 0777 successful.'); ### File paths $t->diag('I want to get the paths'); $t->isa_ok($path = $dir->getRelativePathFromFilebaseDirectory(), 'string', 'getRelativePathFromFilebaseDirectory() returns string'); $t->is(file_exists($f . '/' . $path), true, 'The path was successfully rendered: file_exists() on ' . $f . '/' . $path . ' returns true'); $t->isa_ok($path = $dir->getAbsolutePathFromWebroot(), 'string', 'getAbsolutePathFromWebroot() returns string'); ### Copy Files $t->diag('I want to perform some file operations, but before that i have to copy a file into filebase...'); $t->diag('Fetching test-image'); $t->isa_ok($image = $f->getFilebaseFile(dirname(__FILE__) . '/' . 'test.JPG'), 'sfFilebasePluginImage', 'Image fetched ./test.JPG as instance of sfFilebasePluginImage'); $t->diag('Copying test-image to filebase'); $t->isa_ok($copy = $image->copy($dir . '/test.jpg'), 'sfFilebasePluginImage', 'copy() returns instanceof sfFilebasePluginImage'); $t->diag('Does the copied image exist at the destinated location?'); $t->is($copy->fileExists(), true, 'fileExists() returns true'); $t->diag('Let\'s create a thumbnail...'); $t->isa_ok($tn = $copy->getThumbnail(array('width' => 20)), 'sfFilebasePluginThumbnail', 'Thumbnail created as instanceof sfFilebasePluginThumbnail'); $t->diag('This is nonsense: Open thumbnail and print its content to stdout:'); $t->diag($tn->openFile()->fileGetContents() . ".."); $t->is($tn->fileExists(), true, 'sfFilebasePluginThumbnail::fileExists() returns true.'); $t->isa_ok($copy = $copy->rename('renamed_image.jpg'), 'sfFilebasePluginImage', 'Performing a rename(), returns instanceof sfFilebasePluginImage.'); $t->is($copy->fileExists(), true, 'fileExists() returns true, so renamed image exists in file system.'); $t->diag('Lets resize the original image'); $t->isa_ok($copy->resize(array('1000')), 'sfFilebasePluginImage', 'Resize ok, resize() returns instance of sfFilebasePluginImage'); $t->is($copy->getWidth(), 1000, 'Image now has 1000 pixels width.'); $t->is($copy->getMimeType(), 'image/jpeg', 'getMimeType() says: Image has mime-type image/jpeg');
/** * Sets the pathname for one tuple * * @param sfFilebasePluginFile | string $file * @return Doctrine_Template_File */ public function setFile($file) { $file = $this->filebase->getFilebaseFile($file); $this->_invoker[$this->getOption('name')] = $file->getRelativePathFromFilebaseDirectory(); return $this; }