From ea9eee4c773c6fa77c58939c932ce10afcaa6353 Mon Sep 17 00:00:00 2001 From: mark_story Date: Wed, 23 May 2012 21:02:41 -0400 Subject: [PATCH] Fix array arguments being translated. Fixes #2902 --- .../Model/Validator/CakeValidationSet.php | 29 ++++++++++++------- .../Model/Validator/CakeValidationSetTest.php | 18 ++++++++++-- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/lib/Cake/Model/Validator/CakeValidationSet.php b/lib/Cake/Model/Validator/CakeValidationSet.php index fe150eef10e..fdecdc1912e 100644 --- a/lib/Cake/Model/Validator/CakeValidationSet.php +++ b/lib/Cake/Model/Validator/CakeValidationSet.php @@ -256,21 +256,13 @@ protected function _processValidationResponse($name, $rule) { if (is_array($rule->rule) && $args === null) { $args = array_slice($rule->rule, 1); } - if (!empty($args)) { - foreach ($args as $k => $arg) { - $args[$k] = __d($this->_validationDomain, $arg); - } - } + $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); - if (!empty($args)) { - foreach ($args as $k => $arg) { - $args[$k] = __d($this->_validationDomain, $arg); - } - } + $args = $this->_translateArgs($args); $message = __d($this->_validationDomain, $name, $args); } else { $message = __d($this->_validationDomain, $name); @@ -282,6 +274,21 @@ protected function _processValidationResponse($name, $rule) { 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 * @@ -340,4 +347,4 @@ public function count() { return count($this->_rules); } -} \ No newline at end of file +} diff --git a/lib/Cake/Test/Case/Model/Validator/CakeValidationSetTest.php b/lib/Cake/Test/Case/Model/Validator/CakeValidationSetTest.php index 689e3e02309..80e07a65b0d 100644 --- a/lib/Cake/Test/Case/Model/Validator/CakeValidationSetTest.php +++ b/lib/Cake/Test/Case/Model/Validator/CakeValidationSetTest.php @@ -56,11 +56,25 @@ public function testValidate() { $result = $Field->validate($data); $this->assertEmpty($result); - $Field = new CakeValidationSet('nothere', array('notEmpty' => array('rule' => 'notEmpty', 'required' => true))); + $Field = new CakeValidationSet('nothere', array( + 'notEmpty' => array( + 'rule' => 'notEmpty', + 'required' => true + ) + )); $result = $Field->validate($data); $expected = array('notEmpty'); $this->assertEquals($expected, $result); + + $Field = new CakeValidationSet('body', array( + 'inList' => array( + 'rule' => array('inList', array('test')) + ) + )); + $result = $Field->validate($data); + $expected = array('inList'); + $this->assertEquals($expected, $result); } /** @@ -313,4 +327,4 @@ public function testRemoveRule() { $this->assertFalse(isset($Set['other'])); } -} \ No newline at end of file +}