aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/files/upload.php
diff options
context:
space:
mode:
authorMarc Alexander <admin@m-a-styles.de>2015-07-14 16:15:39 +0200
committerMarc Alexander <admin@m-a-styles.de>2015-09-09 08:27:56 +0200
commit11b2c938c6c3a6a14465f04ed356fbd013276143 (patch)
tree322dc6cc8362ff7b8296f8495654af4483297b81 /phpBB/phpbb/files/upload.php
parentc65f0d748ae3cef90e08ce2c700e65734392da45 (diff)
downloadforums-11b2c938c6c3a6a14465f04ed356fbd013276143.tar
forums-11b2c938c6c3a6a14465f04ed356fbd013276143.tar.gz
forums-11b2c938c6c3a6a14465f04ed356fbd013276143.tar.bz2
forums-11b2c938c6c3a6a14465f04ed356fbd013276143.tar.xz
forums-11b2c938c6c3a6a14465f04ed356fbd013276143.zip
[ticket/13904] Move form_upload to its own class and define type classes
PHPBB3-13904
Diffstat (limited to 'phpBB/phpbb/files/upload.php')
-rw-r--r--phpBB/phpbb/files/upload.php90
1 files changed, 12 insertions, 78 deletions
diff --git a/phpBB/phpbb/files/upload.php b/phpBB/phpbb/files/upload.php
index 38aad5a3bd..09f2b9408d 100644
--- a/phpBB/phpbb/files/upload.php
+++ b/phpBB/phpbb/files/upload.php
@@ -182,87 +182,21 @@ class upload
}
/**
- * Form upload method
- * Upload file from users harddisk
+ * Handle upload based on type
*
- * @param string $form_name Form name assigned to the file input field (if it is an array, the key has to be specified)
- * @param \phpbb\plupload\plupload $plupload The plupload object
+ * @param string $type Upload type
*
- * @return filespec $file Object "filespec" is returned, all further operations can be done with this object
- * @access public
+ * @return \phpbb\files\filespec|bool A filespec instance if upload was
+ * successful, false if there were issues or the type is not supported
*/
- function form_upload($form_name, plupload $plupload = null)
+ public function handle_upload($type)
{
- $upload = $this->request->file($form_name);
- unset($upload['local_mode']);
-
- if ($plupload)
- {
- $result = $plupload->handle_upload($form_name);
- if (is_array($result))
- {
- $upload = array_merge($upload, $result);
- }
- }
-
- /** @var filespec $file */
- $file = $this->factory->get('filespec')
- ->set_upload_ary($upload)
- ->set_upload_namespace($this);
-
- if ($file->init_error())
- {
- $file->error[] = '';
- return $file;
- }
-
- // Error array filled?
- if (isset($upload['error']))
- {
- $error = $this->assign_internal_error($upload['error']);
-
- if ($error !== false)
- {
- $file->error[] = $error;
- return $file;
- }
- }
-
- // Check if empty file got uploaded (not catched by is_uploaded_file)
- if (isset($upload['size']) && $upload['size'] == 0)
- {
- $file->error[] = $this->language->lang($this->error_prefix . 'EMPTY_FILEUPLOAD');
- return $file;
- }
-
- // PHP Upload filesize exceeded
- if ($file->get('filename') == 'none')
- {
- $max_filesize = @ini_get('upload_max_filesize');
- $unit = 'MB';
-
- if (!empty($max_filesize))
- {
- $unit = strtolower(substr($max_filesize, -1, 1));
- $max_filesize = (int) $max_filesize;
+ $args = func_get_args();
+ array_shift($args);
+ $type_class = $this->factory->get('types.' . $type)
+ ->set_upload($this);
- $unit = ($unit == 'k') ? 'KB' : (($unit == 'g') ? 'GB' : 'MB');
- }
-
- $file->error[] = (empty($max_filesize)) ? $this->language->lang($this->error_prefix . 'PHP_SIZE_NA') : $this->language->lang($this->error_prefix . 'PHP_SIZE_OVERRUN', $max_filesize, $this->language->lang($unit));
- return $file;
- }
-
- // Not correctly uploaded
- if (!$file->is_uploaded())
- {
- $file->error[] = $this->language->lang($this->error_prefix . 'NOT_UPLOADED');
- return $file;
- }
-
- $this->common_checks($file);
-
- return $file;
+ return (is_object($type_class)) ? call_user_func_array(array($type_class, 'upload'), $args) : false;
}
/**
@@ -536,9 +470,9 @@ class upload
* @param string $errorcode Error code to assign
*
* @return string Error string
- * @access private
+ * @access public
*/
- function assign_internal_error($errorcode)
+ public function assign_internal_error($errorcode)
{
switch ($errorcode)
{