160 lines
3.0 KiB
PHP
160 lines
3.0 KiB
PHP
<?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;
|
|
}
|
|
|
|
} |