| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 | 
							- <?php namespace System\Validation\Rules;
 
- use System\File;
 
- use System\Input;
 
- use System\Validation\Nullable_Rule;
 
- class Upload_Of extends Nullable_Rule {
 
- 	/**
 
- 	 * The acceptable file types.
 
- 	 *
 
- 	 * @var array
 
- 	 */
 
- 	public $types = array();
 
- 	/**
 
- 	 * The maximum file size in bytes.
 
- 	 *
 
- 	 * @var int
 
- 	 */
 
- 	public $maximum;
 
- 	/**
 
- 	 * The "wrong type" error message.
 
- 	 *
 
- 	 * @var string
 
- 	 */
 
- 	public $wrong_type;
 
- 	/**
 
- 	 * The "too big" error message.
 
- 	 *
 
- 	 * @var string
 
- 	 */
 
- 	public $too_big;
 
- 	/**
 
- 	 * Evaluate the validity of an attribute.
 
- 	 *
 
- 	 * @param  string  $attribute
 
- 	 * @param  array   $attributes
 
- 	 * @return bool
 
- 	 */
 
- 	public function check($attribute, $attributes)
 
- 	{
 
- 		// -----------------------------------------------------
 
- 		// Check the presence of the upload. If the upload does
 
- 		// not exist and the upload is required, a presence_of
 
- 		// error will be raised.
 
- 		//
 
- 		// Otherwise no error will be raised.
 
- 		// -----------------------------------------------------
 
- 		if ( ! array_key_exists($attribute, Input::file()))
 
- 		{
 
- 			if ( ! $this->allow_null)
 
- 			{
 
- 				$this->error = 'presence_of';
 
- 			}
 
- 			return is_null($this->error);
 
- 		}
 
- 		// -----------------------------------------------------
 
- 		// Uploaded files are stored in the $_FILES array, so
 
- 		// we use that array instead of the $attributes.
 
- 		// -----------------------------------------------------
 
- 		$file = Input::file($attribute);
 
- 		if ( ! is_null($this->maximum) and $file['size'] > $this->maximum * 1000)
 
- 		{
 
- 			$this->error = 'file_too_big';
 
- 		}
 
- 		// -----------------------------------------------------
 
- 		// The File::is method uses the Fileinfo PHP extension
 
- 		// to determine the MIME type of the file.
 
- 		// -----------------------------------------------------
 
- 		foreach ($this->types as $type)
 
- 		{
 
- 			if (File::is($type, $file['tmp_name']))
 
- 			{
 
- 				break;				
 
- 			}
 
- 			$this->error = 'file_wrong_type';
 
- 		}
 
- 		return is_null($this->error);
 
- 	}
 
- 	/**
 
- 	 * Set the acceptable file types.
 
- 	 *
 
- 	 * @return Upload_Of
 
- 	 */
 
- 	public function is()
 
- 	{
 
- 		$this->types = func_get_args();
 
- 		return $this;
 
- 	}
 
- 	/**
 
- 	 * Require that the uploaded file is an image type.
 
- 	 *
 
- 	 * @return Upload_Of
 
- 	 */
 
- 	public function is_image()
 
- 	{
 
- 		$this->types = array_merge($this->types, array('jpg', 'gif', 'png', 'bmp'));
 
- 		return $this;
 
- 	}
 
- 	/**
 
- 	 * Set the maximum file size in kilobytes.
 
- 	 *
 
- 	 * @param  int        $maximum
 
- 	 * @return Upload_Of
 
- 	 */
 
- 	public function maximum($maximum)
 
- 	{
 
- 		$this->maximum = $maximum;
 
- 		return $this;
 
- 	}
 
- 	/**
 
- 	 * Set the validation error message.
 
- 	 *
 
- 	 * @param  string     $message
 
- 	 * @return Upload_Of
 
- 	 */
 
- 	public function message($message)
 
- 	{
 
- 		return $this->wrong_type($message)->too_big($message);
 
- 	}
 
- 	/**
 
- 	 * Set the "wrong type" error message.
 
- 	 *
 
- 	 * @param  string  $message
 
- 	 * @return Upload_Of
 
- 	 */
 
- 	public function wrong_type($message)
 
- 	{
 
- 		$this->wrong_type = $message;
 
- 		return $this;
 
- 	}
 
- 	/**
 
- 	 * Set the "too big" error message.
 
- 	 *
 
- 	 * @param  string  $message
 
- 	 * @return Upload_Of
 
- 	 */
 
- 	public function too_big($message)
 
- 	{
 
- 		$this->too_big = $message;
 
- 		return $this;
 
- 	}
 
- }
 
 
  |