mirror of
https://github.com/atlanticbiomedical/portal-legacy.git
synced 2025-07-02 01:47:28 -04:00
160 lines
4.6 KiB
PHP
Executable File
160 lines
4.6 KiB
PHP
Executable File
<?php
|
|
|
|
/*
|
|
* This file is part of the symfony package.
|
|
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
|
|
* (c) 2004-2006 Sean Kerr.
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
/**
|
|
* sfNumberValidator verifies a parameter is a number and allows you to apply
|
|
* size constraints.
|
|
*
|
|
* <b>Optional parameters:</b>
|
|
*
|
|
* # <b>max</b> - [none] - Maximum number size.
|
|
* # <b>max_error</b> - [Input is too large] - An error message to use when
|
|
* input is too large.
|
|
* # <b>min</b> - [none] - Minimum number size.
|
|
* # <b>min_error</b> - [Input is too small] - An error message to use when
|
|
* input is too small.
|
|
* # <b>nan_error</b> - [Input is not a number] - Default error message when
|
|
* input is not a number.
|
|
* # <b>type</b> - [Any] - Type of number (Any, Float).
|
|
* # <b>type_error</b> - [Input is not a number] - An error message to use when
|
|
* input is not a number.
|
|
*
|
|
* @package symfony
|
|
* @subpackage validator
|
|
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
|
* @author Sean Kerr <skerr@mojavi.org>
|
|
* @version SVN: $Id: sfNumberValidator.class.php 3233 2007-01-11 21:01:08Z fabien $
|
|
*/
|
|
class sfNumberValidator extends sfValidator
|
|
{
|
|
/**
|
|
* Executes this validator.
|
|
*
|
|
* @param mixed A file or parameter value/array
|
|
* @param error An error message reference
|
|
*
|
|
* @return bool true, if this validator executes successfully, otherwise false
|
|
*/
|
|
public function execute(&$value, &$error)
|
|
{
|
|
if (!is_numeric($value))
|
|
{
|
|
// it's NaN, what nerve!
|
|
$error = $this->getParameterHolder()->get('nan_error');
|
|
|
|
return false;
|
|
}
|
|
|
|
$type = strtolower($this->getParameterHolder()->get('type'));
|
|
|
|
switch ($type)
|
|
{
|
|
case "decimal":
|
|
case "float":
|
|
{
|
|
if (substr_count($value, '.') != 1)
|
|
{
|
|
// value isn't a float, shazbot!
|
|
$error = $this->getParameterHolder()->get('type_error');
|
|
return false;
|
|
}
|
|
|
|
// cast our value to a float
|
|
$value = (float) $value;
|
|
|
|
break;
|
|
}
|
|
|
|
case "int":
|
|
case "integer":
|
|
{
|
|
// Note: (Both 3 AND 3.0 are BOTH considered integers and 3.1 is not)
|
|
if ((float) $value != (int) $value)
|
|
{
|
|
// is not an integer.
|
|
$error = $this->getParameterHolder()->get('type_error');
|
|
return false;
|
|
}
|
|
|
|
// cast our value to an integer
|
|
$value = (int) $value;
|
|
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
$min = $this->getParameterHolder()->get('min');
|
|
|
|
if ($min !== null && $value < $min)
|
|
{
|
|
// too small
|
|
$error = $this->getParameterHolder()->get('min_error');
|
|
|
|
return false;
|
|
}
|
|
|
|
$max = $this->getParameterHolder()->get('max');
|
|
|
|
if ($max !== null && $value > $max)
|
|
{
|
|
// too large
|
|
$error = $this->getParameterHolder()->get('max_error');
|
|
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Initializes this validator.
|
|
*
|
|
* @param sfContext The current application context
|
|
* @param array An associative array of initialization parameters
|
|
*
|
|
* @return bool true, if initialization completes successfully, otherwise false
|
|
*/
|
|
public function initialize($context, $parameters = null)
|
|
{
|
|
// initialize parent
|
|
parent::initialize($context);
|
|
|
|
// set defaults
|
|
$this->getParameterHolder()->set('max', null);
|
|
$this->getParameterHolder()->set('max_error', 'Input is too large');
|
|
$this->getParameterHolder()->set('min', null);
|
|
$this->getParameterHolder()->set('min_error', 'Input is too small');
|
|
$this->getParameterHolder()->set('nan_error', 'Input is not a number');
|
|
$this->getParameterHolder()->set('type', 'any');
|
|
$this->getParameterHolder()->set('type_error', 'Input is not a number');
|
|
|
|
$this->getParameterHolder()->add($parameters);
|
|
|
|
// check user-specified parameters
|
|
$type = strtolower($this->getParameterHolder()->get('type'));
|
|
|
|
// array of allowed types
|
|
$allowed_types = array('any', 'decimal', 'float', 'int', 'integer');
|
|
|
|
if (!in_array(strtolower($type), $allowed_types))
|
|
{
|
|
// unknown type
|
|
$error = 'Unknown number type "%s" in NumberValidator';
|
|
$error = sprintf($error, $this->getParameterHolder()->get('type'));
|
|
|
|
throw new sfValidatorException($error);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|