From a29f3c878a799b1a39e239b9d01d8e800ae949ee Mon Sep 17 00:00:00 2001 From: Nicofuma Date: Sat, 26 Apr 2014 14:10:10 +0200 Subject: [PATCH 1/2] [ticket/12097] Validate_data() should work with class method https://tracker.phpbb.com/browse/PHPBB3-12097 PHPBB3-12097 --- phpBB/includes/functions_user.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index 6682622d94..354e79a672 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -1326,9 +1326,18 @@ function validate_data($data, $val_ary) { $function = array_shift($validate); array_unshift($validate, $data[$var]); - $function_prefix = (function_exists('phpbb_validate_' . $function)) ? 'phpbb_validate_' : 'validate_'; - if ($result = call_user_func_array($function_prefix . $function, $validate)) + if (is_array($function)) + { + $result = call_user_func_array($function[0], 'validate_' . $function[1], $validate); + } + else + { + $function_prefix = (function_exists('phpbb_validate_' . $function)) ? 'phpbb_validate_' : 'validate_'; + $result = call_user_func_array($function_prefix . $function, $validate); + } + + if ($result) { // Since errors are checked later for their language file existence, we need to make sure custom errors are not adjusted. $error[] = (empty($user->lang[$result . '_' . strtoupper($var)])) ? $result : $result . '_' . strtoupper($var); From 6ba61785f8da8df917866055e0119bc4fceeae0d Mon Sep 17 00:00:00 2001 From: Nicofuma Date: Sat, 26 Apr 2014 15:46:50 +0200 Subject: [PATCH 2/2] [ticket/12097] Bug fix and adding unit test PHPBB3-12097 --- phpBB/includes/functions_user.php | 2 +- tests/functions/validate_with_method_test.php | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 tests/functions/validate_with_method_test.php diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index 354e79a672..97af7ada04 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -1329,7 +1329,7 @@ function validate_data($data, $val_ary) if (is_array($function)) { - $result = call_user_func_array($function[0], 'validate_' . $function[1], $validate); + $result = call_user_func_array(array($function[0], 'validate_' . $function[1]), $validate); } else { diff --git a/tests/functions/validate_with_method_test.php b/tests/functions/validate_with_method_test.php new file mode 100644 index 0000000000..86d7b9571c --- /dev/null +++ b/tests/functions/validate_with_method_test.php @@ -0,0 +1,39 @@ +helper = new phpbb_functions_validate_data_helper($this); + } + + public function test_validate_date() + { + $this->helper->assert_valid_data(array( + 'method_call' => array( + array(), + true, + array(array(array($this, 'with_method'), false)), + ), + )); + } + + public function validate_with_method($bool, $optional = false) + { + return ! $bool; + } +}