diff --git a/libraries/src/Form/Form.php b/libraries/src/Form/Form.php index a92c866172478..f71995bcf3f43 100644 --- a/libraries/src/Form/Form.php +++ b/libraries/src/Form/Form.php @@ -1559,18 +1559,21 @@ protected function filterField($element, $value) $return = call_user_func($filter, $value); } - elseif ($element['type'] == 'subform') + elseif ((string) $element['type'] === 'subform') { $field = $this->loadField($element); $subForm = $field->loadSubForm(); - if ($field->multiple && !empty($value)) + if ($field->multiple) { $return = array(); - foreach ($value as $key => $val) + if ($value) { - $return[$key] = $subForm->filter($val); + foreach ($value as $key => $val) + { + $return[$key] = $subForm->filter($val); + } } } else @@ -2150,38 +2153,18 @@ protected function validateField(\SimpleXMLElement $element, $group = null, $val } } - if ($valid !== false && $element['type'] == 'subform') + if ($valid !== false && (string) $element['type'] === 'subform') { - $field = $this->loadField($element); - $subForm = $field->loadSubForm(); - - if ($field->multiple && $value) - { - foreach ($value as $key => $val) - { - $val = (array) $val; - - $valid = $subForm->validate($val); + // Load the subform validation rule. + $rule = $this->loadRuleType('SubForm'); - if ($valid === false) - { - break; - } - } - } - else - { - $valid = $subForm->validate($value); - } + // Run the field validation rule test. + $valid = $rule->test($element, $value, $group, $input, $this); - if ($valid === false) + // Check for an error in the validation test. + if ($valid instanceof \Exception) { - $errors = $subForm->getErrors(); - - foreach ($errors as $error) - { - return $error; - } + return $valid; } }