activation-tracker.php
1 week ago
display-options.php
1 week ago
field-type-settings.php
1 week ago
field.php
1 week ago
filed-validation.php
1 week ago
myaccount-edit-address.php
1 week ago
myaccount-field-processor.php
1 week ago
plugin.php
1 week ago
settings.php
1 week ago
tracker.php
1 week ago
user-meta-checkout.php
1 week ago
user-meta.php
1 week ago
user-profile.php
1 week ago
filed-validation.php
107 lines
| 1 | <?php |
| 2 | |
| 3 | use WPDesk\FCF\Free\Field\Type\FileType; |
| 4 | use WPDesk\FCF\Free\Field\Type\MultiCheckboxType; |
| 5 | use WPDesk\FCF\Free\Field\Type\MultiSelectType; |
| 6 | use WPDesk\FCF\Free\Field\Type\TextareaType; |
| 7 | |
| 8 | if ( ! defined( 'ABSPATH' ) ) { |
| 9 | exit; // Exit if accessed directly |
| 10 | } |
| 11 | |
| 12 | class Flexible_Checkout_Fields_Field_Validation { |
| 13 | |
| 14 | /** |
| 15 | * @var Flexible_Checkout_Fields_Plugin |
| 16 | */ |
| 17 | protected $plugin; |
| 18 | |
| 19 | /** |
| 20 | * Flexible_Checkout_Fields_Field_Validation constructor. |
| 21 | * |
| 22 | * @param Flexible_Checkout_Fields_Plugin $plugin |
| 23 | */ |
| 24 | public function __construct( $plugin ) { |
| 25 | $this->plugin = $plugin; |
| 26 | } |
| 27 | |
| 28 | /** |
| 29 | * |
| 30 | */ |
| 31 | public function hooks() { |
| 32 | add_action( 'woocommerce_after_checkout_validation', [ $this, 'woocommerce_after_checkout_validation_action' ] ); |
| 33 | add_filter( 'woocommerce_checkout_required_field_notice', [ $this, 'woocommerce_checkout_required_field_notice_filter' ], 10, 2 ); |
| 34 | } |
| 35 | |
| 36 | public function woocommerce_checkout_required_field_notice_filter( $notice, $field_label ) { |
| 37 | $field_label = strip_tags( $field_label ); |
| 38 | $notice = sprintf( __( '%s is a required field.', 'woocommerce' ), '<strong>' . $field_label . '</strong>' ); |
| 39 | return $notice; |
| 40 | } |
| 41 | |
| 42 | /** |
| 43 | * @param $data |
| 44 | */ |
| 45 | public function woocommerce_after_checkout_validation_action( $data ) { |
| 46 | foreach ( $data as $field => $value ) { |
| 47 | do_action( 'flexible_checkout_fields_validate_' . $field, $value ); |
| 48 | } |
| 49 | $settings = $this->plugin->get_settings(); |
| 50 | $custom_validations = $this->get_custom_validations(); |
| 51 | foreach ( $settings as $section => $fields ) { |
| 52 | foreach ( $fields as $field_key => $field ) { |
| 53 | if ( isset( $_POST[ $field_key ] ) && ! empty( $field['validation'] ) && array_key_exists( $field['validation'], $custom_validations ) ) { |
| 54 | call_user_func( $custom_validations[ $field['validation'] ]['callback'], $field['label'], sanitize_textarea_field( $_POST[ $field_key ] ), $field ); |
| 55 | } |
| 56 | if ( ! ( $field['custom_field'] ?? false ) ) { |
| 57 | continue; |
| 58 | } |
| 59 | |
| 60 | if ( in_array( $field['type'], [ TextareaType::FIELD_TYPE ] ) ) { |
| 61 | $value = sanitize_textarea_field( wp_unslash( $_POST[ $field_key ] ?? '' ) ); |
| 62 | } elseif ( in_array( $field['type'], [ MultiCheckboxType::FIELD_TYPE, MultiSelectType::FIELD_TYPE, FileType::FIELD_TYPE ] ) ) { |
| 63 | $value = $_POST[ $field_key ] ?? []; |
| 64 | $value = json_encode( wp_unslash( $value ), JSON_UNESCAPED_UNICODE ); |
| 65 | } else { |
| 66 | $value = sanitize_text_field( wp_unslash( $_POST[ $field_key ] ?? '' ) ); |
| 67 | } |
| 68 | |
| 69 | do_action( 'flexible_checkout_fields_validate_' . $field['type'], $value, $field ); |
| 70 | } |
| 71 | } |
| 72 | } |
| 73 | |
| 74 | /** |
| 75 | * Get custom validations. |
| 76 | * |
| 77 | * @param string $section . |
| 78 | * @return array |
| 79 | */ |
| 80 | public function get_custom_validations( $section = '' ) { |
| 81 | return apply_filters( 'flexible_checkout_fields_custom_validation', [], $section ); |
| 82 | } |
| 83 | |
| 84 | /** |
| 85 | * Get validation options. |
| 86 | * |
| 87 | * @param string $section . |
| 88 | * @return array |
| 89 | */ |
| 90 | public function get_validation_options( $section = '' ) { |
| 91 | $validation_options = [ |
| 92 | '' => __( 'Default', 'flexible-checkout-fields' ), |
| 93 | 'none' => __( 'None', 'flexible-checkout-fields' ), |
| 94 | 'email' => __( 'Email', 'flexible-checkout-fields' ), |
| 95 | 'phone' => __( 'Phone', 'flexible-checkout-fields' ), |
| 96 | ]; |
| 97 | if ( in_array( $section, [ 'billing', 'shipping' ], true ) ) { |
| 98 | $validation_options['postcode'] = __( 'Postcode', 'flexible-checkout-fields' ); |
| 99 | } |
| 100 | $custom_validations = $this->get_custom_validations( $section ); |
| 101 | foreach ( $custom_validations as $custom_validation_key => $custom_validation ) { |
| 102 | $validation_options[ $custom_validation_key ] = $custom_validation['label']; |
| 103 | } |
| 104 | return $validation_options; |
| 105 | } |
| 106 | } |
| 107 |