/**
* 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;
}