48 $this->filesystem =
new Filesystem\Filesystem();
49 $this->file_loader =
new Translation\FileLoader( $this->filesystem,
'' );
50 $this->translator =
new Translation\Translator( $this->file_loader,
'' );
51 $this->validator_factory =
new Validation\Factory( $this->translator );
53 $this->add_custom_validation_rules();
64 $this->validator_factory->extend(
'is',
function ( $attribute,
$value, $parameters ) {
65 if ( ! is_array( $parameters ) ) {
69 return $value === $parameters[0];
72 $this->validator_factory->extend(
'isNot',
function ( $attribute,
$value, $parameters ) {
73 if ( ! is_array( $parameters ) ) {
77 return $value !== $parameters[0];
81 $this->validator_factory->extend(
'has',
function ( $attribute,
$value, $parameters ) {
82 if ( ! is_array( $parameters ) ) {
87 return in_array( $parameters[0],
$value );
90 $this->validator_factory->extend(
'matches',
function ( $attribute,
$value, $parameters ) {
91 if ( ! is_array( $parameters ) ) {
95 return preg_match(
'/' . $parameters[0] .
'/',
$value );
112 $validator = $this->validator_factory->make(
114 [
'value' => $rule ],
119 if ( ! $validator->fails() ) {
142 public function validate( $plugin, array $original_settings, array $settings_to_validate ) {
143 $validated_settings = [];
145 $missing_settings = array_keys( array_diff_key( $original_settings, $settings_to_validate ) );
147 if ( $missing_settings ) {
148 $missing_settings_title = array_map(
function ( $setting ) use ( $original_settings ) {
149 return $original_settings[ $setting ][
'title'];
150 }, $missing_settings );
154 esc_html_x(
'Missing settings: [settings].',
'Placeholders inside [] are not to be translated.',
'gk-gravityview' ),
155 [
'[settings]' => implode(
', ', $missing_settings_title ) ]
160 foreach ( $original_settings as $setting ) {
161 $value_to_validate = $settings_to_validate[ $setting[
'id'] ];
163 if ( empty( $setting[
'validation'] ) ) {
172 do_action(
"gk/foundation/settings/${plugin}/validation/${setting['id']}", $setting, $value_to_validate );
174 $validated_settings[ $setting[
'id'] ] = $value_to_validate;
180 if ( CoreHelpers::is_callable_function( $setting[
'validation'] ) ) {
181 call_user_func( $setting[
'validation'], $setting, $value_to_validate );
183 $validated_settings[ $setting[
'id'] ] = $value_to_validate;
189 $validation_rules = empty( $setting[
'validation'][0] ) ? [ $setting[
'validation'] ] : $setting[
'validation'];
192 foreach ( $validation_rules as $validation_rule ) {
193 if ( empty( $validation_rule[
'rule'] ) ) {
196 esc_html_x(
'Validation rule for setting [setting] is missing.',
'Placeholders inside [] are not to be translated.',
'gk-gravityview' ),
197 [
'[setting]' => $setting[
'id'] ]
204 if ( ! $this->run_validator( $validation_rule[
'rule'], $value_to_validate ) ) {
212 esc_html_x(
'Validation for setting [setting] failed: [reason].',
'Placeholders inside [] are not to be translated.',
'gk-gravityview' ),
214 '[setting]' => $setting[
'id'],
215 '[reason]' => $e->getMessage()
223 $validated_settings[ $setting[
'id'] ] = $value_to_validate;
227 $settings_failed_validation = array_keys( array_diff_key( $settings_to_validate, $validated_settings ) );
229 if ( ! empty( $settings_failed_validation ) ) {
232 esc_html_x(
'Settings that failed validation: [settings].',
'Placeholders inside [] are not to be translated.',
'gk-gravityview' ),
233 [
'[settings]' => implode(
', ', $settings_failed_validation ) ]
validate( $plugin, array $original_settings, array $settings_to_validate)
Validates settings.
add_custom_validation_rules()
Adds custom validation rules (these match custom Yup rules added in the UI).
run_validator( $rule, $value)
Performs validation.