From 0f37654b960a2d16699e3c16908f34583937aa3d Mon Sep 17 00:00:00 2001 From: riteelama Date: Fri, 24 May 2024 16:21:05 +0545 Subject: [PATCH 01/14] Added - Fields for form settings --- .../builder/class-evf-builder-settings.php | 37 +++++++++++++++++++ includes/admin/evf-admin-functions.php | 4 +- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/includes/admin/builder/class-evf-builder-settings.php b/includes/admin/builder/class-evf-builder-settings.php index bf2764a6c..d227b12b2 100644 --- a/includes/admin/builder/class-evf-builder-settings.php +++ b/includes/admin/builder/class-evf-builder-settings.php @@ -790,6 +790,43 @@ public function output_content() { do_action( 'everest_forms_inline_akismet_protection_type_settings', $this, 'akismet_protection_type', 'connection_1' ); echo ''; echo ''; + + /** + * Minimum time for form submission. + * + * @since 3.0.1 + */ + echo '

' . esc_html__( 'Minimum time for form submission', 'everest-forms' ) . '

'; + everest_forms_panel_field( + 'toggle', + 'settings', + 'form_submission_min_waiting_time', + $this->form_data, + esc_html__( 'Enable minimum waiting time for form submission', 'everest-forms' ), + array( + 'default' => '0', + ) + ); + + echo '
'; + everest_forms_panel_field( + 'number', + 'settings', + 'form_submission_min_waiting_time_input', + $this->form_data, + esc_html__( 'Form submission minimum waiting time (In seconds)', 'everest-forms' ), + array( + 'default' => '', + 'tooltip' => esc_html__( 'Enter the minimum time waiting time for form submission.', 'everest-forms' ), + 'min_value' => 0, + ) + ); + + do_action( 'everest_forms_inline_form_submission_min_waiting_time_settings', $this, 'form_submission_min_waiting_time', 'connection_1' ); + + do_action( 'everest_forms_inline_form_submission_min_waiting_time_section_settings', $this, 'form_submission_min_waiting_time_section', 'connection_1' ); + echo '
'; + echo '
'; do_action( 'everest_forms_inline_security_settings', $this ); echo '
'; diff --git a/includes/admin/evf-admin-functions.php b/includes/admin/evf-admin-functions.php index 2979d68d7..7922f755a 100644 --- a/includes/admin/evf-admin-functions.php +++ b/includes/admin/evf-admin-functions.php @@ -192,6 +192,7 @@ function everest_forms_panel_field( $option, $panel, $field, $form_data, $label, $default = isset( $args['default'] ) ? $args['default'] : ''; $tinymce = isset( $args['tinymce'] ) ? $args['tinymce'] : ''; $placeholder = ! empty( $args['placeholder'] ) ? esc_attr( $args['placeholder'] ) : ''; + $min_value = ! empty( $args['min_value'] ) ? esc_attr( $args['min_value'] ) : ''; $data_attr = ''; $output = ''; @@ -239,13 +240,14 @@ function everest_forms_panel_field( $option, $panel, $field, $form_data, $label, case 'number': case 'text': $output = sprintf( - '', + '', $option, sanitize_html_class( $panel_id ), sanitize_html_class( $field ), $field_name, esc_attr( $value ), $placeholder, + $min_value, $input_class, $data_attr, $custom_attributes From 60ce54eddd28a9358bb2bdc762521f6aa6d4f8df Mon Sep 17 00:00:00 2001 From: riteelama Date: Fri, 24 May 2024 16:36:28 +0545 Subject: [PATCH 02/14] Added - Hide and show for the minimum time input field --- assets/js/admin/form-builder.js | 27 +++++++++++++++++++ .../builder/class-evf-builder-settings.php | 1 + 2 files changed, 28 insertions(+) diff --git a/assets/js/admin/form-builder.js b/assets/js/admin/form-builder.js index 22095bcb7..1a0f285e4 100644 --- a/assets/js/admin/form-builder.js +++ b/assets/js/admin/form-builder.js @@ -542,6 +542,7 @@ EVFPanelBuilder.init_datepickers(); EVFPanelBuilder.bindBulkOptionActions(); EVFPanelBuilder.bindAkismetInit(); + EVFPanelBuilder.bindFormSubmissionMinWaitingTime(); // Fields Panel. EVFPanelBuilder.bindUIActionsFields(); @@ -3204,6 +3205,32 @@ $(document).find('.everest-forms-akismet-protection-type').hide(); } }, + + /** + * Form Submission minimum waiting time. + * + * @since 3.0.2 + */ + bindFormSubmissionMinWaitingTime:function(){ + var submissionWaitingTimeEnabler = $(document).find('#everest-forms-panel-field-settings-form_submission_min_waiting_time'); + EVFPanelBuilder.formSubmissionMinTimeToggler(submissionWaitingTimeEnabler); + $(document).on('change', '#everest-forms-panel-field-settings-form_submission_min_waiting_time', function(){ + EVFPanelBuilder.formSubmissionMinTimeToggler($(this)); + }) + }, + /** + * Form Submission waiting time Toggler. + * + * @param {object} submissionWaitingTimeEnabler + */ + formSubmissionMinTimeToggler:function(submissionWaitingTimeEnabler){ + if($(submissionWaitingTimeEnabler).is(':checked')){ + $(document).find('.everest-forms-form-submission-minimum-waiting-time').show(); + }else{ + $(document).find('.everest-forms-form-submission-minimum-waiting-time').hide(); + } + }, + bindPrivacyPolicyActions: function() { // Consent message change handler. $( document.body ).on( 'input', '.everest-forms-field-option .evf-privacy-policy-consent-message', function ( e ) { diff --git a/includes/admin/builder/class-evf-builder-settings.php b/includes/admin/builder/class-evf-builder-settings.php index d227b12b2..31102c79e 100644 --- a/includes/admin/builder/class-evf-builder-settings.php +++ b/includes/admin/builder/class-evf-builder-settings.php @@ -805,6 +805,7 @@ public function output_content() { esc_html__( 'Enable minimum waiting time for form submission', 'everest-forms' ), array( 'default' => '0', + 'tooltip' => esc_html__( 'Prevents the form submission before the specified time', 'everest-forms' ), ) ); From 6670ae1e6f6cd1a937dd9c8eb561d9227a373a08 Mon Sep 17 00:00:00 2001 From: riteelama Date: Mon, 27 May 2024 16:27:07 +0545 Subject: [PATCH 03/14] Added - Spam prevention by form submission waiting duration --- .../builder/class-evf-builder-settings.php | 4 +-- includes/class-evf-form-task.php | 30 +++++++++++++++++++ .../shortcodes/class-evf-shortcode-form.php | 4 +++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/includes/admin/builder/class-evf-builder-settings.php b/includes/admin/builder/class-evf-builder-settings.php index 31102c79e..d79b3e7a8 100644 --- a/includes/admin/builder/class-evf-builder-settings.php +++ b/includes/admin/builder/class-evf-builder-settings.php @@ -790,8 +790,9 @@ public function output_content() { do_action( 'everest_forms_inline_akismet_protection_type_settings', $this, 'akismet_protection_type', 'connection_1' ); echo '
'; echo ''; + do_action( 'everest_forms_inline_security_settings', $this ); - /** + /** * Minimum time for form submission. * * @since 3.0.1 @@ -828,7 +829,6 @@ public function output_content() { do_action( 'everest_forms_inline_form_submission_min_waiting_time_section_settings', $this, 'form_submission_min_waiting_time_section', 'connection_1' ); echo '
'; echo '
'; - do_action( 'everest_forms_inline_security_settings', $this ); echo ''; do_action( 'everest_forms_settings_panel_content', $this ); diff --git a/includes/class-evf-form-task.php b/includes/class-evf-form-task.php index 962029aa1..aedb5a794 100644 --- a/includes/class-evf-form-task.php +++ b/includes/class-evf-form-task.php @@ -65,6 +65,8 @@ public function __construct() { add_action( 'everest_forms_complete_entry_save', array( $this, 'evf_set_approval_status' ), 10, 2 ); add_action( 'admin_init', array( $this, 'evf_admin_approve_entry' ), 10, 2 ); add_action( 'admin_init', array( $this, 'evf_admin_deny_entry' ) ); + // Form Submission Waiting Time. + add_filter( 'everest_forms_process_initial_errors', array( $this, 'form_submission_waiting_time' ), 10, 2 ); } /** @@ -1432,4 +1434,32 @@ public function evf_set_approval_status( $entry_id, $form_data ) { update_option( 'everest_forms_admin_entry_approval_token', $evf_new_token ); } } + + /** + * Prevents form submission before the specified duration. + * + * @param array $errors Form submit errors. + * @param object $form_data An object containing settings for the form. + */ + public function form_submission_waiting_time( $errors, $form_data ) { + $form_submission_waiting_time_enable = isset( $form_data['settings']['form_submission_min_waiting_time'] ) ? $form_data['settings']['form_submission_min_waiting_time'] : ''; + $submission_duration = $form_data['settings']['form_submission_min_waiting_time_input']; + + if ( '1' === $form_submission_waiting_time_enable && 0 <= absint( $submission_duration ) ) { + $atts = $form_data['id']; + $time_after_submit = time(); + + session_start(); + $time_before_submit = $_SESSION['start_time']; + + $form_submission_err_msg = sprintf( esc_html__( 'Please wait few seconds, security checkup is being executed', 'everest-forms' ) ); + + if ( $time_after_submit - $time_before_submit < $submission_duration ) { + $form_id = ! empty( $form_data['id'] ) ? $form_data['id'] : 0; + $errors[ $form_id ]['header'] = $form_submission_err_msg; + } + unset( $_SESSION['start_time'] ); + return $errors; + } + } } diff --git a/includes/shortcodes/class-evf-shortcode-form.php b/includes/shortcodes/class-evf-shortcode-form.php index aa454e199..ed35b655d 100644 --- a/includes/shortcodes/class-evf-shortcode-form.php +++ b/includes/shortcodes/class-evf-shortcode-form.php @@ -849,6 +849,10 @@ public static function output( $atts ) { self::add_custom_css_js( $atts['id'] ); + if ( ! isset( $_SESSION['start_time'] ) && ! empty( $atts ) ) { + $_SESSION['start_time'] = time(); + } + $atts = shortcode_atts( array( 'id' => false, From 77060cdcd157fc57aeed8616b0b5041d4ff32368 Mon Sep 17 00:00:00 2001 From: riteelama Date: Mon, 27 May 2024 16:48:38 +0545 Subject: [PATCH 04/14] Fix -Session declared issues --- includes/shortcodes/class-evf-shortcode-form.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/includes/shortcodes/class-evf-shortcode-form.php b/includes/shortcodes/class-evf-shortcode-form.php index ed35b655d..27cf7f0d5 100644 --- a/includes/shortcodes/class-evf-shortcode-form.php +++ b/includes/shortcodes/class-evf-shortcode-form.php @@ -849,7 +849,8 @@ public static function output( $atts ) { self::add_custom_css_js( $atts['id'] ); - if ( ! isset( $_SESSION['start_time'] ) && ! empty( $atts ) ) { + if ( ! isset( $_SESSION ) && ! empty( $atts ) ) { + session_start(); $_SESSION['start_time'] = time(); } From 183a2387b17a8e0b01b58396f6a36740a5091940 Mon Sep 17 00:00:00 2001 From: riteelama Date: Mon, 27 May 2024 16:55:19 +0545 Subject: [PATCH 05/14] Added - Same duration check --- includes/class-evf-form-task.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/includes/class-evf-form-task.php b/includes/class-evf-form-task.php index aedb5a794..9c4019b4b 100644 --- a/includes/class-evf-form-task.php +++ b/includes/class-evf-form-task.php @@ -1454,10 +1454,11 @@ public function form_submission_waiting_time( $errors, $form_data ) { $form_submission_err_msg = sprintf( esc_html__( 'Please wait few seconds, security checkup is being executed', 'everest-forms' ) ); - if ( $time_after_submit - $time_before_submit < $submission_duration ) { + if ( $time_after_submit - $time_before_submit <= $submission_duration ) { $form_id = ! empty( $form_data['id'] ) ? $form_data['id'] : 0; $errors[ $form_id ]['header'] = $form_submission_err_msg; } + unset( $_SESSION['start_time'] ); return $errors; } From 7342fe29afa93428c88b83531a556ab58eddf03d Mon Sep 17 00:00:00 2001 From: riteelama Date: Mon, 27 May 2024 17:10:28 +0545 Subject: [PATCH 06/14] Added - for id to session key --- includes/class-evf-form-task.php | 5 +++-- includes/shortcodes/class-evf-shortcode-form.php | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/includes/class-evf-form-task.php b/includes/class-evf-form-task.php index 9c4019b4b..0b949a529 100644 --- a/includes/class-evf-form-task.php +++ b/includes/class-evf-form-task.php @@ -1450,12 +1450,13 @@ public function form_submission_waiting_time( $errors, $form_data ) { $time_after_submit = time(); session_start(); - $time_before_submit = $_SESSION['start_time']; + $form_id = ! empty( $form_data['id'] ) ? $form_data['id'] : 0; + $session_key = 'start_time_' . $form_id; + $time_before_submit = $_SESSION[ $session_key ]; $form_submission_err_msg = sprintf( esc_html__( 'Please wait few seconds, security checkup is being executed', 'everest-forms' ) ); if ( $time_after_submit - $time_before_submit <= $submission_duration ) { - $form_id = ! empty( $form_data['id'] ) ? $form_data['id'] : 0; $errors[ $form_id ]['header'] = $form_submission_err_msg; } diff --git a/includes/shortcodes/class-evf-shortcode-form.php b/includes/shortcodes/class-evf-shortcode-form.php index 27cf7f0d5..8ba182207 100644 --- a/includes/shortcodes/class-evf-shortcode-form.php +++ b/includes/shortcodes/class-evf-shortcode-form.php @@ -851,7 +851,8 @@ public static function output( $atts ) { if ( ! isset( $_SESSION ) && ! empty( $atts ) ) { session_start(); - $_SESSION['start_time'] = time(); + $session_key = 'start_time_' . $atts['id']; + $_SESSION[ $session_key ] = time(); } $atts = shortcode_atts( From 487a7a378da981ae87d9edc32fe969dba7c25025 Mon Sep 17 00:00:00 2001 From: riteelama Date: Tue, 25 Jun 2024 13:23:40 +0545 Subject: [PATCH 07/14] Default duration for form submission --- includes/admin/builder/class-evf-builder-settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/admin/builder/class-evf-builder-settings.php b/includes/admin/builder/class-evf-builder-settings.php index d79b3e7a8..99f0a4e45 100644 --- a/includes/admin/builder/class-evf-builder-settings.php +++ b/includes/admin/builder/class-evf-builder-settings.php @@ -818,7 +818,7 @@ public function output_content() { $this->form_data, esc_html__( 'Form submission minimum waiting time (In seconds)', 'everest-forms' ), array( - 'default' => '', + 'default' => '5', 'tooltip' => esc_html__( 'Enter the minimum time waiting time for form submission.', 'everest-forms' ), 'min_value' => 0, ) From 3610b2e38803b783060fee48162e87b64d42c29e Mon Sep 17 00:00:00 2001 From: riteelama Date: Tue, 25 Jun 2024 13:40:50 +0545 Subject: [PATCH 08/14] Update - title for form submission waiting time --- includes/admin/builder/class-evf-builder-settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/admin/builder/class-evf-builder-settings.php b/includes/admin/builder/class-evf-builder-settings.php index 99f0a4e45..8c594b54c 100644 --- a/includes/admin/builder/class-evf-builder-settings.php +++ b/includes/admin/builder/class-evf-builder-settings.php @@ -797,7 +797,7 @@ public function output_content() { * * @since 3.0.1 */ - echo '

' . esc_html__( 'Minimum time for form submission', 'everest-forms' ) . '

'; + echo '

' . esc_html__( 'Waiting time for form submission', 'everest-forms' ) . '

'; everest_forms_panel_field( 'toggle', 'settings', From 4d203f0cdbf607e0fb3be8d2b9a97dba020e1379 Mon Sep 17 00:00:00 2001 From: riteelama Date: Tue, 25 Jun 2024 14:45:56 +0545 Subject: [PATCH 09/14] Fix -PHPCS --- includes/admin/evf-admin-functions.php | 8 ++++---- includes/class-evf-form-task.php | 2 +- includes/shortcodes/class-evf-shortcode-form.php | 2 -- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/includes/admin/evf-admin-functions.php b/includes/admin/evf-admin-functions.php index 7922f755a..56ca623e3 100644 --- a/includes/admin/evf-admin-functions.php +++ b/includes/admin/evf-admin-functions.php @@ -126,7 +126,7 @@ function evf_create_page( $slug, $option = '', $page_title = '', $page_content = */ function everest_forms_admin_fields( $options ) { if ( ! class_exists( 'EVF_Admin_Settings', false ) ) { - include dirname( __FILE__ ) . '/class-evf-admin-settings.php'; + include __DIR__ . '/class-evf-admin-settings.php'; } EVF_Admin_Settings::output_fields( $options ); @@ -140,7 +140,7 @@ function everest_forms_admin_fields( $options ) { */ function everest_forms_update_options( $options, $data = null ) { if ( ! class_exists( 'EVF_Admin_Settings', false ) ) { - include dirname( __FILE__ ) . '/class-evf-admin-settings.php'; + include __DIR__ . '/class-evf-admin-settings.php'; } EVF_Admin_Settings::save_fields( $options, $data ); @@ -156,7 +156,7 @@ function everest_forms_update_options( $options, $data = null ) { */ function everest_forms_settings_get_option( $option_name, $default = '' ) { if ( ! class_exists( 'EVF_Admin_Settings', false ) ) { - include dirname( __FILE__ ) . '/class-evf-admin-settings.php'; + include __DIR__ . '/class-evf-admin-settings.php'; } return EVF_Admin_Settings::get_option( $option_name, $default ); @@ -351,7 +351,7 @@ function everest_forms_panel_field( $option, $panel, $field, $form_data, $label, $output .= sprintf( ' ', esc_attr( $item['tooltip'] ) ); } $output .= ''; - $x ++; + $x++; } break; diff --git a/includes/class-evf-form-task.php b/includes/class-evf-form-task.php index 0b949a529..e6a3343cb 100644 --- a/includes/class-evf-form-task.php +++ b/includes/class-evf-form-task.php @@ -1452,7 +1452,7 @@ public function form_submission_waiting_time( $errors, $form_data ) { session_start(); $form_id = ! empty( $form_data['id'] ) ? $form_data['id'] : 0; $session_key = 'start_time_' . $form_id; - $time_before_submit = $_SESSION[ $session_key ]; + $time_before_submit = $session_value = isset( $_SESSION[ $session_key ] ) ? esc_html( $_SESSION[ $session_key ] ) : ''; $form_submission_err_msg = sprintf( esc_html__( 'Please wait few seconds, security checkup is being executed', 'everest-forms' ) ); diff --git a/includes/shortcodes/class-evf-shortcode-form.php b/includes/shortcodes/class-evf-shortcode-form.php index 8ba182207..feb8b2015 100644 --- a/includes/shortcodes/class-evf-shortcode-form.php +++ b/includes/shortcodes/class-evf-shortcode-form.php @@ -1163,9 +1163,7 @@ private static function view( $atts ) { * @return $url */ public static function evf_recaptcha_language( $url ) { - return esc_url_raw( add_query_arg( array( 'hl' => get_option( 'everest_forms_recaptcha_recaptcha_language', 'en-GB' ) ), $url ) ); - } /** From 0bafdd094a7efd9853258d6e32940c26b22b69c7 Mon Sep 17 00:00:00 2001 From: riteelama Date: Thu, 27 Jun 2024 14:49:44 +0545 Subject: [PATCH 10/14] --amend --- includes/class-evf-form-task.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/includes/class-evf-form-task.php b/includes/class-evf-form-task.php index e6a3343cb..1776eaf32 100644 --- a/includes/class-evf-form-task.php +++ b/includes/class-evf-form-task.php @@ -1452,9 +1452,16 @@ public function form_submission_waiting_time( $errors, $form_data ) { session_start(); $form_id = ! empty( $form_data['id'] ) ? $form_data['id'] : 0; $session_key = 'start_time_' . $form_id; - $time_before_submit = $session_value = isset( $_SESSION[ $session_key ] ) ? esc_html( $_SESSION[ $session_key ] ) : ''; - - $form_submission_err_msg = sprintf( esc_html__( 'Please wait few seconds, security checkup is being executed', 'everest-forms' ) ); + $time_before_submit = isset( $_SESSION[ $session_key ] ) ? esc_html( $_SESSION[ $session_key ] ) : ''; + + $form_submission_err_msg = apply_filters( + 'everest_forms_minimum_waiting_time_form_submission', + sprintf( + /* translators: %s - Minimum waiting duration */ + esc_html__( 'Please wait %s seconds, security checkup is being executed', 'everest-forms' ), + $submission_duration + ) + ); if ( $time_after_submit - $time_before_submit <= $submission_duration ) { $errors[ $form_id ]['header'] = $form_submission_err_msg; From 08e1701e483c92c389beabb3634c8576ac2f7b58 Mon Sep 17 00:00:00 2001 From: Deependra Chaudhary Date: Thu, 27 Jun 2024 17:38:02 +0545 Subject: [PATCH 11/14] Fi9x session already defined issue --- includes/class-evf-form-task.php | 8 ++++++-- includes/shortcodes/class-evf-shortcode-form.php | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/includes/class-evf-form-task.php b/includes/class-evf-form-task.php index 1776eaf32..e1c403799 100644 --- a/includes/class-evf-form-task.php +++ b/includes/class-evf-form-task.php @@ -6,6 +6,10 @@ * @since 1.0.0 */ +if ( ! session_id() ) { + session_start(); +} + defined( 'ABSPATH' ) || exit; /** @@ -1442,6 +1446,7 @@ public function evf_set_approval_status( $entry_id, $form_data ) { * @param object $form_data An object containing settings for the form. */ public function form_submission_waiting_time( $errors, $form_data ) { + $form_submission_waiting_time_enable = isset( $form_data['settings']['form_submission_min_waiting_time'] ) ? $form_data['settings']['form_submission_min_waiting_time'] : ''; $submission_duration = $form_data['settings']['form_submission_min_waiting_time_input']; @@ -1449,7 +1454,6 @@ public function form_submission_waiting_time( $errors, $form_data ) { $atts = $form_data['id']; $time_after_submit = time(); - session_start(); $form_id = ! empty( $form_data['id'] ) ? $form_data['id'] : 0; $session_key = 'start_time_' . $form_id; $time_before_submit = isset( $_SESSION[ $session_key ] ) ? esc_html( $_SESSION[ $session_key ] ) : ''; @@ -1463,7 +1467,7 @@ public function form_submission_waiting_time( $errors, $form_data ) { ) ); - if ( $time_after_submit - $time_before_submit <= $submission_duration ) { + if ( $time_after_submit - $time_before_submit <= absint( $submission_duration ) * 100 ) { $errors[ $form_id ]['header'] = $form_submission_err_msg; } diff --git a/includes/shortcodes/class-evf-shortcode-form.php b/includes/shortcodes/class-evf-shortcode-form.php index feb8b2015..91a2b90cd 100644 --- a/includes/shortcodes/class-evf-shortcode-form.php +++ b/includes/shortcodes/class-evf-shortcode-form.php @@ -8,6 +8,9 @@ * @version 1.0.0 * @since 1.3.2 */ +if ( ! session_id() ) { + session_start(); +} defined( 'ABSPATH' ) || exit; @@ -850,7 +853,7 @@ public static function output( $atts ) { self::add_custom_css_js( $atts['id'] ); if ( ! isset( $_SESSION ) && ! empty( $atts ) ) { - session_start(); + $session_key = 'start_time_' . $atts['id']; $_SESSION[ $session_key ] = time(); } From 17340c5f4351a3d757e12c7ffc32dbca9230c936 Mon Sep 17 00:00:00 2001 From: riteelama Date: Wed, 10 Jul 2024 17:22:18 +0545 Subject: [PATCH 12/14] Update - Form submission handling through js --- assets/css/class-evf-frontend-scripts.php | 377 ------------------ assets/js/frontend/everest-forms.js | 17 + includes/class-evf-form-task.php | 49 ++- includes/class-evf-frontend-scripts.php | 1 + .../shortcodes/class-evf-shortcode-form.php | 30 +- 5 files changed, 62 insertions(+), 412 deletions(-) delete mode 100644 assets/css/class-evf-frontend-scripts.php diff --git a/assets/css/class-evf-frontend-scripts.php b/assets/css/class-evf-frontend-scripts.php deleted file mode 100644 index 1899f67bc..000000000 --- a/assets/css/class-evf-frontend-scripts.php +++ /dev/null @@ -1,377 +0,0 @@ - array( - 'src' => self::get_asset_url( 'assets/css/everest-forms.css' ), - 'deps' => '', - 'version' => EVF_VERSION, - 'media' => 'all', - 'has_rtl' => true, - ), - 'jquery-intl-tel-input' => array( - 'src' => self::get_asset_url( 'assets/css/intlTelInput/intlTelInput.css' ), - 'deps' => array(), - 'version' => EVF_VERSION, - 'has_rtl' => false, - ), - 'everest-forms-survey-polls-quiz-style' => array( - 'src' => self::get_asset_url( 'assets/css/evf-survey-polls-quiz.css' ), - 'deps' => array(), - 'version' => EVF_VERSION, - 'has_rtl' => false, - ), - ) - ); - } - - /** - * Return asset URL. - * - * @param string $path Assets path. - * - * @return string - */ - private static function get_asset_url( $path ) { - return apply_filters( 'everest_forms_get_asset_url', plugins_url( $path, EVF_PLUGIN_FILE ), $path ); - } - - /** - * Register a script for use. - * - * @uses wp_register_script() - * @param string $handle Name of the script. Should be unique. - * @param string $path Full URL of the script, or path of the script relative to the WordPress root directory. - * @param string[] $deps An array of registered script handles this script depends on. - * @param string $version String specifying script version number, if it has one, which is added to the URL as a query string for cache busting purposes. If version is set to false, a version number is automatically added equal to current installed WordPress version. If set to null, no version is added. - * @param boolean $in_footer Whether to enqueue the script before instead of in the . Default 'false'. - */ - private static function register_script( $handle, $path, $deps = array( 'jquery' ), $version = EVF_VERSION, $in_footer = true ) { - self::$scripts[] = $handle; - wp_register_script( $handle, $path, $deps, $version, $in_footer ); - } - - /** - * Register and enqueue a script for use. - * - * @uses wp_enqueue_script() - * @param string $handle Name of the script. Should be unique. - * @param string $path Full URL of the script, or path of the script relative to the WordPress root directory. - * @param string[] $deps An array of registered script handles this script depends on. - * @param string $version String specifying script version number, if it has one, which is added to the URL as a query string for cache busting purposes. If version is set to false, a version number is automatically added equal to current installed WordPress version. If set to null, no version is added. - * @param boolean $in_footer Whether to enqueue the script before instead of in the . Default 'false'. - */ - private static function enqueue_script( $handle, $path = '', $deps = array( 'jquery' ), $version = EVF_VERSION, $in_footer = true ) { - if ( ! in_array( $handle, self::$scripts, true ) && $path ) { - self::register_script( $handle, $path, $deps, $version, $in_footer ); - } - wp_enqueue_script( $handle ); - } - - /** - * Register a style for use. - * - * @uses wp_register_style() - * @param string $handle Name of the stylesheet. Should be unique. - * @param string $path Full URL of the stylesheet, or path of the stylesheet relative to the WordPress root directory. - * @param string[] $deps An array of registered stylesheet handles this stylesheet depends on. - * @param string $version String specifying stylesheet version number, if it has one, which is added to the URL as a query string for cache busting purposes. If version is set to false, a version number is automatically added equal to current installed WordPress version. If set to null, no version is added. - * @param string $media The media for which this stylesheet has been defined. Accepts media types like 'all', 'print' and 'screen', or media queries like '(orientation: portrait)' and '(max-width: 640px)'. - * @param boolean $has_rtl If has RTL version to load too. - */ - private static function register_style( $handle, $path, $deps = array(), $version = EVF_VERSION, $media = 'all', $has_rtl = false ) { - self::$styles[] = $handle; - wp_register_style( $handle, $path, $deps, $version, $media ); - - if ( $has_rtl ) { - wp_style_add_data( $handle, 'rtl', 'replace' ); - } - } - - /** - * Register and enqueue a styles for use. - * - * @uses wp_enqueue_style() - * @param string $handle Name of the stylesheet. Should be unique. - * @param string $path Full URL of the stylesheet, or path of the stylesheet relative to the WordPress root directory. - * @param string[] $deps An array of registered stylesheet handles this stylesheet depends on. - * @param string $version String specifying stylesheet version number, if it has one, which is added to the URL as a query string for cache busting purposes. If version is set to false, a version number is automatically added equal to current installed WordPress version. If set to null, no version is added. - * @param string $media The media for which this stylesheet has been defined. Accepts media types like 'all', 'print' and 'screen', or media queries like '(orientation: portrait)' and '(max-width: 640px)'. - * @param boolean $has_rtl If has RTL version to load too. - */ - private static function enqueue_style( $handle, $path = '', $deps = array(), $version = EVF_VERSION, $media = 'all', $has_rtl = false ) { - if ( ! in_array( $handle, self::$styles, true ) && $path ) { - self::register_style( $handle, $path, $deps, $version, $media, $has_rtl ); - } - wp_enqueue_style( $handle ); - } - - /** - * Register all EVF scripts. - */ - private static function register_scripts() { - if ( evf_is_amp() ) { - return; - } - - $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; - $register_scripts = array( - 'inputmask' => array( - 'src' => self::get_asset_url( 'assets/js/inputmask/jquery.inputmask.bundle' . $suffix . '.js' ), - 'deps' => array( 'jquery' ), - 'version' => '4.0.0-beta.58', - ), - 'flatpickr' => array( - 'src' => self::get_asset_url( 'assets/js/flatpickr/flatpickr' . $suffix . '.js' ), - 'deps' => array( 'jquery' ), - 'version' => '4.6.3', - ), - 'mailcheck' => array( - 'src' => self::get_asset_url( 'assets/js/mailcheck/mailcheck' . $suffix . '.js' ), - 'deps' => array( 'jquery' ), - 'version' => '1.1.2', - ), - 'selectWoo' => array( - 'src' => self::get_asset_url( 'assets/js/selectWoo/selectWoo.full' . $suffix . '.js' ), - 'deps' => array( 'jquery' ), - 'version' => '1.0.8', - ), - 'jquery-intl-tel-input' => array( - 'src' => self::get_asset_url( '/assets/js/intlTelInput/jquery.intlTelInput' . $suffix . '.js ' ), - 'deps' => array( 'jquery' ), - 'version' => '16.0.7', - ), - 'jquery-validate' => array( - 'src' => self::get_asset_url( 'assets/js/jquery-validate/jquery.validate' . $suffix . '.js' ), - 'deps' => array( 'jquery' ), - 'version' => '1.19.2', - ), - 'everest-forms' => array( - 'src' => self::get_asset_url( 'assets/js/frontend/everest-forms' . $suffix . '.js' ), - 'deps' => array( 'jquery', 'inputmask', 'jquery-validate', 'jquery-intl-tel-input', 'selectWoo' ), - 'version' => EVF_VERSION, - ), - 'everest-forms-text-limit' => array( - 'src' => self::get_asset_url( 'assets/js/frontend/text-limit' . $suffix . '.js' ), - 'deps' => array(), - 'version' => EVF_VERSION, - ), - 'everest-forms-ajax-submission' => array( - 'src' => self::get_asset_url( 'assets/js/frontend/ajax-submission' . $suffix . '.js' ), - 'deps' => array( 'jquery', 'inputmask', 'jquery-validate' ), - 'version' => EVF_VERSION, - ), - 'everest-forms-survey-polls-quiz-script' => array( - 'src' => self::get_asset_url( 'assets/js/frontend/everest-forms-survey-polls-quiz' . $suffix . '.js' ), - 'deps' => array(), - 'version' => EVF_VERSION, - ), - ); - foreach ( $register_scripts as $name => $props ) { - self::register_script( $name, $props['src'], $props['deps'], $props['version'] ); - } - } - - /** - * Register all EVF sty;es. - */ - private static function register_styles() { - $register_styles = array( - 'evf_select2' => array( - 'src' => self::get_asset_url( 'assets/css/select2.css' ), - 'deps' => array(), - 'version' => EVF_VERSION, - 'has_rtl' => false, - ), - 'flatpickr' => array( - 'src' => self::get_asset_url( 'assets/css/flatpickr.css' ), - 'deps' => array(), - 'version' => EVF_VERSION, - 'has_rtl' => false, - ), - 'jquery-intl-tel-input' => array( - 'src' => self::get_asset_url( 'assets/css/intlTelInput.css' ), - 'deps' => array(), - 'version' => EVF_VERSION, - 'has_rtl' => false, - ), - ); - foreach ( $register_styles as $name => $props ) { - self::register_style( $name, $props['src'], $props['deps'], $props['version'], 'all', $props['has_rtl'] ); - } - } - - /** - * Register/queue frontend scripts. - */ - public static function load_scripts() { - global $post; - - if ( ! did_action( 'before_everest_forms_init' ) ) { - return; - } - - self::register_scripts(); - self::register_styles(); - - // Enqueue dashicons. - // wp_enqueue_style( 'dashicons' ); - - // CSS Styles. - $enqueue_styles = self::get_styles(); - if ( $enqueue_styles ) { - foreach ( $enqueue_styles as $handle => $args ) { - if ( ! isset( $args['has_rtl'] ) ) { - $args['has_rtl'] = false; - } - - self::enqueue_style( $handle, $args['src'], $args['deps'], $args['version'], $args['media'], $args['has_rtl'] ); - } - } - } - - /** - * Localize a EVF script once. - * - * @param string $handle Script handle the data will be attached to. - */ - private static function localize_script( $handle ) { - if ( ! in_array( $handle, self::$wp_localize_scripts, true ) && wp_script_is( $handle ) ) { - $data = self::get_script_data( $handle ); - - if ( ! $data ) { - return; - } - - $name = str_replace( '-', '_', $handle ) . '_params'; - self::$wp_localize_scripts[] = $handle; - wp_localize_script( $handle, $name, apply_filters( $name, $data ) ); - } - } - - /** - * Return data for script handles. - * - * @param string $handle Script handle the data will be attached to. - * @return array|bool - */ - private static function get_script_data( $handle ) { - switch ( $handle ) { - case 'everest-forms': - $params = array( - 'ajax_url' => evf()->ajax_url(), - 'submit' => esc_html__( 'Submit', 'everest-forms' ), - 'disable_user_details' => get_option( 'everest_forms_disable_user_details' ), - 'everest_forms_data_save' => wp_create_nonce( 'everest_forms_data_save_nonce' ), - 'everest_forms_slot_booking' => wp_create_nonce( 'everest_forms_slot_booking_nonce' ), - 'i18n_messages_required' => get_option( 'everest_forms_required_validation' ), - 'i18n_messages_url' => get_option( 'everest_forms_url_validation' ), - 'i18n_messages_email' => get_option( 'everest_forms_email_validation' ), - 'i18n_messages_email_suggestion' => get_option( 'everest_forms_email_suggestion', esc_html__( 'Did you mean {suggestion}?', 'everest-forms' ) ), - 'i18n_messages_email_suggestion_title' => esc_attr__( 'Click to accept this suggestion.', 'everest-forms' ), - 'i18n_messages_confirm' => get_option( 'everest_forms_confirm_validation', __( 'Field values do not match.', 'everest-forms' ) ), - 'i18n_messages_check_limit' => get_option( 'everest_forms_check_limit_validation', esc_html__( 'You have exceeded number of allowed selections: {#}.', 'everest-forms' ) ), - 'i18n_messages_number' => get_option( 'everest_forms_number_validation' ), - 'i18n_no_matches' => _x( 'No matches found', 'enhanced select', 'everest-forms' ), - 'mailcheck_enabled' => (bool) apply_filters( 'everest_forms_mailcheck_enabled', true ), - 'mailcheck_domains' => array_map( 'sanitize_text_field', (array) apply_filters( 'everest_forms_mailcheck_domains', array() ) ), - 'mailcheck_toplevel_domains' => array_map( 'sanitize_text_field', (array) apply_filters( 'everest_forms_mailcheck_toplevel_domains', array( 'dev' ) ) ), - 'il8n_min_word_length_err_msg' => esc_html__( 'Please enter at least {0} words.', 'everest-forms' ), - 'il8n_min_character_length_err_msg' => esc_html__( 'Please enter at least {0} characters.', 'everest-forms' ), - 'plugin_url' => plugin_dir_url( EVF_PLUGIN_FILE ), - 'i18n_messages_phone' => get_option( 'everest_forms_phone_validation', __( 'Please enter a valid phone number.', 'everest-forms' ) ), - 'i18n_field_rating_greater_than_max_value_error' => esc_html__( 'Please enter in a value less than 100.', 'everest-forms' ), - ); - break; - case 'everest-forms-text-limit': - $params = array( - 'i18n_messages_limit_characters' => esc_html__( '{count} of {limit} max characters.', 'everest-forms' ), - 'i18n_messages_limit_words' => esc_html__( '{count} of {limit} max words.', 'everest-forms' ), - ); - break; - case 'everest-forms-ajax-submission': - $params = array( - 'ajax_url' => admin_url( 'admin-ajax.php' ), - 'evf_ajax_submission' => wp_create_nonce( 'everest_forms_ajax_form_submission' ), - 'submit' => esc_html__( 'Submit', 'everest-forms' ), - 'error' => esc_html__( 'Something went wrong while making an AJAX submission', 'everest-forms' ), - 'required' => esc_html__( 'This field is required.', 'everest-forms' ), - 'pdf_download' => esc_html__( 'Click here to download your pdf submission', 'everest-forms' ), - ); - break; - case 'everest-forms-survey-polls-quiz-script': - $params = array( - 'ajax_url' => admin_url( 'admin-ajax.php', 'relative' ), - 'ajax_nonce' => wp_create_nonce( 'process-ajax-nonce' ), - 'form_id' => isset( $_GET['form_id'] ) ? wp_unslash( $_GET['form_id'] ) : '', // WPCS: CSRF ok, input var ok, sanitization ok. - ); - break; - default: - $params = false; - } - - return apply_filters( 'everest_forms_get_script_data', $params, $handle ); - } - - /** - * Localize scripts only when enqueued. - */ - public static function localize_printed_scripts() { - foreach ( self::$scripts as $handle ) { - self::localize_script( $handle ); - } - } -} - -EVF_Frontend_Scripts::init(); diff --git a/assets/js/frontend/everest-forms.js b/assets/js/frontend/everest-forms.js index 1898835db..352de0ed1 100644 --- a/assets/js/frontend/everest-forms.js +++ b/assets/js/frontend/everest-forms.js @@ -35,6 +35,7 @@ jQuery( function ( $ ) { this.loadPhoneField(); this.loadCountryFlags(); this.ratingInit(); + this.FormSubmissionWaitingTime(); // Inline validation. @@ -597,6 +598,7 @@ jQuery( function ( $ ) { var recaptchaID = $submit.get( 0 ).recaptchaID; var razorpayForms = $form.find( "[data-gateway='razorpay']" ); var stripeForms = $form.find( "[data-gateway*='stripe']" ); + // Process form. if ( processText ) { $submit.text( processText ).prop( 'disabled', true ); @@ -948,6 +950,21 @@ jQuery( function ( $ ) { } return $( '
' + country.text + '' ); }, + + FormSubmissionWaitingTime: function(){ + $ (document).ready( function() { + var form_settings = everest_forms_params.form_settings['settings']; + var wait_form_submission_status = form_settings['form_submission_min_waiting_time']; + var form_submission_duration = form_settings['form_submission_min_waiting_time_input']; + + if( (wait_form_submission_status === '1') ){ + $('#evf_submission_start_time').val(Date.now()); + } else { + return ''; + } + }); + }, + ratingInit:function(){ // Rating field: hover effect. $( '.everest-forms-field-rating' ).hover( diff --git a/includes/class-evf-form-task.php b/includes/class-evf-form-task.php index e1c403799..3790766ac 100644 --- a/includes/class-evf-form-task.php +++ b/includes/class-evf-form-task.php @@ -6,10 +6,6 @@ * @since 1.0.0 */ -if ( ! session_id() ) { - session_start(); -} - defined( 'ABSPATH' ) || exit; /** @@ -99,7 +95,7 @@ public function listen_task() { $settings = $this->form_data['settings']; $success_message = isset( $settings['successful_form_submission_message'] ) ? $settings['successful_form_submission_message'] : __( 'Thanks for contacting us! We will be in touch with you shortly.', 'everest-forms' ); - // Send 400 Bad Request when there are errors. + // Send 400 Bad Request when there are errors. if ( empty( $this->errors[ $form_id ] ) ) { wp_send_json( array( @@ -655,7 +651,7 @@ public function do_task( $entry ) { $response_data = apply_filters( 'everest_forms_after_success_ajax_message', $response_data, $this->form_data, $entry ); return $response_data; } elseif ( ( 'same' === $this->form_data['settings']['redirect_to'] && empty( $submission_redirection_process ) ) || ( ! empty( $submission_redirection_process ) && 'same_page' == $submission_redirection_process['redirect_to'] ) ) { - evf_add_notice( $message, 'success' ); + evf_add_notice( $message, 'success' ); } $logger->info( 'Everest Forms After success Message.', @@ -980,7 +976,7 @@ public function entry_email( $fields, $entry, $form_data, $entry_id, $context = $emails->send( trim( $address ), $email['subject'], $email['message'], '', $connection_id ); } - endforeach; + endforeach; if ( isset( $attachment ) ) { do_action( 'everest_forms_remove_attachments_after_send_email', $attachment, $fields, $form_data, 'entry-email', $connection_id, $entry_id ); } @@ -1213,7 +1209,7 @@ public function load_previous_field_value( $properties, $field, $form_data ) { } } } elseif ( ! is_array( $data ) ) { - $properties['inputs']['primary']['attr']['value'] = esc_attr( $data ); + $properties['inputs']['primary']['attr']['value'] = esc_attr( $data ); } return $properties; } @@ -1446,32 +1442,33 @@ public function evf_set_approval_status( $entry_id, $form_data ) { * @param object $form_data An object containing settings for the form. */ public function form_submission_waiting_time( $errors, $form_data ) { - $form_submission_waiting_time_enable = isset( $form_data['settings']['form_submission_min_waiting_time'] ) ? $form_data['settings']['form_submission_min_waiting_time'] : ''; $submission_duration = $form_data['settings']['form_submission_min_waiting_time_input']; if ( '1' === $form_submission_waiting_time_enable && 0 <= absint( $submission_duration ) ) { - $atts = $form_data['id']; - $time_after_submit = time(); - - $form_id = ! empty( $form_data['id'] ) ? $form_data['id'] : 0; - $session_key = 'start_time_' . $form_id; - $time_before_submit = isset( $_SESSION[ $session_key ] ) ? esc_html( $_SESSION[ $session_key ] ) : ''; - - $form_submission_err_msg = apply_filters( - 'everest_forms_minimum_waiting_time_form_submission', - sprintf( - /* translators: %s - Minimum waiting duration */ - esc_html__( 'Please wait %s seconds, security checkup is being executed', 'everest-forms' ), - $submission_duration - ) - ); + $evf_submission_start_time = isset( $_POST['evf_submission_start_time'] ) ? sanitize_text_field( wp_unslash( $_POST['evf_submission_start_time'] ) ) : ''; //phpcs:ignore WordPress.Security.NonceVerification + $atts = $form_data['id']; + $submission_time = time() * 1000; + + $waiting_time = absint( $submission_time ) - absint( $evf_submission_start_time ); + $form_id = ! empty( $form_data['id'] ) ? $form_data['id'] : 0; + ?> + + %s %s", + esc_html__( 'Please wait', 'everest-forms' ), + $submission_duration, + esc_html__( 'seconds, security checkup is being executed.', 'everest-forms' ) + ) + ); - if ( $time_after_submit - $time_before_submit <= absint( $submission_duration ) * 100 ) { $errors[ $form_id ]['header'] = $form_submission_err_msg; } - unset( $_SESSION['start_time'] ); return $errors; } } diff --git a/includes/class-evf-frontend-scripts.php b/includes/class-evf-frontend-scripts.php index 46d7718aa..6e9308055 100644 --- a/includes/class-evf-frontend-scripts.php +++ b/includes/class-evf-frontend-scripts.php @@ -327,6 +327,7 @@ private static function get_script_data( $handle ) { 'plugin_url' => plugin_dir_url( EVF_PLUGIN_FILE ), 'i18n_messages_phone' => get_option( 'everest_forms_phone_validation', __( 'Please enter a valid phone number.', 'everest-forms' ) ), 'i18n_field_rating_greater_than_max_value_error' => esc_html__( 'Please enter in a value less than 100.', 'everest-forms' ), + 'form_settings' => isset( $_GET['form_id'] ) ? evf()->form->get( absint( $_GET['form_id'] ), array( 'content_only' => true ) ) : 0, ); break; case 'everest-forms-text-limit': diff --git a/includes/shortcodes/class-evf-shortcode-form.php b/includes/shortcodes/class-evf-shortcode-form.php index 91a2b90cd..a47e89d3d 100644 --- a/includes/shortcodes/class-evf-shortcode-form.php +++ b/includes/shortcodes/class-evf-shortcode-form.php @@ -8,9 +8,6 @@ * @version 1.0.0 * @since 1.3.2 */ -if ( ! session_id() ) { - session_start(); -} defined( 'ABSPATH' ) || exit; @@ -54,6 +51,9 @@ public static function hooks() { // reCaptcha Language. add_filter( 'everest_forms_frontend_recaptcha_url', array( __CLASS__, 'evf_recaptcha_language' ), 10, 1 ); + + // Enable for submission waiting time. + add_filter( 'everest_forms_display_fields_before', array( 'EVF_Shortcode_Form', 'evf_form_submission_waiting_time' ) ); } /** @@ -852,12 +852,6 @@ public static function output( $atts ) { self::add_custom_css_js( $atts['id'] ); - if ( ! isset( $_SESSION ) && ! empty( $atts ) ) { - - $session_key = 'start_time_' . $atts['id']; - $_SESSION[ $session_key ] = time(); - } - $atts = shortcode_atts( array( 'id' => false, @@ -1252,4 +1246,22 @@ function () use ( $custom_css, $form_id ) { } } } + + /** + * Function to enable the minimum form submission waiting time. + * + * @since 3.0.2 + * + * @param array $form_data Form Data. + */ + public static function evf_form_submission_waiting_time( $form_data ) { + $form_submission_waiting_time_enable = isset( $form_data['settings']['form_submission_min_waiting_time'] ) ? $form_data['settings']['form_submission_min_waiting_time'] : ''; + $submission_duration = isset( $form_data['settings']['form_submission_min_waiting_time_input'] ) ? $form_data['settings']['form_submission_min_waiting_time_input'] : ''; + + if ( '1' === $form_submission_waiting_time_enable ) { + echo ""; + } else { + return ''; + } + } } From ea98632a58fbce35a8830aaf1a1df3249b058b68 Mon Sep 17 00:00:00 2001 From: Deependra Chaudhary Date: Thu, 11 Jul 2024 12:27:33 +0545 Subject: [PATCH 13/14] Updated --- assets/js/frontend/everest-forms.js | 16 ++++++++++++++-- includes/class-evf-form-task.php | 21 ++++++++++++++++----- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/assets/js/frontend/everest-forms.js b/assets/js/frontend/everest-forms.js index 352de0ed1..4bca55495 100644 --- a/assets/js/frontend/everest-forms.js +++ b/assets/js/frontend/everest-forms.js @@ -37,7 +37,6 @@ jQuery( function ( $ ) { this.ratingInit(); this.FormSubmissionWaitingTime(); - // Inline validation. this.$everest_form.on( 'input validate change', '.input-text, select, input:checkbox, input:radio', this.validate_field ); @@ -48,6 +47,8 @@ jQuery( function ( $ ) { $(this).removeClass('everest-forms-field-active'); }); + ; + $( document.body ).trigger( 'everest_forms_loaded' ); @@ -955,10 +956,21 @@ jQuery( function ( $ ) { $ (document).ready( function() { var form_settings = everest_forms_params.form_settings['settings']; var wait_form_submission_status = form_settings['form_submission_min_waiting_time']; - var form_submission_duration = form_settings['form_submission_min_waiting_time_input']; if( (wait_form_submission_status === '1') ){ $('#evf_submission_start_time').val(Date.now()); + var display = $('#evf_submission_duration'); + if (display.length) { + var duration = parseInt(display.data('duration'), 10); + var timer = duration; + var interval = setInterval(function() { + display.text(timer); + if (--timer < 0) { + clearInterval(interval); + $('#evf_submission_duration').parent().remove(); + } + }, 1000); + } } else { return ''; } diff --git a/includes/class-evf-form-task.php b/includes/class-evf-form-task.php index 3790766ac..b8d696b73 100644 --- a/includes/class-evf-form-task.php +++ b/includes/class-evf-form-task.php @@ -65,8 +65,6 @@ public function __construct() { add_action( 'everest_forms_complete_entry_save', array( $this, 'evf_set_approval_status' ), 10, 2 ); add_action( 'admin_init', array( $this, 'evf_admin_approve_entry' ), 10, 2 ); add_action( 'admin_init', array( $this, 'evf_admin_deny_entry' ) ); - // Form Submission Waiting Time. - add_filter( 'everest_forms_process_initial_errors', array( $this, 'form_submission_waiting_time' ), 10, 2 ); } /** @@ -359,6 +357,18 @@ public function do_task( $entry ) { } // Initial error check. $errors = apply_filters( 'everest_forms_process_initial_errors', $this->errors, $this->form_data ); + + // Minimum time to submit check. + $min_submit_time = $this->form_submission_waiting_time( $this->errors, $this->form_data ); + if ( isset( $min_submit_time[ $form_id ]['header'] ) && ! empty( $min_submit_time ) ) { + $this->errors[ $form_id ]['header'] = $min_submit_time[ $form_id ]['header']; + $logger->error( + $min_submit_time[ $form_id ]['header'], + array( 'source' => 'Minimum time to submit' ) + ); + return $this->errors; + } + if ( isset( $_POST['__amp_form_verify'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing if ( empty( $errors[ $form_id ] ) ) { wp_send_json( array(), 200 ); @@ -1452,16 +1462,15 @@ public function form_submission_waiting_time( $errors, $form_data ) { $waiting_time = absint( $submission_time ) - absint( $evf_submission_start_time ); $form_id = ! empty( $form_data['id'] ) ? $form_data['id'] : 0; - ?> - %s %s", + "%s %s %s", esc_html__( 'Please wait', 'everest-forms' ), $submission_duration, + $submission_duration, esc_html__( 'seconds, security checkup is being executed.', 'everest-forms' ) ) ); @@ -1472,4 +1481,6 @@ public function form_submission_waiting_time( $errors, $form_data ) { return $errors; } } + + } From eee3b7924511c0f7640fbc878db13888207a9fb5 Mon Sep 17 00:00:00 2001 From: riteelama Date: Thu, 11 Jul 2024 14:03:53 +0545 Subject: [PATCH 14/14] Fix - the counter on both ajax and non-ajax submission using mutation observer --- assets/js/frontend/everest-forms.js | 46 ++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/assets/js/frontend/everest-forms.js b/assets/js/frontend/everest-forms.js index 4bca55495..720c9aeb4 100644 --- a/assets/js/frontend/everest-forms.js +++ b/assets/js/frontend/everest-forms.js @@ -953,24 +953,42 @@ jQuery( function ( $ ) { }, FormSubmissionWaitingTime: function(){ - $ (document).ready( function() { + $(document).ready(function() { var form_settings = everest_forms_params.form_settings['settings']; var wait_form_submission_status = form_settings['form_submission_min_waiting_time']; - if( (wait_form_submission_status === '1') ){ + if (wait_form_submission_status === '1') { $('#evf_submission_start_time').val(Date.now()); - var display = $('#evf_submission_duration'); - if (display.length) { - var duration = parseInt(display.data('duration'), 10); - var timer = duration; - var interval = setInterval(function() { - display.text(timer); - if (--timer < 0) { - clearInterval(interval); - $('#evf_submission_duration').parent().remove(); - } - }, 1000); - } + + // Create a MutationObserver to observe changes in the DOM. + var observer = new MutationObserver(function(mutations) { + mutations.forEach(function(mutation) { + if (mutation.addedNodes.length > 0) { + $(mutation.addedNodes).each(function() { + var display = $('#evf_submission_duration'); + if (display.length) { + var duration = parseInt(display.data('duration'), 10); + var timer = duration; + var interval = setInterval(function() { + display.text(timer); + if (--timer < 0) { + clearInterval(interval); + $('#evf_submission_duration').parent().remove(); + } + }, 1000); + + // Once the element is found, disconnect the observer. + observer.disconnect(); + } + }); + } + }); + }); + + // Start observing the target node for configured mutations. + var targetNode = document.body; + var config = { childList: true, subtree: true }; + observer.observe(targetNode, config); } else { return ''; }