From 8f4686c3adf77553ee07810bb771d31b82ac3bf9 Mon Sep 17 00:00:00 2001 From: Marcel Werk Date: Sun, 12 Aug 2012 17:53:35 +0200 Subject: [PATCH] Added support for avatar uploads --- ...aultUploadFileValidationStrategy.class.php | 59 +++++++++++++++++++ .../IUploadFileValidationStrategy.class.php | 22 +++++++ .../lib/system/upload/UploadFile.class.php | 27 ++------- .../lib/system/upload/UploadHandler.class.php | 4 +- 4 files changed, 88 insertions(+), 24 deletions(-) create mode 100644 wcfsetup/install/files/lib/system/upload/DefaultUploadFileValidationStrategy.class.php create mode 100644 wcfsetup/install/files/lib/system/upload/IUploadFileValidationStrategy.class.php diff --git a/wcfsetup/install/files/lib/system/upload/DefaultUploadFileValidationStrategy.class.php b/wcfsetup/install/files/lib/system/upload/DefaultUploadFileValidationStrategy.class.php new file mode 100644 index 0000000000..274b72d49c --- /dev/null +++ b/wcfsetup/install/files/lib/system/upload/DefaultUploadFileValidationStrategy.class.php @@ -0,0 +1,59 @@ + + * @package com.woltlab.wcf + * @subpackage system.upload + * @category Community Framework + */ +class DefaultUploadFileValidationStrategy implements IUploadFileValidationStrategy { + /** + * allowed max size + * @var integer + */ + protected $maxFilesize = 0; + + /** + * allowed file extensions + * @var array + */ + protected $fileExtensions = array(); + + /** + * Creates a new DefaultUploadFileValidationStrategy object. + * + * @param integer $maxFilesize + * @param array $fileExtensions + */ + public function __construct($maxFilesize, array $fileExtensions) { + $this->maxFilesize = $maxFilesize; + $this->fileExtensions = $fileExtensions; + } + + /** + * @see wcf\system\upload\IUploadFileValidationStrategy::validate() + */ + public function validate(UploadFile $uploadFile) { + if ($uploadFile->getErrorCode() != 0) { + $uploadFile->setValidationErrorType('uploadFailed'); + return false; + } + + if ($uploadFile->getFilesize() > $this->maxFilesize) { + $uploadFile->setValidationErrorType('tooLarge'); + return false; + } + + if (!in_array($uploadFile->getFileExtension(), $this->fileExtensions)) { + $uploadFile->setValidationErrorType('invalidExtension'); + return false; + } + + return true; + } +} diff --git a/wcfsetup/install/files/lib/system/upload/IUploadFileValidationStrategy.class.php b/wcfsetup/install/files/lib/system/upload/IUploadFileValidationStrategy.class.php new file mode 100644 index 0000000000..3e74cb80a4 --- /dev/null +++ b/wcfsetup/install/files/lib/system/upload/IUploadFileValidationStrategy.class.php @@ -0,0 +1,22 @@ + + * @package com.woltlab.wcf + * @subpackage system.upload + * @category Community Framework + */ +interface IUploadFileValidationStrategy { + /** + * Validates the given file. Returns true on success, otherwise false. + * + * @param wcf\system\upload\UploadFile $uploadFile + * @return boolean + */ + public function validate(UploadFile $uploadFile); +} diff --git a/wcfsetup/install/files/lib/system/upload/UploadFile.class.php b/wcfsetup/install/files/lib/system/upload/UploadFile.class.php index d3e05352d8..b52a2be925 100644 --- a/wcfsetup/install/files/lib/system/upload/UploadFile.class.php +++ b/wcfsetup/install/files/lib/system/upload/UploadFile.class.php @@ -125,29 +125,12 @@ class UploadFile { } /** - * Validates the uploaded file. Returns true on success, otherwise false. + * Sets the validation error type. * - * @param integer $maxFilesize - * @param array $fileExtensions - * @return boolean - */ - public function validateFile($maxFilesize, array $fileExtensions) { - if ($this->errorCode != 0) { - $this->validationErrorType = 'uploadFailed'; - return false; - } - - if ($this->getFilesize() > $maxFilesize) { - $this->validationErrorType = 'tooLarge'; - return false; - } - - if (!in_array($this->getFileExtension(), $fileExtensions)) { - $this->validationErrorType = 'invalidExtension'; - return false; - } - - return true; + * @param string $validationErrorType + */ + public function setValidationErrorType($validationErrorType) { + $this->validationErrorType = $validationErrorType; } /** diff --git a/wcfsetup/install/files/lib/system/upload/UploadHandler.class.php b/wcfsetup/install/files/lib/system/upload/UploadHandler.class.php index d15d8cc253..6613b2c94d 100644 --- a/wcfsetup/install/files/lib/system/upload/UploadHandler.class.php +++ b/wcfsetup/install/files/lib/system/upload/UploadHandler.class.php @@ -58,10 +58,10 @@ class UploadHandler { * @param array $fileExtensions * @return boolean */ - public function validateFiles($maxFilesize, array $fileExtensions) { + public function validateFiles(IUploadFileValidationStrategy $validationStrategy) { $result = true; foreach ($this->files as $file) { - if (!$file->validateFile($maxFilesize, $fileExtensions)) { + if (!$validationStrategy->validate($file)) { $this->erroneousFiles[] = $file; $result = false; } -- 2.20.1