/* global everest_forms_ajax_submission_params */ jQuery( function( $ ) { 'use strict'; var evf_ajax_submission_init = function(){ var form = $( 'form[data-ajax_submission="1"]' ); form.each( function( i, v ) { $( document ).ready( function() { var formTuple = $( v ), btn = formTuple.find( '.evf-submit' ), razorpayForms = formTuple.find( "[data-gateway='razorpay']" ); btn.on( 'click', async function( e ) { var paymentMethod = formTuple.find( ".everest-forms-stripe-gateways-tabs .evf-tab" ).has( 'a.active' ).data( 'gateway' ); if(undefined === paymentMethod) { paymentMethod = formTuple.find( ".everest-forms-gateway[data-gateway='stripe']" ).data( 'gateway' ); } if (formTuple.find( ".everest-forms-gateway[data-gateway='stripe']").hasClass('StripeElement--empty') && $(".evf-field-credit-card ").is(':visible') ){ $(document).ready(function() { $('#card-errors').html('This field is required').show(); $('.evf-submit').text('Submit'); $('.evf-submit').attr('disabled', false); }); formTuple.trigger( 'focusout' ).trigger( 'change' ).trigger( 'submit' ); return false; } //For square payment credit card validation. var squareMsgContainer = formTuple.find(".everest-forms-gateway[data-gateway='square']").find('.sq-card-message-error'); if ( squareMsgContainer.length > 0 ) { var squareErrorMsg = squareMsgContainer.text(); $( document ).ready( function() { $( '#card-errors' ).html( squareErrorMsg ).show(); $( '.evf-submit' ).text( 'Submit' ); $( '.evf-submit' ).attr( 'disabled', false); }); formTuple.trigger( 'focusout' ).trigger( 'change' ).trigger( 'submit' ); return false; } if ( typeof tinyMCE !== 'undefined' ) { tinyMCE.triggerSave(); } var recaptchaID = btn.get( 0 ).recaptchaID; if ( recaptchaID === 0 ) { grecaptcha.execute( recaptchaID ); return false; } var data = formTuple.serializeArray(); e.preventDefault(); // We let the bubbling events in form play itself out. formTuple.trigger( 'focusout' ).trigger( 'change' ).trigger( 'submit' ); var errors = formTuple.find( '.evf-error:visible' ); if( $(".everest-forms-authorize_net[data-gateway='authorize-net']").length ) { const cardData = window.EverestFormsAuthorizeNet.getCardData(formTuple); if( ! Object.values(cardData).some(value => !value ) ) { // Define the Promise. const authorizeNetAjaxSubmitHandlerPromise = new Promise(function (resolve, reject) { window.EverestFormsAuthorizeNet.authorizeNetAjaxSubmitHandler(v).then(resolve).catch(reject); }); try { const response = await authorizeNetAjaxSubmitHandlerPromise; if( "Ok" === response.messages.resultCode ) { data.push( { name: 'everest_forms[authorize_net][opaque_data][descriptor]', value: response.opaqueData.dataDescriptor }, { name: 'everest_forms[authorize_net][opaque_data][value]', value: response.opaqueData.dataValue } ); } } catch (error) { return; } } if (errors.length < 1) { errors = formTuple.parents('div.everest-forms').find('.everest-forms-notice.everest-forms-notice--error .evf-error'); } } if ( errors.length > 0 ) { $( [document.documentElement, document.body] ).animate({ scrollTop: errors.last().offset().top }, 800 ); return; } // Change the text to user defined property. $( this ).html( formTuple.data( 'process-text' ) ); // Add action intend for ajax_form_submission endpoint. data.push({ name: 'action', value: 'everest_forms_ajax_form_submission' }); data.push({ name: 'security', value: everest_forms_ajax_submission_params.evf_ajax_submission }); // Fire the ajax request. $.ajax({ url: everest_forms_ajax_submission_params.ajax_url, type: 'POST', data: data }) .done( function ( xhr, textStatus, errorThrown ) { var redirect_url = ( xhr.data && xhr.data.redirect_url ) ? xhr.data.redirect_url : ''; if ( redirect_url && 'stripe' !== formTuple.find( ".everest-forms-gateway[data-gateway='stripe']" ).data( 'gateway' ) && 'square' !== formTuple.find( ".everest-forms-gateway[data-gateway='square']" ).data( 'gateway' )) { formTuple.trigger( 'reset' ); window.location = redirect_url; return; } if (xhr && xhr.payment_method && xhr.payment_method === 'paypal' && xhr.redirect) { if ('paypal' === xhr.payment_method) { window.location.href = xhr.redirect; return; } } if ( 'success' === xhr.data.response || true === xhr.success ) { let pdf_download_message = ''; let quiz_reporting = ''; let preview_confirmation = ''; if(xhr.data.form_id !== undefined && xhr.data.entry_id !== undefined && xhr.data.pdf_download == true){ pdf_download_message = '<br><small><a href="/?page=evf-entries-pdf&form_id='+ xhr.data.form_id+'&entry_id='+xhr.data.entry_id+'">' + xhr.data.pdf_download_message + '</a></small>'; } if( xhr.data.quiz_result_shown == true){ quiz_reporting = xhr.data.quiz_reporting; } if( xhr.data.is_preview_confirmation == '1'){ preview_confirmation = xhr.data.preview_confirmation; } var paymentMethod = formTuple.find( ".everest-forms-stripe-gateways-tabs .evf-tab" ).has( 'a.active' ).data( 'gateway' ); if(undefined === paymentMethod) { paymentMethod = formTuple.find( ".everest-forms-gateway[data-gateway='ideal']" ).data( 'gateway' ); if ('ideal' === paymentMethod ){ paymentMethod = 'ideal'; }else{ paymentMethod = formTuple.find( ".everest-forms-gateway[data-gateway='stripe']" ).data( 'gateway' ); } } if( 'stripe' === paymentMethod && 'none' !== formTuple.find( ".everest-forms-gateway[data-gateway='stripe']" ).closest( '.evf-field' ).css( 'display' ) ) { formTuple.trigger( 'everest_forms_frontend_before_ajax_complete_success_message', xhr.data ); return; } if(undefined === paymentMethod) { paymentMethod = formTuple.find( ".everest-forms-gateway[data-gateway='ideal']" ).data( 'gateway' ); } if( 'ideal' === paymentMethod && 'none' !== formTuple.find( ".everest-forms-gateway[data-gateway='ideal']" ).closest( '.evf-field' ).css( 'display' ) ) { formTuple.trigger( 'evf_process_payment', xhr.data ); return; } if( 'square' === formTuple.find( ".everest-forms-gateway[data-gateway='square']" ).data('gateway') ){ console.log('square'); formTuple.trigger( 'everest_forms_frontend_payment_before_success_message', xhr.data ); return; } formTuple.trigger( 'reset' ); formTuple.closest( '.everest-forms' ).html( '<div class="everest-forms-notice everest-forms-notice--success" role="alert">' + xhr.data.message + pdf_download_message + '</div>' + quiz_reporting + preview_confirmation ).focus(); localStorage.removeItem(formTuple.attr('id')); // Trigger for form submission success. var event = new CustomEvent("everest_forms_ajax_submission_success", { detail: { formId: 'evf-form-' + xhr.data.form_id, } }); document.dispatchEvent(event); } else { var form_id = formTuple.data( 'formid' ); var err = JSON.parse( errorThrown.responseText ); if( 'undefined' !== typeof err.data[form_id] ) { var error = err.data[form_id].header; } else{ var error = everest_forms_ajax_submission_params.error; } var fields = err.data.error; if ( 'string' === typeof err.data.message ) { error = err.data.message; } formTuple.closest( '.everest-forms' ).find( '.everest-forms-notice' ).remove(); formTuple.closest( '.everest-forms' ).prepend( '<div class="everest-forms-notice everest-forms-notice--error" role="alert">'+ error +'</div>' ).focus(); // Begin fixing the tamper. $( fields ).each( function( index, fieldTuple ) { var err_msg = Object.values(fieldTuple)[0], fld_id = Object.keys(fieldTuple)[0], err_field, fid, lbl = true; var fld_container_id = 'evf'-+ form_id +'-field_' + fld_id +'-container'; if($('#'+fld_container_id).hasClass('evf-field-signature')) { //When field type is signature fid = 'evf-signature-img-input-' + fld_id; err_field = $( '#' + fid ); } else if ($('#'+fld_container_id).hasClass('evf-field-likert')) { //When field type is likert fid = 'everest_forms-' + form_id + '-field_' + fld_id + '_'; err_field = $( '[id^="' + fid + '"]' ); lbl = false; err_field.each( function( index, element ) { var tbl_header = $( element ).closest( 'tr.evf-' + form_id +'-field_' + fld_id ).find( 'th' ), id = 'everest_forms[form_fields][' + fld_id + '][' + ( parseInt( tbl_header.closest( 'tr' ).index() ) + 1 ) + ']'; if ( ! tbl_header.children().is( 'label' ) ) { if( tbl_header.parents( 'span.input-wrapper' ).length ) { tbl_header.parents( 'span.input-wrapper' ).append( '<label id="' + id + '" for="' + id + '" class="evf-error">' + everest_forms_ajax_submission_params.required + '</label>' ); } else { tbl_header.append( '<label id="' + id + '" for="' + id + '" class="evf-error">' + everest_forms_ajax_submission_params.required + '</label>' ); } } else { tbl_header.children().find( '#' + id ).show(); } }); } else if ($('#'+fld_container_id).hasClass('evf-field-address')) { //When field type is address fid = 'evf-' + form_id + '-field_' + fld_id; err_field = $( '[id^="' + fid + '"]' ); err_field.each( function ( index, element ) { var fieldId = String( $( element ).attr( 'id' ) ); if ( fieldId.includes( '-container' ) || fieldId.includes( '-address2' ) ) { err_field.splice( index, 1 ); } else { if ( 'undefined' !== typeof $( element ).val() ) { err_field.splice( index, 1 ); }; } }); } else { fid = 'evf-' + form_id + '-field_' + fld_id; err_field = $( '#' + fid ); } err_field.addClass( 'evf-error' ); err_field.attr( 'aria-invalid', true ); err_field.first().closest( '.evf-field' ).addClass( 'everest-forms-invalid evf-has-error' ); if ( true === lbl && ! err_field.is( 'label' ) ) { if( err_field.parents( 'span.input-wrapper' ).length ){ err_field.parents( 'span.input-wrapper' ).after( '<label id="' + err_field.attr( 'id' ) + '-error" class="evf-error" for="' + err_field.attr( 'id' ) + '">' + err_msg + '</label>' ).show(); } else { err_field.after( '<label id="' + err_field.attr( 'id' ) + '-error" class="evf-error" for="' + err_field.attr( 'id' ) + '">' + err_msg + '</label>' ).show(); } } }); btn.attr( 'disabled', false ).html( everest_forms_ajax_submission_params.submit ); } }) .fail( function () { btn.attr( 'disabled', false ).html( everest_forms_ajax_submission_params.submit ); formTuple.trigger( 'focusout' ).trigger( 'change' ); formTuple.closest( '.everest-forms' ).find( '.everest-forms-notice' ).remove(); formTuple.closest( '.everest-forms' ).prepend( '<div class="everest-forms-notice everest-forms-notice--error" role="alert">'+ everest_forms_ajax_submission_params.error +'</div>' ).focus(); }) .always( function( xhr ) { var redirect_url = ( xhr.data && xhr.data.redirect_url ) ? xhr.data.redirect_url : ''; if ( ! redirect_url && $( '.everest-forms-notice' ).length && xhr.data.submission_message_scroll === "1" ) { $( [document.documentElement, document.body] ).animate({ scrollTop: $( '.everest-forms-notice' ).offset().top }, 800 ); } }); }); }); }); }; evf_ajax_submission_init(); });