PluginProbe ʕ •ᴥ•ʔ
Flexible Checkout Fields for WooCommerce – WooCommerce Checkout Manager / trunk
Flexible Checkout Fields for WooCommerce – WooCommerce Checkout Manager vtrunk
4.1.39 4.1.38 trunk 1.2 1.2.1 1.2.2 1.2.3 1.3 1.3.1 1.3.2 1.3.3 1.4 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.10 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.2 1.8.3 1.9.0 1.9.1 1.9.2 1.9.3 2.0.0 2.0.1 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.1.0 2.1.1 2.1.4 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.1 2.3.2 2.3.3 2.3.4 2.4.0 2.4.1 2.4.10 2.4.11 2.4.12 2.4.13 2.4.14 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.6.0 2.7.0 2.7.1 2.8.0 2.9.0 2.9.1 2.9.2 3.0.0 3.0.1 3.0.10 3.0.11 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.3.0 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.10 3.5.11 3.5.12 3.5.13 3.5.14 3.5.15 3.5.16 3.5.17 3.5.18 3.5.19 3.5.2 3.5.3 3.5.4 3.5.5 3.5.6 3.5.7 3.5.8 3.5.9 3.6.0 4.0.0 4.1.0 4.1.1 4.1.10 4.1.11 4.1.12 4.1.13 4.1.14 4.1.15 4.1.16 4.1.17 4.1.18 4.1.19 4.1.2 4.1.20 4.1.21 4.1.22 4.1.23 4.1.24 4.1.25 4.1.26 4.1.27 4.1.28 4.1.29 4.1.3 4.1.30 4.1.31 4.1.32 4.1.34 4.1.35 4.1.36 4.1.37 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9
flexible-checkout-fields / src / Validator / FieldValidator.php
flexible-checkout-fields / src / Validator Last commit date
Error 1 week ago Rule 1 week ago FieldValidator.php 1 week ago ValidationClassGenerator.php 1 week ago
FieldValidator.php
128 lines
1 <?php
2
3 namespace WPDesk\FCF\Free\Validator;
4
5 use FcfVendor\WPDesk\PluginBuilder\Plugin\Hookable;
6 use WPDesk\FCF\Free\Field\Type\ColorType;
7 use WPDesk\FCF\Free\Field\Type\EmailType;
8 use WPDesk\FCF\Free\Field\Type\NumberType;
9 use WPDesk\FCF\Free\Field\Type\PhoneType;
10 use WPDesk\FCF\Free\Field\Type\UrlType;
11 use WPDesk\FCF\Free\Settings\Option\CssOption;
12 use WPDesk\FCF\Free\Settings\Option\RequiredOption;
13 use WPDesk\FCF\Free\Settings\Option\ValidationOption;
14 use WPDesk\FCF\Free\Validator\Rule\ColorFormatRule;
15 use WPDesk\FCF\Free\Validator\Rule\EmailFormatRule;
16 use WPDesk\FCF\Free\Validator\Rule\NumberMaxRule;
17 use WPDesk\FCF\Free\Validator\Rule\NumberMinRule;
18 use WPDesk\FCF\Free\Validator\Rule\NumberStepRule;
19 use WPDesk\FCF\Free\Validator\Rule\UrlFormatRule;
20 use WPDesk\FCF\Free\Validator\Rule\ValidatorRule;
21 use WPDesk\FCF\Free\Validator\Rule\ValueRegexRule;
22
23 /**
24 * Supports the validation of field values.
25 */
26 class FieldValidator implements Hookable {
27
28 /**
29 * {@inheritdoc}
30 */
31 public function hooks() {
32 add_action( 'flexible_checkout_fields_validate_' . NumberType::FIELD_TYPE, [ $this, 'validate_number_field' ], 10, 2 );
33 add_action( 'flexible_checkout_fields_validate_' . EmailType::FIELD_TYPE, [ $this, 'validate_email_field' ], 10, 2 );
34 add_action( 'flexible_checkout_fields_validate_' . PhoneType::FIELD_TYPE, [ $this, 'validate_phone_field' ], 10, 2 );
35 add_action( 'flexible_checkout_fields_validate_' . UrlType::FIELD_TYPE, [ $this, 'validate_url_field' ], 10, 2 );
36 add_action( 'flexible_checkout_fields_validate_' . ColorType::FIELD_TYPE, [ $this, 'validate_color_field' ], 10, 2 );
37 }
38
39 /**
40 * @param array $field_data .
41 * @param string $field_name .
42 *
43 * @return array
44 */
45 public function add_validation_required_class( array $field_data, string $field_name ): array {
46 $field_required = $field_data[ RequiredOption::FIELD_NAME ] ?? '';
47 if ( ! $field_required ) {
48 return $field_data;
49 }
50
51 $field_data[ CssOption::FIELD_NAME ] .= ' validate-required';
52 return $field_data;
53 }
54
55 /**
56 * @param array $field_data .
57 * @param string $field_name .
58 *
59 * @return array
60 */
61 public function add_validation_type_class( array $field_data, string $field_name ): array {
62 $validation_type = $field_data[ ValidationOption::FIELD_NAME ] ?? '';
63 if ( ! $validation_type ) {
64 return $field_data;
65 }
66
67 $field_data[ CssOption::FIELD_NAME ] .= sprintf( ' validate-%s', $validation_type );
68 return $field_data;
69 }
70
71 /**
72 * @return void
73 *
74 * @internal
75 */
76 public function validate_email_field( string $value, array $field_data ) {
77 $this->validate_field_value( new EmailFormatRule(), $value, $field_data );
78 }
79
80 /**
81 * @return void
82 *
83 * @internal
84 */
85 public function validate_number_field( string $value, array $field_data ) {
86 $this->validate_field_value( new NumberMinRule(), $value, $field_data );
87 $this->validate_field_value( new NumberMaxRule(), $value, $field_data );
88 $this->validate_field_value( new NumberStepRule(), $value, $field_data );
89 }
90
91 /**
92 * @return void
93 *
94 * @internal
95 */
96 public function validate_phone_field( string $value, array $field_data ) {
97 $this->validate_field_value( new ValueRegexRule(), $value, $field_data );
98 }
99
100 /**
101 * @return void
102 *
103 * @internal
104 */
105 public function validate_url_field( string $value, array $field_data ) {
106 $this->validate_field_value( new UrlFormatRule(), $value, $field_data );
107 }
108
109 /**
110 * @return void
111 *
112 * @internal
113 */
114 public function validate_color_field( string $value, array $field_data ) {
115 $this->validate_field_value( new ColorFormatRule(), $value, $field_data );
116 }
117
118 private function validate_field_value( ValidatorRule $rule, string $value, array $field_data ): bool {
119 $validator_error = $rule->validate_value( $value, $field_data );
120 if ( $validator_error === null ) {
121 return true;
122 }
123
124 wc_add_notice( $validator_error->get_error_message(), 'error' );
125 return false;
126 }
127 }
128