/** * Validate the defined settings. * * @param mixed $values * @return array */ public function validateSettings($values) { // No validation rules if (!isset($this->datas['rules']) || !is_array($this->datas['rules'])) { return $values; } // Null given if (is_null($values)) { return []; } $sanitized = []; foreach ($values as $setting => $value) { $rules = array_keys($this->datas['rules']); // 1 - Check if a rule exists if (in_array($setting, $rules)) { // 1.1 - Check for infinite settings. if (is_array($value) && $this->isInfinite($setting)) { foreach ($value as $index => $row) { if ($this->validator->isAssociative($row) && !empty($row)) { foreach ($row as $infiniteSetting => $infiniteValue) { // 1.1.1 - Check if a rule is defined for the infinite sub fields. if (isset($this->datas['rules'][$setting][$infiniteSetting])) { $rule = $this->datas['rules'][$setting][$infiniteSetting]; $sanitized[$setting][$index][$infiniteSetting] = $this->validator->single($infiniteValue, $rule); } else { $sanitized[$setting][$index][$infiniteSetting] = $infiniteValue; } } } } } else { // 1.2 - Apply rule to other settings. $sanitized[$setting] = $this->validator->single($value, $this->datas['rules'][$setting]); } } else { // 2 - No rule, just set the default value. $sanitized[$setting] = $value; } } return $sanitized; }