Adding validation fix for Ticket , and adding warning messages for Model::invalidFields() and Model::validates()

git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@4260 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
nate 2007-01-06 04:58:24 +00:00
parent 8fb73307e9
commit bfeaab795a

View file

@ -473,6 +473,19 @@ class Model extends Overloadable {
} }
return $return; return $return;
} }
/**
* Bind model associations on the fly.
*
* If $permenant is true, association will not be reset
* to the originals defined in the model
*
* @param array $params
* @param boolean $permenant
* @return void
*/
function bind($assoc, $params, $permenant = true) {
}
/** /**
* Bind model associations on the fly. * Bind model associations on the fly.
* *
@ -1564,10 +1577,12 @@ class Model extends Overloadable {
/** /**
* Returns true if all fields pass validation, otherwise false. * Returns true if all fields pass validation, otherwise false.
* *
* @param array $data POST data
* @return boolean True if there are no errors * @return boolean True if there are no errors
*/ */
function validates($data = array()) { function validates($data = array()) {
if (!empty($data)) {
trigger_error(__('(Model::validates) Parameter usage is deprecated, set the $data property instead'), E_USER_WARNING);
}
$errors = $this->invalidFields($data); $errors = $this->invalidFields($data);
if (is_array($errors)) { if (is_array($errors)) {
return count($errors) === 0; return count($errors) === 0;
@ -1583,6 +1598,8 @@ class Model extends Overloadable {
function invalidFields($data = array()) { function invalidFields($data = array()) {
if (empty($data)) { if (empty($data)) {
$data = $this->data; $data = $this->data;
} else {
trigger_error(__('(Model::invalidFields) Parameter usage is deprecated, set the $data property instead'), E_USER_WARNING);
} }
if (empty($data) || !$this->beforeValidate()) { if (empty($data) || !$this->beforeValidate()) {
@ -1590,7 +1607,7 @@ class Model extends Overloadable {
} }
if (!isset($this->validate) || empty($this->validate)) { if (!isset($this->validate) || empty($this->validate)) {
return true; return array();
} }
if (isset($data[$this->name])) { if (isset($data[$this->name])) {
@ -1600,13 +1617,18 @@ class Model extends Overloadable {
$Validation = new Validation(); $Validation = new Validation();
foreach($this->validate as $fieldName => $validator) { foreach($this->validate as $fieldName => $validator) {
if (is_array($validator)) { if (!is_array($validator) && isset($data[$fieldName])) {
$validator = array('rule' => $validator);
}
$validator = am(array( $validator = am(array(
'allowEmpty' => true, 'allowEmpty' => true,
'message' => 'This field cannot be left blank', 'message' => 'This field cannot be left blank',
'rule' => 'blank' 'rule' => 'blank',
'on' => null
), $validator); ), $validator);
if (empty($validator['on']) || ($validator['on'] == 'create' && !$this->exists()) || ($validator['on'] == 'update' && $this->exists())) {
if (!isset($data[$fieldName]) && $validator['allowEmpty'] == false) { if (!isset($data[$fieldName]) && $validator['allowEmpty'] == false) {
$this->invalidate($fieldName, $validator['message']); $this->invalidate($fieldName, $validator['message']);
} elseif (isset($data[$fieldName])) { } elseif (isset($data[$fieldName])) {
@ -1619,18 +1641,18 @@ class Model extends Overloadable {
$ruleParams = array($data[$fieldName]); $ruleParams = array($data[$fieldName]);
} }
if ( $valid = true;
(method_exists($this, $rule) && !call_user_func_array(array(&$this, $rule), $ruleParams)) || if (method_exists($this, $rule)) {
(method_exists($Validation, $rule) && !call_user_func_array(array(&$Validation, $rule), $ruleParams)) || $valid = call_user_func_array(array(&$this, $rule), $ruleParams);
(!is_array($validator['rule']) && !preg_match($rule, $data[$fieldName])) } elseif (method_exists($Validation, $rule)) {
) { $valid = call_user_func_array(array(&$Validation, $rule), $ruleParams);
} elseif (!is_array($validator['rule'])) {
$valid = preg_match($rule, $data[$fieldName]);
}
if (!$valid) {
$this->invalidate($fieldName, $validator['message']); $this->invalidate($fieldName, $validator['message']);
} }
} }
} else {
if (isset($data[$fieldName]) && !preg_match($validator, $data[$fieldName])) {
$this->invalidate($fieldName);
}
} }
} }
return $this->validationErrors; return $this->validationErrors;