summaryrefslogtreecommitdiff
path: root/modules/forge/libraries/Form_Upload.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules/forge/libraries/Form_Upload.php')
-rw-r--r--modules/forge/libraries/Form_Upload.php187
1 files changed, 0 insertions, 187 deletions
diff --git a/modules/forge/libraries/Form_Upload.php b/modules/forge/libraries/Form_Upload.php
deleted file mode 100644
index dce8816e..00000000
--- a/modules/forge/libraries/Form_Upload.php
+++ /dev/null
@@ -1,187 +0,0 @@
-<?php
-/**
- * FORGE upload input library.
- *
- * $Id$
- *
- * @package Forge
- * @author Kohana Team
- * @copyright (c) 2007-2008 Kohana Team
- * @license http://kohanaphp.com/license.html
- */
-class Form_Upload_Core extends Form_Input {
-
- protected $data = array
- (
- 'class' => 'upload',
- 'value' => '',
- );
-
- protected $protect = array('type', 'label', 'value');
-
- // Upload data
- protected $upload;
-
- // Upload directory and filename
- protected $directory;
- protected $filename;
-
- public function __construct($name, $filename = FALSE)
- {
- parent::__construct($name);
-
- if ( ! empty($_FILES[$name]))
- {
- if (empty($_FILES[$name]['tmp_name']) OR is_uploaded_file($_FILES[$name]['tmp_name']))
- {
- // Cache the upload data in this object
- $this->upload = $_FILES[$name];
-
- // Hack to allow file-only inputs, where no POST data is present
- $_POST[$name] = $this->upload['name'];
-
- // Set the filename
- $this->filename = empty($filename) ? FALSE : $filename;
- }
- else
- {
- // Attempt to delete the invalid file
- is_writable($_FILES[$name]['tmp_name']) and unlink($_FILES[$name]['tmp_name']);
-
- // Invalid file upload, possible hacking attempt
- unset($_FILES[$name]);
- }
- }
- }
-
- /**
- * Sets the upload directory.
- *
- * @param string upload directory
- * @return void
- */
- public function directory($dir = NULL)
- {
- // Use the global upload directory by default
- empty($dir) and $dir = Kohana::config('upload.directory');
-
- // Make the path asbolute and normalize it
- $directory = str_replace('\\', '/', realpath($dir)).'/';
-
- // Make sure the upload director is valid and writable
- if ($directory === '/' OR ! is_dir($directory) OR ! is_writable($directory))
- throw new Kohana_Exception('upload.not_writable', $dir);
-
- $this->directory = $directory;
- }
-
- public function validate()
- {
- // The upload directory must always be set
- empty($this->directory) and $this->directory();
-
- // By default, there is no uploaded file
- $filename = '';
-
- if ($status = parent::validate() AND $this->upload['error'] === UPLOAD_ERR_OK)
- {
- // Set the filename to the original name
- $filename = $this->upload['name'];
-
- if (Kohana::config('upload.remove_spaces'))
- {
- // Remove spaces, due to global upload configuration
- $filename = preg_replace('/\s+/', '_', $this->data['value']);
- }
-
- if (file_exists($filepath = $this->directory.$filename))
- {
- if ($this->filename !== TRUE OR ! is_writable($filepath))
- {
- // Prefix the file so that the filename is unique
- $filepath = $this->directory.'uploadfile-'.uniqid(time()).'-'.$this->upload['name'];
- }
- }
-
- // Move the uploaded file to the upload directory
- move_uploaded_file($this->upload['tmp_name'], $filepath);
- }
-
- if ( ! empty($_POST[$this->data['name']]))
- {
- // Reset the POST value to the new filename
- $this->data['value'] = $_POST[$this->data['name']] = empty($filepath) ? '' : $filepath;
- }
-
- return $status;
- }
-
- protected function rule_required()
- {
- if (empty($this->upload) OR $this->upload['error'] === UPLOAD_ERR_NO_FILE)
- {
- $this->errors['required'] = TRUE;
- }
- }
-
- public function rule_allow()
- {
- if (empty($this->upload['tmp_name']) OR count($types = func_get_args()) == 0)
- return;
-
- if (($mime = file::mime($this->upload['tmp_name'])) === FALSE)
- {
- // Trust the browser
- $mime = $this->upload['type'];
- }
-
- // Allow nothing by default
- $allow = FALSE;
-
- foreach ($types as $type)
- {
- // Load the mime types
- $type = Kohana::config('mimes.'.$type);
-
- if (is_array($type) AND in_array($mime, $type))
- {
- // Type is valid
- $allow = TRUE;
- break;
- }
- }
-
- if ($allow === FALSE)
- {
- $this->errors['invalid_type'] = TRUE;
- }
- }
-
- public function rule_size($size)
- {
- // Skip the field if it is empty
- if (empty($this->upload) OR $this->upload['error'] === UPLOAD_ERR_NO_FILE)
- return;
-
- $bytes = (int) $size;
-
- switch (substr($size, -2))
- {
- case 'GB': $bytes *= 1024;
- case 'MB': $bytes *= 1024;
- case 'KB': $bytes *= 1024;
- default: break;
- }
-
- if (empty($this->upload['size']) OR $this->upload['size'] > $bytes)
- {
- $this->errors['max_size'] = array($size);
- }
- }
-
- protected function html_element()
- {
- return form::upload($this->data);
- }
-
-} // End Form Upload