Last active
May 1, 2024 10:36
-
-
Save saifsultanc/51b235795645d5fb48771d62606251be to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class GW_Disable_Submit { | |
public static $script_output = false; | |
public function __construct( $form_id ) { | |
add_action( "gform_pre_render", array( $this, 'maybe_output_script' ) ); | |
add_action( "gform_register_init_scripts", array( $this, 'add_init_script' ) ); | |
} | |
public function maybe_output_script( $form ) { | |
if ( ! self::$script_output ) { | |
$this->script(); | |
self::$script_output = true; | |
} | |
return $form; | |
} | |
public function script() { | |
?> | |
<script type="text/javascript"> | |
var GWDisableSubmit; | |
(function($){ | |
GWDisableSubmit = function( args ) { | |
var self = this; | |
// copy all args to current object: formId, fieldId | |
for( prop in args ) { | |
if( args.hasOwnProperty( prop ) ) | |
self[prop] = args[prop]; | |
} | |
self.init = function() { | |
$( args.inputHtmlIds.join( ', ' ) ).change( function() { | |
self.runCheck(); | |
} ); | |
self.runCheck(); | |
} | |
self.runCheck = function() { | |
var submitButton = $( '.single_add_to_cart_button' ); | |
if( self.areRequiredPopulated() ) { | |
submitButton.attr( 'disabled', false ).removeClass( 'gwds-disabled' ); | |
} else { | |
submitButton.attr( 'disabled', true ).addClass( 'gwds-disabled' ); | |
} | |
} | |
self.areRequiredPopulated = function() { | |
var inputs = $( args.inputHtmlIds.join( ', ' ) ), | |
inputCount = inputs.length, | |
fullCount = 0; | |
$( inputs ).each( function() { | |
var input = $( this ), | |
fieldId = input.attr( 'id' ).split( '_' )[2]; | |
// don't count fields hidden via conditional logic towards the inputCount | |
if( window['gf_check_field_rule'] && gf_check_field_rule( self.formId, fieldId, null, null ) == 'hide' ) { | |
inputCount -= 1; | |
return; | |
} | |
if( $.trim( $( this ).val() ) ) { | |
fullCount += 1; | |
} else if ( $( this ).find( 'input:checked' ).length ) { | |
fullCount += 1; | |
} | |
} ); | |
return fullCount == inputCount; | |
} | |
self.init(); | |
} | |
})(jQuery); | |
</script> | |
<?php | |
} | |
public function add_init_script( $form ) { | |
$args = array( | |
'formId' => $form['id'], | |
'inputHtmlIds' => $this->get_required_input_html_ids( $form ), | |
); | |
$script = '; new GWDisableSubmit( ' . json_encode( $args ) . ' );'; | |
$slug = "gw_disable_submit_{$form['id']}"; | |
GFFormDisplay::add_init_script( $form['id'], $slug, GFFormDisplay::ON_PAGE_RENDER, $script ); | |
} | |
public function get_required_input_html_ids( $form ) { | |
$html_ids = array(); | |
foreach ( $form['fields'] as &$field ) { | |
if ( ! $field['isRequired'] ) { | |
continue; | |
} | |
$input_ids = array(); | |
switch ( GFFormsModel::get_input_type( $field ) ) { | |
case 'address': | |
$input_ids = array( 1, 3, 4, 5, 6 ); | |
break; | |
case 'name': | |
$input_ids = array( 1, 2, 3, 4, 5, 6 ); | |
break; | |
default: | |
$html_ids[] = "#input_{$form['id']}_{$field['id']}"; | |
break; | |
} | |
if ( ! $input_ids ) { | |
continue; | |
} | |
foreach ( $input_ids as $input_id ) { | |
$html_ids[] = "#input_{$form['id']}_{$field['id']}_{$input_id}"; | |
} | |
} | |
return $html_ids; | |
} | |
} | |
# Configuration | |
// Update 228 to your form id | |
new GW_Disable_Submit( 228 ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment