1
0
mirror of synced 2025-01-18 06:21:40 +03:00

Changed ValidatorUSState to conform to the standard Doctrine_Validator_* naming scheme and removed the old style from Doctrine_Validator

This commit is contained in:
elliot 2006-09-20 09:30:39 +00:00
parent 89e1215296
commit 8edafac8e4
2 changed files with 373 additions and 373 deletions

View File

@ -1,301 +1,301 @@
<?php <?php
/* /*
* $Id$ * $Id$
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* This software consists of voluntary contributions made by many individuals * This software consists of voluntary contributions made by many individuals
* and is licensed under the LGPL. For more information, see * and is licensed under the LGPL. For more information, see
* <http://www.phpdoctrine.com>. * <http://www.phpdoctrine.com>.
*/ */
/** /**
* Doctrine_Validator * Doctrine_Validator
* Doctrine_Validator performs validations in record properties * Doctrine_Validator performs validations in record properties
* *
* @package Doctrine ORM * @package Doctrine ORM
* @url www.phpdoctrine.com * @url www.phpdoctrine.com
* @license LGPL * @license LGPL
*/ */
class Doctrine_Validator { class Doctrine_Validator {
/** /**
* ERROR CONSTANTS * ERROR CONSTANTS
*/ */
/** /**
* constant for length validation error * constant for length validation error
*/ */
const ERR_LENGTH = 0; const ERR_LENGTH = 0;
/** /**
* constant for type validation error * constant for type validation error
*/ */
const ERR_TYPE = 1; const ERR_TYPE = 1;
/** /**
* constant for general validation error * constant for general validation error
*/ */
const ERR_VALID = 2; const ERR_VALID = 2;
/** /**
* constant for unique validation error * constant for unique validation error
*/ */
const ERR_UNIQUE = 3; const ERR_UNIQUE = 3;
/** /**
* constant for blank validation error * constant for blank validation error
*/ */
const ERR_NOTBLANK = 4; const ERR_NOTBLANK = 4;
/** /**
* constant for date validation error * constant for date validation error
*/ */
const ERR_DATE = 5; const ERR_DATE = 5;
/** /**
* constant for null validation error * constant for null validation error
*/ */
const ERR_NOTNULL = 6; const ERR_NOTNULL = 6;
/** /**
* constant for enum validation error * constant for enum validation error
*/ */
const ERR_ENUM = 7; const ERR_ENUM = 7;
/** /**
* constant for range validation error * constant for range validation error
*/ */
const ERR_RANGE = 8; const ERR_RANGE = 8;
/** /**
* constant for regexp validation error * constant for regexp validation error
*/ */
const ERR_REGEXP = 9; const ERR_REGEXP = 9;
/** /**
* @var array $stack error stack * @var array $stack error stack
*/ */
private $stack = array(); private $stack = array();
/** /**
* @var array $validators an array of validator objects * @var array $validators an array of validator objects
*/ */
private static $validators = array(); private static $validators = array();
/** /**
* @var Doctrine_Null $null a Doctrine_Null object used for extremely fast * @var Doctrine_Null $null a Doctrine_Null object used for extremely fast
* null value testing * null value testing
*/ */
private static $null; private static $null;
/** /**
* initNullObject * initNullObject
* *
* @param Doctrine_Null $null * @param Doctrine_Null $null
* @return void * @return void
*/ */
public static function initNullObject(Doctrine_Null $null) { public static function initNullObject(Doctrine_Null $null) {
self::$null = $null; self::$null = $null;
} }
/** /**
* returns a validator object * returns a validator object
* *
* @param string $name * @param string $name
* @return Doctrine_Validator_Interface * @return Doctrine_Validator_Interface
*/ */
public static function getValidator($name) { public static function getValidator($name) {
if( ! isset(self::$validators[$name])) { if( ! isset(self::$validators[$name])) {
$class = "Doctrine_Validator_".ucwords(strtolower($name)); $class = "Doctrine_Validator_".ucwords(strtolower($name));
if(class_exists($class)) { if(class_exists($class)) {
self::$validators[$name] = new $class; self::$validators[$name] = new $class;
} elseif(class_exists($name."Validator")) { } else {
self::$validators[$name] = new $name."Validator"; throw new Doctrine_Exception("Validator named '$name' not availible.");
} else }
throw new Doctrine_Exception("Validator named '$name' not availible.");
} }
return self::$validators[$name]; return self::$validators[$name];
} }
/** /**
* validates a given record and saves possible errors * validates a given record and saves possible errors
* in Doctrine_Validator::$stack * in Doctrine_Validator::$stack
* *
* @param Doctrine_Record $record * @param Doctrine_Record $record
* @return void * @return void
*/ */
public function validateRecord(Doctrine_Record $record) { public function validateRecord(Doctrine_Record $record) {
$columns = $record->getTable()->getColumns(); $columns = $record->getTable()->getColumns();
$component = $record->getTable()->getComponentName(); $component = $record->getTable()->getComponentName();
switch($record->getState()): switch($record->getState()):
case Doctrine_Record::STATE_TDIRTY: case Doctrine_Record::STATE_TDIRTY:
case Doctrine_Record::STATE_TCLEAN: case Doctrine_Record::STATE_TCLEAN:
// all fields will be validated // all fields will be validated
$data = $record->getData(); $data = $record->getData();
break; break;
default: default:
// only the modified fields will be validated // only the modified fields will be validated
$data = $record->getModified(); $data = $record->getModified();
endswitch; endswitch;
$err = array(); $err = array();
foreach($data as $key => $value) { foreach($data as $key => $value) {
if($value === self::$null) if($value === self::$null)
$value = null; $value = null;
$column = $columns[$key]; $column = $columns[$key];
if($column[0] == "enum") { if($column[0] == "enum") {
$value = $record->getTable()->enumIndex($key, $value); $value = $record->getTable()->enumIndex($key, $value);
if($value === false) { if($value === false) {
$err[$key] = Doctrine_Validator::ERR_ENUM; $err[$key] = Doctrine_Validator::ERR_ENUM;
continue; continue;
} }
} }
if($column[0] == "array" || $column[0] == "object") if($column[0] == "array" || $column[0] == "object")
$length = strlen(serialize($value)); $length = strlen(serialize($value));
else else
$length = strlen($value); $length = strlen($value);
if($length > $column[1]) { if($length > $column[1]) {
$err[$key] = Doctrine_Validator::ERR_LENGTH; $err[$key] = Doctrine_Validator::ERR_LENGTH;
continue; continue;
} }
if( ! is_array($column[2])) if( ! is_array($column[2]))
$e = explode("|",$column[2]); $e = explode("|",$column[2]);
else else
$e = $column[2]; $e = $column[2];
foreach($e as $k => $arg) { foreach($e as $k => $arg) {
if(is_string($k)) { if(is_string($k)) {
$name = $k; $name = $k;
$args = $arg; $args = $arg;
} else { } else {
$args = explode(":",$arg); $args = explode(":",$arg);
$name = array_shift($args); $name = array_shift($args);
if( ! isset($args[0])) if( ! isset($args[0]))
$args[0] = ''; $args[0] = '';
} }
if(empty($name) || $name == "primary" || $name == "protected" || $name == "autoincrement") if(empty($name) || $name == "primary" || $name == "protected" || $name == "autoincrement")
continue; continue;
$validator = self::getValidator($name); $validator = self::getValidator($name);
if( ! $validator->validate($record, $key, $value, $args)) { if( ! $validator->validate($record, $key, $value, $args)) {
$constant = 'Doctrine_Validator::ERR_'.strtoupper($name); $constant = 'Doctrine_Validator::ERR_'.strtoupper($name);
if(defined($constant)) if(defined($constant))
$err[$key] = constant($constant); $err[$key] = constant($constant);
else else
$err[$key] = Doctrine_Validator::ERR_VALID; $err[$key] = Doctrine_Validator::ERR_VALID;
// errors found quit validation looping for this column // errors found quit validation looping for this column
break; break;
} }
} }
if( ! self::isValidType($value, $column[0])) { if( ! self::isValidType($value, $column[0])) {
$err[$key] = Doctrine_Validator::ERR_TYPE; $err[$key] = Doctrine_Validator::ERR_TYPE;
continue; continue;
} }
} }
if( ! empty($err)) { if( ! empty($err)) {
$this->stack[$component][] = $err; $this->stack[$component][] = $err;
return false; return false;
} }
return true; return true;
} }
/** /**
* whether or not this validator has errors * whether or not this validator has errors
* *
* @return boolean * @return boolean
*/ */
public function hasErrors() { public function hasErrors() {
return (count($this->stack) > 0); return (count($this->stack) > 0);
} }
/** /**
* returns the error stack * returns the error stack
* *
* @return array * @return array
*/ */
public function getErrorStack() { public function getErrorStack() {
return $this->stack; return $this->stack;
} }
/** /**
* converts a doctrine type to native php type * converts a doctrine type to native php type
* *
* @param $doctrineType * @param $doctrineType
* @return string * @return string
*/ */
public static function phpType($doctrineType) { public static function phpType($doctrineType) {
switch($doctrineType) { switch($doctrineType) {
case 'enum': case 'enum':
return 'integer'; return 'integer';
case 'blob': case 'blob':
case 'clob': case 'clob':
case 'mbstring': case 'mbstring':
case 'timestamp': case 'timestamp':
case 'date': case 'date':
return 'string'; return 'string';
break; break;
default: default:
return $doctrineType; return $doctrineType;
} }
} }
/** /**
* returns whether or not the given variable is * returns whether or not the given variable is
* valid type * valid type
* *
* @param mixed $var * @param mixed $var
* @param string $type * @param string $type
* @return boolean * @return boolean
*/ */
public static function isValidType($var, $type) { public static function isValidType($var, $type) {
if($type == 'boolean') if($type == 'boolean')
return true; return true;
$looseType = self::gettype($var); $looseType = self::gettype($var);
$type = self::phpType($type); $type = self::phpType($type);
switch($looseType): switch($looseType):
case 'float': case 'float':
case 'double': case 'double':
case 'integer': case 'integer':
if($type == 'string' || $type == 'float') if($type == 'string' || $type == 'float')
return true; return true;
case 'string': case 'string':
case 'array': case 'array':
case 'object': case 'object':
return ($type === $looseType); return ($type === $looseType);
break; break;
case 'NULL': case 'NULL':
return true; return true;
break; break;
endswitch; endswitch;
} }
/** /**
* returns the type of loosely typed variable * returns the type of loosely typed variable
* *
* @param mixed $var * @param mixed $var
* @return string * @return string
*/ */
public static function gettype($var) { public static function gettype($var) {
$type = gettype($var); $type = gettype($var);
switch($type): switch($type):
case 'string': case 'string':
if(preg_match("/^[0-9]+$/",$var)) if(preg_match("/^[0-9]+$/",$var))
return 'integer'; return 'integer';
elseif(is_numeric($var)) elseif(is_numeric($var))
return 'float'; return 'float';
else else
return $type; return $type;
break; break;
default: default:
return $type; return $type;
endswitch; endswitch;
} }
} }

View File

@ -1,72 +1,72 @@
<?php <?php
class ValidatorUSState { class Doctrine_Validator_Usstate {
private static $states = array ( private static $states = array (
"AK" => true, "AK" => true,
"AL" => true, "AL" => true,
"AR" => true, "AR" => true,
"AZ" => true, "AZ" => true,
"CA" => true, "CA" => true,
"CO" => true, "CO" => true,
"CT" => true, "CT" => true,
"DC" => true, "DC" => true,
"DE" => true, "DE" => true,
"FL" => true, "FL" => true,
"GA" => true, "GA" => true,
"HI" => true, "HI" => true,
"IA" => true, "IA" => true,
"ID" => true, "ID" => true,
"IL" => true, "IL" => true,
"IN" => true, "IN" => true,
"KS" => true, "KS" => true,
"KY" => true, "KY" => true,
"LA" => true, "LA" => true,
"MA" => true, "MA" => true,
"MD" => true, "MD" => true,
"ME" => true, "ME" => true,
"MI" => true, "MI" => true,
"MN" => true, "MN" => true,
"MO" => true, "MO" => true,
"MS" => true, "MS" => true,
"MT" => true, "MT" => true,
"NC" => true, "NC" => true,
"ND" => true, "ND" => true,
"NE" => true, "NE" => true,
"NH" => true, "NH" => true,
"NJ" => true, "NJ" => true,
"NM" => true, "NM" => true,
"NV" => true, "NV" => true,
"NY" => true, "NY" => true,
"OH" => true, "OH" => true,
"OK" => true, "OK" => true,
"OR" => true, "OR" => true,
"PA" => true, "PA" => true,
"PR" => true, "PR" => true,
"RI" => true, "RI" => true,
"SC" => true, "SC" => true,
"SD" => true, "SD" => true,
"TN" => true, "TN" => true,
"TX" => true, "TX" => true,
"UT" => true, "UT" => true,
"VA" => true, "VA" => true,
"VI" => true, "VI" => true,
"VT" => true, "VT" => true,
"WA" => true, "WA" => true,
"WI" => true, "WI" => true,
"WV" => true, "WV" => true,
"WY" => true "WY" => true
); );
public function getStates() { public function getStates() {
return self::$states; return self::$states;
} }
/** /**
* @param Doctrine_Record $record * @param Doctrine_Record $record
* @param string $key * @param string $key
* @param mixed $value * @param mixed $value
* @param string $args * @param string $args
* @return boolean * @return boolean
*/ */
public function validate(Doctrine_Record $record, $key, $value, $args) { public function validate(Doctrine_Record $record, $key, $value, $args) {
return isset(self::$states[$value]); return isset(self::$states[$value]);
} }
} }