id = 'user_registration_date'; $this->form_id = 1; $this->registered_fields_config = array( 'label' => __( 'Date', 'user-registration' ), 'icon' => 'ur-icon ur-icon-calendar', ); $this->field_defaults = array( 'default_label' => __( 'Date', 'user-registration' ), 'default_field_name' => 'date_box_' . ur_get_random_number(), ); } /** * Get Registered admin fields. */ public function get_registered_admin_fields() { return '
  • ' . esc_html( $this->registered_fields_config['label'] ) . '
  • '; } /** * Validate field. * * @param [object] $single_form_field Field Data. * @param [object] $form_data Form Data. * @param [string] $filter_hook Hook. * @param [int] $form_id Form id. */ public function validation( $single_form_field, $form_data, $filter_hook, $form_id ) { $value = $form_data->value; $field_label = $single_form_field->general_setting->field_name; if ( empty( $value ) ) { return; } $is_enable_date_range = isset( $single_form_field->advance_setting->enable_date_range ) ? ur_string_to_bool( $single_form_field->advance_setting->enable_date_range ) : ''; $enabled_min_max = isset( $single_form_field->advance_setting->enable_min_max ) ? ur_string_to_bool( $single_form_field->advance_setting->enable_min_max ) : false; if ( $enabled_min_max ) { $min_date = isset( $single_form_field->advance_setting->min_date ) ? $single_form_field->advance_setting->min_date : ''; $max_date = isset( $single_form_field->advance_setting->max_date ) ? $single_form_field->advance_setting->max_date : ''; } if ( $is_enable_date_range ) { $dates = array(); preg_match( '/(\d{4}-\d{2}-\d{2}|\d{2}-\d{2}-\d{4}|\d{2}\/\d{2}\/\d{4}|[A-Za-z]+\s\d{1,2},\s\d{4})\s*[\w\s]+\s*(\d{4}-\d{2}-\d{2}|\d{2}-\d{2}-\d{4}|\d{2}\/\d{2}\/\d{4}|[A-Za-z]+\s\d{1,2},\s\d{4})/', $value, $matches ); if ( count( $matches ) == 3 ) { $dates = array( $matches[1], $matches[2] ); } foreach ( $dates as $date ) { $result = UR_Validation::is_date( trim( $date ) ); if ( is_wp_error( $result ) ) { $message = array( /* translators: %s - validation message */ $field_label => sprintf( __( 'Please select a valid date range.', 'user-registration' ) ), 'individual' => true, ); add_filter( $filter_hook, function ( $msg ) use ( $message, $form_data ) { $message = apply_filters( 'user_registration_modify_field_validation_response', $message, $form_data ); return $message; } ); } if ( $enabled_min_max ) { if ( ! empty( $min_date ) ) { $this->validate_min_date( $date, $min_date, $filter_hook, $field_label, $form_data ); } if ( ! empty( $max_date ) ) { $this->validate_max_date( $date, $max_date, $filter_hook, $field_label, $form_data ); } } } return; } // Check if the entered date is a valid date string. $result = UR_Validation::is_date( trim( $value ) ); if ( is_wp_error( $result ) ) { $message = array( /* translators: %s - validation message */ $field_label => sprintf( __( 'Please select a valid date.', 'user-registration' ) ), 'individual' => true, ); add_filter( $filter_hook, function ( $msg ) use ( $message, $form_data ) { $message = apply_filters( 'user_registration_modify_field_validation_response', $message, $form_data ); return $message; } ); } // Handle Min-Max Date. if ( $enabled_min_max ) { if ( ! empty( $min_date ) ) { $this->validate_min_date( $value, $min_date, $filter_hook, $field_label, $form_data ); } if ( ! empty( $max_date ) ) { $this->validate_max_date( $value, $max_date, $filter_hook, $field_label, $form_data ); } } } /** * Validate whether date is ahead of the min date. * * @param [string] $date Date. * @param [string] $min_date Min Date. * @param [string] $filter_hook Filter Hook. * @param [string] $field_label Field Label. * @param [object] $form_data Form Data. * @return void */ private function validate_min_date( $date, $min_date, $filter_hook, $field_label, $form_data ) { $date_timestamp = strtotime( str_replace( '/', '-', $date ) ); $min_date_timestamp = strtotime( $min_date ); if ( $date_timestamp < $min_date_timestamp ) { $message = array( /* translators: %s - validation message */ $field_label => sprintf( __( 'Please select a date after %s.', 'user-registration' ), $min_date ), 'individual' => true, ); add_filter( $filter_hook, function ( $msg ) use ( $message, $form_data ) { $message = apply_filters( 'user_registration_modify_field_validation_response', $message, $form_data ); return $message; } ); } } /** * Validate whether date is past the max date. * * @param [string] $date Date. * @param [string] $max_date Max Date. * @param [string] $filter_hook Filter Hook. * @param [string] $field_label Field Label. * @param [object] Form Data. * @return void */ private function validate_max_date( $date, $max_date, $filter_hook, $field_label, $form_data ) { $date_timestamp = strtotime( str_replace( '/', '-', $date ) ); $max_date_timestamp = strtotime( $max_date ); if ( $date_timestamp > $max_date_timestamp ) { $message = array( /* translators: %s - validation message */ $field_label => sprintf( __( 'Please select a date before %s', 'user-registration' ), $max_date ), 'individual' => true, ); add_filter( $filter_hook, function ( $msg ) use ( $message, $form_data ) { $message = apply_filters( 'user_registration_modify_field_validation_response', $message, $form_data ); return $message; } ); } } /** * Checks for valid date * * @param string $date_string Date. */ private function is_valid_date( $date_string ) { $date = date_parse( $date_string ); if ( 0 == $date['error_count'] && checkdate( $date['month'], $date['day'], $date['year'] ) ) { return true; } return false; } } return UR_Form_Field_Date::get_instance();