diff options
Diffstat (limited to 'poc/poc02-compiling-cake/src/vendor/cakephp-2.2.1-0-gcc44130/lib/Cake/Model/Validator/CakeValidationSet.php')
-rw-r--r-- | poc/poc02-compiling-cake/src/vendor/cakephp-2.2.1-0-gcc44130/lib/Cake/Model/Validator/CakeValidationSet.php | 350 |
1 files changed, 350 insertions, 0 deletions
diff --git a/poc/poc02-compiling-cake/src/vendor/cakephp-2.2.1-0-gcc44130/lib/Cake/Model/Validator/CakeValidationSet.php b/poc/poc02-compiling-cake/src/vendor/cakephp-2.2.1-0-gcc44130/lib/Cake/Model/Validator/CakeValidationSet.php new file mode 100644 index 0000000..fdecdc1 --- /dev/null +++ b/poc/poc02-compiling-cake/src/vendor/cakephp-2.2.1-0-gcc44130/lib/Cake/Model/Validator/CakeValidationSet.php @@ -0,0 +1,350 @@ +<?php +/** + * CakeValidationSet. + * + * Provides the Model validation logic. + * + * PHP versions 5 + * + * CakePHP(tm) : Rapid Development Framework (http://cakephp.org) + * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The MIT License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://cakephp.org CakePHP(tm) Project + * @package Cake.Model.Validator + * @since CakePHP(tm) v 2.2.0 + * @license MIT License (http://www.opensource.org/licenses/mit-license.php) + */ +App::uses('ModelValidator', 'Model'); +App::uses('CakeValidationRule', 'Model/Validator'); + +/** + * CakeValidationSet object. Holds all validation rules for a field and exposes + * methods to dynamically add or remove validation rules + * + * @package Cake.Model.Validator + * @link http://book.cakephp.org/2.0/en/data-validation.html + */ +class CakeValidationSet implements ArrayAccess, IteratorAggregate, Countable { + +/** + * Holds the CakeValidationRule objects + * + * @var array + */ + protected $_rules = array(); + +/** + * List of methods available for validation + * + * @var array + **/ + protected $_methods = array(); + +/** + * I18n domain for validation messages. + * + * @var string + **/ + protected $_validationDomain = null; + +/** + * Whether the validation is stopped + * + * @var boolean + */ + public $isStopped = false; + +/** + * Holds the fieldname + * + * @var string + */ + public $field = null; + +/** + * Holds the original ruleSet + * + * @var array + */ + public $ruleSet = array(); + +/** + * Constructor + * + * @param string $fieldName The fieldname + * @param array $ruleset + */ + public function __construct($fieldName, $ruleSet) { + $this->field = $fieldName; + + if (!is_array($ruleSet) || (is_array($ruleSet) && isset($ruleSet['rule']))) { + $ruleSet = array($ruleSet); + } + + foreach ($ruleSet as $index => $validateProp) { + $this->_rules[$index] = new CakeValidationRule($validateProp); + } + $this->ruleSet = $ruleSet; + } + +/** + * Sets the list of methods to use for validation + * + * @return void + **/ + public function setMethods(&$methods) { + $this->_methods =& $methods; + } + +/** + * Sets the I18n domain for validation messages. + * + * @param string $validationDomain The validation domain to be used. + * @return void + */ + public function setValidationDomain($validationDomain) { + $this->_validationDomain = $validationDomain; + } + +/** + * Runs all validation rules in this set and returns a list of + * validation errors + * + * @return array list of validation errors for this field + */ + public function validate($data, $isUpdate = false) { + $errors = array(); + foreach ($this->getRules() as $name => $rule) { + $rule->isUpdate($isUpdate); + if ($rule->skip()) { + continue; + } + + $checkRequired = $rule->checkRequired($this->field, $data); + if (!$checkRequired && array_key_exists($this->field, $data)) { + if ($rule->checkEmpty($this->field, $data)) { + break; + } + $rule->process($this->field, $data, $this->_methods); + } + + if ($checkRequired || !$rule->isValid()) { + $errors[] = $this->_processValidationResponse($name, $rule); + if ($rule->isLast()) { + break; + } + } + } + + return $errors; + } + +/** + * Gets a rule for a given name if exists + * + * @param string $name + * @return CakeValidationRule + */ + public function getRule($name) { + if (!empty($this->_rules[$name])) { + return $this->_rules[$name]; + } + } + +/** + * Returns all rules for this validation set + * + * @return array + */ + public function getRules() { + return $this->_rules; + } + +/** + * Sets a CakeValidationRule $rule with a $name + * + * ## Example: + * + * {{{ + * $set + * ->setRule('required', array('rule' => 'notEmpty', 'required' => true)) + * ->setRule('inRange', array('rule' => array('between', 4, 10)) + * }}} + * + * @param string $name The name under which the rule should be set + * @param CakeValidationRule|array $rule The validation rule to be set + * @return CakeValidationSet this instance + */ + public function setRule($name, $rule) { + if (!$rule instanceof CakeValidationRule) { + $rule = new CakeValidationRule($rule); + } + $this->_rules[$name] = $rule; + return $this; + } + +/** + * Removes a validation rule from the set + * + * ## Example: + * + * {{{ + * $set + * ->removeRule('required') + * ->removeRule('inRange') + * }}} + * + * @param string $name The name under which the rule should be unset + * @return CakeValidationSet this instance + */ + public function removeRule($name) { + unset($this->_rules[$name]); + return $this; + } + +/** + * Sets the rules for a given field + * + * ## Example: + * + * {{{ + * $set->setRules(array( + * 'required' => array('rule' => 'notEmpty', 'required' => true), + * 'inRange' => array('rule' => array('between', 4, 10) + * )); + * }}} + * + * @param array $rules The rules to be set + * @param bolean $mergeVars [optional] If true, merges vars instead of replace. Defaults to true. + * @return ModelField + */ + public function setRules($rules = array(), $mergeVars = true) { + if ($mergeVars === false) { + $this->_rules = $rules; + } else { + $this->_rules = array_merge($this->_rules, $rules); + } + return $this; + } + +/** + * Fetches the correct error message for a failed validation + * + * @param string $name the name of the rule as it was configured + * @param CakeValidationRule $rule the object containing validation information + * @return string + */ + protected function _processValidationResponse($name, $rule) { + $message = $rule->getValidationResult(); + if (is_string($message)) { + return $message; + } + $message = $rule->message; + + if ($message !== null) { + $args = null; + if (is_array($message)) { + $result = $message[0]; + $args = array_slice($message, 1); + } else { + $result = $message; + } + if (is_array($rule->rule) && $args === null) { + $args = array_slice($rule->rule, 1); + } + $args = $this->_translateArgs($args); + + $message = __d($this->_validationDomain, $result, $args); + } elseif (is_string($name)) { + if (is_array($rule->rule)) { + $args = array_slice($rule->rule, 1); + $args = $this->_translateArgs($args); + $message = __d($this->_validationDomain, $name, $args); + } else { + $message = __d($this->_validationDomain, $name); + } + } else { + $message = __d('cake_dev', 'This field cannot be left blank'); + } + + return $message; + } + +/** + * Applies translations to validator arguments. + * + * @param array $args The args to translate + * @return array Translated args. + */ + protected function _translateArgs($args) { + foreach ((array)$args as $k => $arg) { + if (is_string($arg)) { + $args[$k] = __d($this->_validationDomain, $arg); + } + } + return $args; + } + +/** + * Returns wheter an index exists in the rule set + * + * @param string $index name of the rule + * @return boolean + **/ + public function offsetExists($index) { + return isset($this->_rules[$index]); + } + +/** + * Returns a rule object by its index + * + * @param string $index name of the rule + * @return CakeValidationRule + **/ + public function offsetGet($index) { + return $this->_rules[$index]; + } + +/** + * Sets or replace a validation rule + * + * @param string $index name of the rule + * @param CakeValidationRule|array rule to add to $index + **/ + public function offsetSet($index, $rule) { + $this->setRule($index, $rule); + } + +/** + * Unsets a validation rule + * + * @param string $index name of the rule + * @return void + **/ + public function offsetUnset($index) { + unset($this->_rules[$index]); + } + +/** + * Returns an iterator for each of the rules to be applied + * + * @return ArrayIterator + **/ + public function getIterator() { + return new ArrayIterator($this->_rules); + } + +/** + * Returns the number of rules in this set + * + * @return int + **/ + public function count() { + return count($this->_rules); + } + +} |