1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
<?php
namespace SIW\WooCommerce\Checkout;
use SIW\Util;
class Validation{
public static function init() {
$self = new self();
add_action( 'wp_enqueue_scripts', [ $self, 'add_validation_script'] );
add_action( 'woocommerce_after_checkout_validation', [ $self, 'validate_checkout_fields' ], 10, 2 );
}
public function add_validation_script() {
wp_register_script( 'siw-checkout-validation', SIW_ASSETS_URL . 'js/siw-checkout-validation.js', ['jquery-validate'], SIW_PLUGIN_VERSION, true );
$validation = [
[
'class' => 'dateNL',
'regex' => Util::get_pattern( 'date' ),
'message' => esc_html__( 'Dit is geen geldige datum.', 'siw' ),
],
[
'class' => 'postalcodeNL',
'regex' => Util::get_pattern( 'postal_code' ),
'message' => esc_html__( 'Dit is geen geldige postcode.', 'siw' ),
],
];
wp_localize_script( 'siw-checkout-validation', 'siw_checkout_validation', $validation );
if ( is_checkout() && ! is_order_received_page() && ! is_checkout_pay_page() ) {
wp_enqueue_script( 'siw-checkout-validation' );
}
}
public function validate_checkout_fields( array $data, \WP_Error $errors ) {
$dob = $data['billing_dob'];
if ( ! (bool) preg_match( Util::get_regex('date'), $dob ) ) {
$errors->add( 'validation', sprintf( __( '%s bevat geen geldige datum.', 'siw' ), '<strong>' . esc_html__( 'Geboortedatum','siw' ) . '</strong>' ) );
}
else {
$min_age = 14;
$age = Util::calculate_age( $dob );
if ( $age < $min_age ) {
$errors->add( 'validation', sprintf( __( 'De minimumleeftijd voor deelname is %s jaar.', 'siw' ), '<strong>' . esc_html( $min_age ) . '</strong>' ) );
}
}
}
}