/home/techb158/public_html/wp-content/plugins/kirki/libraries/framework/Validation
NameSizeModeActions
Rules/-0755rm
Rule.php110130644editdlrm
RuleFactory.php76250644editdlrm
RuleParser.php54270644editdlrm
ValidationRule.php104970644editdlrm
Validator.php96840644editdlrm
Edit: /home/techb158/public_html/wp-content/plugins/kirki/libraries/framework/Validation/Validator.php (9684B)
data = $data; $this->raw_rules = $rules; $this->rules = $this->parse_rules($rules); $this->custom_messages = $messages; } /** * Create a new validator instance. * * @param array $data The data to validate. * @param array $rules The rules to validate. * @param array $messages The messages to validate. * * * @return static * * @since 1.0.0 */ public static function make(array $data, array $rules, array $messages = []) { return new static($data, $rules, $messages); } /** * Parse the raw rules into rule instances. * * @param array $rules The rules to parse. * * @return array * * @since 1.0.0 */ protected function parse_rules(array $rules) { return (new RuleParser($this->data, $rules))->parse()->all(); } /** * Get the custom messages. * * @return array * * @since 1.0.0 */ public function get_custom_messages() { return $this->custom_messages; } /** * Get the value of an attribute. * * @param string $attribute The attribute to get the value of. * * @return mixed * * @since 1.0.0 */ public function get_value($attribute) { return Arr::get($this->data, $attribute); } /** * Set the value of an attribute. * * @param string $attribute The attribute to set the value of. * @param mixed $value The value to set. * * @return void * * @since 1.0.0 */ public function set_value($attribute, $value) { Arr::set($this->data, $attribute, $value); } /** * Get the rules. * * @return array * * @since 1.0.0 */ public function get_rules() { return $this->rules; } /** * Get the data. * * @return array * * @since 1.0.0 */ public function get_data() { return $this->data; } /** * Validate the data. * * @return bool * * @since 1.0.0 */ public function passes() { foreach ($this->rules as $key => $rules) { if ($this->stop_on_first_failure && !empty($this->errors())) { break; } $this->validate_rules($key, $rules); } return empty($this->errors()); } /** * Apply the rules to the key. * * @param string $key The key to apply the rules to. * @param array $rules The rules to apply. * * @return void * * @since 1.0.0 */ protected function validate_rules(string $key, array $rules) { $value = deep_get($this->data, $key); foreach ($rules as $rule) { // For the nullable rule, the the value is nullable // then we don't need to validate other rules. if ($rule instanceof NullableRule && ValidationRule::is_nullish($value)) { break; } // For the sometimes rule, // if the key does not exist in the validating data then skip validation. if ($rule instanceof SometimesRule && !\array_key_exists($key, $this->data)) { break; } if ($rule instanceof Closure) { $this->apply_closure_rule($rule, $value, $key); continue; } $this->apply($rule, $value, $key); } } /** * Apply a closure to a value. * * @param Closure $closure The closure to apply. * @param mixed $value The value to apply the closure to. * @param string $key The key to apply the closure to. * * @return string|bool * * @since 1.0.0 */ protected function apply_closure_rule(Closure $closure, $value, string $key) { $result = $closure($value, $key, $this->data); if (\is_string($result)) { return $this->add_error($key, $result); } if ($result === \false) { return $this->add_error($key, message('validator.invalid', [$key])); } return \true; } /** * Apply a rule to a value. * * @param ValidationRule $rule The rule to apply. * @param mixed $value The value to apply the rule to. * @param string $key The key to apply the rule to. * * @return void * * @since 1.0.0 */ protected function apply(ValidationRule $rule, $value, string $key) { $rule->with_data($this->data)->with_name($key)->with_value($value)->clear_error_messages()->sync_custom_messages($this->custom_messages)->should_stop_on_first_failure($this->stop_on_first_failure); if (!$rule->passed()) { return $this->add_error($key, $rule->messages()); } return \true; } /** * Add an error to the errors array. * * @param string $key The key to add the error to. * @param array $messages The messages to add. * * @return bool * * @since 1.0.0 */ protected function add_error(string $key, $messages) { $this->errors[$key] ??= []; $this->errors[$key] = \array_merge($this->errors[$key], Arr::wrap($messages)); return \false; } /** * Check if the validation failed. * * @return bool * * @since 1.0.0 */ public function fails() { return !$this->passes(); } /** * Get the errors. * * @return array * * @since 1.0.0 */ public function errors() { return $this->errors; } /** * Validate the data. * * @return array * * @since 1.0.0 */ public function validate() { if ($this->fails()) { throw ValidationException::with_errors($this->errors()); } return $this->validated(); } /** * Get the validated data. * * @return array * * @since 1.0.0 */ public function validated() { if (empty($this->errors())) { $this->passes(); } if (!empty($this->errors())) { throw ValidationException::with_errors($this->errors()); } $results = []; $missing_value = new stdClass(); foreach ($this->get_rules() as $attribute => $rules) { $value = deep_get($this->get_data(), $attribute, $missing_value); if ($this->has_array_rule($rules) && $value !== null && !empty(\preg_grep('/^' . \preg_quote($attribute, '/') . '\\.+/', \array_keys($this->get_rules())))) { continue; } if ($value !== $missing_value) { Arr::set($results, $attribute, $value); } } return $results; } /** * Check if the rules have an array rule. * * @param array $rules The rules to check. * * @return bool * * @since 1.0.0 */ protected function has_array_rule(array $rules) { return !empty(Arr::where($rules, function ($rule) { return $rule instanceof ArrayRule; })); } /** * Sometimes the rules should be applied. * * @param string $key The key to apply the rules to. * @param array|string $rules The rules to apply. * @param callable $callback The callback to check if the rules should be applied. * * @return void * * @since 1.0.0 */ public function sometimes(string $key, $rules, $callback) { if ($callback($this->data)) { $rules = [$key => $rules]; $rules = $this->parse_rules($rules); $this->rules = \array_merge($this->rules, $rules); } } }