-
-
Save spivurno/a14ef4a18f57d0c67811e1b4d8791781 to your computer and use it in GitHub Desktop.
| <?php | |
| /** | |
| * -------------------------------------------------------------------------- | |
| * IMPORTANT! | |
| * This snippet has been superceded by the Choice Counter snippet. | |
| * https://gist.github.com/spivurno/00af5ee7e21dd5d6903fbae6fecd85ce | |
| * -------------------------------------------------------------------------- | |
| * | |
| * Gravity Wiz // Gravity Forms // Checkbox Count | |
| * | |
| * Get the total number of checkboxes checked. Useful when wanting to apply conditional logic based on the number of | |
| * checkboxes checked. | |
| * | |
| * @version 2.5 | |
| * @author David Smith <[email protected]> | |
| * @license GPL-2.0+ | |
| * @link http://gravitywiz.com/... | |
| * @copyright 2018 Gravity Wiz | |
| */ | |
| class GW_Checkbox_Count { | |
| private static $is_script_output; | |
| function __construct( $args ) { | |
| $this->_args = wp_parse_args( $args, array( | |
| 'form_id' => false, | |
| 'count_field_id' => false, | |
| 'checkbox_field_id' => null, | |
| 'checkbox_field_ids' => false | |
| ) ); | |
| if( isset( $this->_args['checkbox_field_id'] ) ) { | |
| $this->_args['checkbox_field_ids'] = array( $this->_args['checkbox_field_id'] ); | |
| } | |
| add_filter( 'gform_pre_render', array( $this, 'load_form_script' ), 10, 2 ); | |
| add_action( 'gform_register_init_scripts', array( $this, 'add_init_script' ) ); | |
| //add_action( 'gform_pre_validation', array( $this, 'override_submitted_value') ); | |
| } | |
| public function load_form_script( $form, $is_ajax_enabled ) { | |
| if( $this->is_applicable_form( $form ) && ! has_action( 'wp_footer', array( $this, 'output_script' ) ) ) { | |
| add_action( 'wp_footer', array( $this, 'output_script' ) ); | |
| add_action( 'gform_preview_footer', array( $this, 'output_script' ) ); | |
| } | |
| return $form; | |
| } | |
| function output_script() { | |
| ?> | |
| <script type="text/javascript"> | |
| ( function( $ ) { | |
| window.GWCheckboxCount = 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() { | |
| for( var i = 0; i < self.checkboxFieldIds.length; i++ ) { | |
| var checkboxFieldId = self.checkboxFieldIds[ i ], | |
| checkboxField = $( '#input_' + self.formId + '_' + checkboxFieldId ); | |
| checkboxField.find( 'input[type="checkbox"]' ).click( function() { | |
| self.updateCheckboxCount( self.formId, self.checkboxFieldIds, self.countFieldId ); | |
| } ); | |
| } | |
| self.updateCheckboxCount( self.formId, self.checkboxFieldIds, self.countFieldId ); | |
| }; | |
| self.updateCheckboxCount = function( formId, checkboxFieldIds, countFieldId ) { | |
| var countField = $( '#input_' + formId + '_' + countFieldId ), | |
| count = 0; | |
| for( var i = 0; i < checkboxFieldIds.length; i++ ) { | |
| var checkboxField = $( '#input_' + formId + '_' + checkboxFieldIds[ i ] ); | |
| count += checkboxField.find( 'input[type="checkbox"]' ).filter(':checked').not(' #choice_' + checkboxFieldIds[ i ] + '_select_all').length; | |
| } | |
| if( parseInt( countField.val() ) != parseInt( count ) ) { | |
| countField.val( count ).change(); | |
| } | |
| }; | |
| self.init(); | |
| } | |
| } )( jQuery ); | |
| </script> | |
| <?php | |
| self::$is_script_output = true; | |
| } | |
| function add_init_script( $form ) { | |
| if( ! $this->is_applicable_form( $form['id'] ) ) | |
| return; | |
| $args = array( | |
| 'formId' => $this->_args['form_id'], | |
| 'countFieldId' => $this->_args['count_field_id'], | |
| 'checkboxFieldIds' => $this->_args['checkbox_field_ids'] | |
| ); | |
| $script = 'new GWCheckboxCount( ' . json_encode( $args ) . ' );'; | |
| $slug = implode( '_', array( 'gw_checkbox_count', $this->_args['form_id'], $this->_args['count_field_id'] ) ); | |
| GFFormDisplay::add_init_script( $this->_args['form_id'], $slug, GFFormDisplay::ON_PAGE_RENDER, $script ); | |
| return; | |
| } | |
| function override_submitted_value( $form ) { | |
| //$_POST["input_{$this->count_field_id}"] = $day_count; | |
| return $form; | |
| } | |
| public function is_applicable_form( $form ) { | |
| $form_id = isset( $form['id'] ) ? $form['id'] : $form; | |
| return empty( $this->_args['form_id'] ) || $form_id == $this->_args['form_id']; | |
| } | |
| public function is_ajax_submission( $form_id, $is_ajax_enabled ) { | |
| return isset( GFFormDisplay::$submission[ $form_id ] ) && $is_ajax_enabled; | |
| } | |
| } | |
| # Configuration | |
| new GW_Checkbox_Count( array( | |
| 'form_id' => 123, // the ID of your form | |
| 'count_field_id' => 2, // any Number field on your form in which the number of checked checkboxes should be dynamically populated; you can configure conditional logic based on the value of this field. | |
| 'checkbox_field_ids' => array( 5, 8 ) // any array of Checkbox field IDs which should be counted | |
| ) ); |
Hi, thanks so much for this useful code, how can this be adapted to count the number of selections made in a gravity form multi-select?
@mrhat7865 You'd need to update line 90 to target options instead of inputs and then if they're selected rather than checked.
We'd be happy to assist with this if you're a Pro Gravity Perks license-holder: http://gravitywiz.com/
How do you use it? I'm not sure.
I think I'm following all the steps but I don't know how to report the value
Thank you
@lavelldesign Make sure you're setting the count_field_id to a field on your form. If you need more assistance, we do offer support for our snippets to our Gravity Perks customers (Pro and Advanced).
@spivurno. FANTASTIC!!!!!!!!
Amazing thank you so much for sharing this
Our pleasure, @Amir-Tayabali!
@drmzeeshan Just update this bit to target any element on the page. jQuery is not limited to Gravity Forms. It can access any element. 🙂