Forked from spivurno/gp-nested-forms-sum-nested-form-fields.php
Last active
March 30, 2018 13:10
-
-
Save richardW8k/a99f8cae66e8e6ef9bf3dbbb91eef0c9 to your computer and use it in GitHub Desktop.
Gravity Wiz // Gravity Perks // Get Sum of Nested Form Field Column
This file contains 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 | |
/** | |
* Gravity Wiz // Gravity Perks // Get Sum of Nested Form Fields | |
* | |
* Get the sum of a column from a Gravity Forms List field. | |
* | |
* @version 1.2 | |
* @author David Smith <[email protected]> | |
* @license GPL-2.0+ | |
* @link http://gravitywiz.com/... | |
* @copyright 2014 Gravity Wiz | |
*/ | |
class GPNF_Field_Sum { | |
private static $script_output = false; | |
public function __construct( $args = array() ) { | |
// make sure we're running the required minimum version of Gravity Forms | |
if( ! property_exists( 'GFCommon', 'version' ) || ! version_compare( GFCommon::$version, '1.8', '>=' ) ) | |
return; | |
// set our default arguments, parse against the provided arguments, and store for use throughout the class | |
$this->_args = wp_parse_args( $args, array( | |
'form_id' => false, | |
'nested_form_field_id' => false, | |
'nested_field_id' => false, | |
'target_field_id' => false | |
) ); | |
extract( $this->_args ); | |
// time for hooks | |
add_action( "gform_register_init_scripts_{$form_id}", array( $this, 'register_init_script' ) ); | |
add_action( "gform_pre_render_{$form_id}", array( $this, 'maybe_output_script' ) ); | |
} | |
public function register_init_script( $form ) { | |
$field = GFFormsModel::get_field( $form, $this->_args['nested_form_field_id'] ); | |
if ( ! is_object( $field ) ) { | |
return; | |
} | |
$args = array( | |
'formId' => $this->_args['form_id'], | |
'nestedFormFieldId' => $this->_args['nested_form_field_id'], | |
'nestedFieldId' => $this->_args['nested_field_id'], | |
'targetFieldId' => $this->_args['target_field_id'] | |
); | |
$script = 'new GPNFFieldSum( ' . json_encode( $args ) . ' );'; | |
$slug = "gpnf_column_sum_{$this->_args['form_id']}_{$this->_args['target_field_id']}"; | |
GFFormDisplay::add_init_script( $form['id'], $slug, GFFormDisplay::ON_PAGE_RENDER, $script ); | |
} | |
public function maybe_output_script( $form ) { | |
if( ! self::$script_output ) { | |
$field = GFFormsModel::get_field( $form, $this->_args['nested_form_field_id'] ); | |
if ( is_object( $field ) ) { | |
$this->script(); | |
self::$script_output = true; | |
} | |
} | |
return $form; | |
} | |
public function script() { | |
?> | |
<script type="text/javascript"> | |
var GPNFFieldSum; | |
( function( $ ){ | |
GPNFFieldSum = 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() { | |
var gpnf = $( '#gform_wrapper_' + self.formId ).data( 'GPNestedForms_' + self.nestedFormFieldId ); | |
gpnf.viewModel.entries.subscribe( function( newValue ) { | |
console.log( newValue ); | |
self.updateSum( newValue, self.nestedFieldId, self.targetFieldId, self.formId ) | |
} ); | |
self.updateSum( gpnf.viewModel.entries(), self.nestedFieldId, self.targetFieldId, self.formId ); | |
} | |
self.calculateSum = function( entries, fieldId ) { | |
var total = 0; | |
for( var i = 0; i < entries.length; i++ ) { | |
var count = gformToNumber( entries[i][fieldId] ? entries[i][fieldId] : 0 ); | |
console.log( 'count', count, entries[i][fieldId] ); | |
if( ! isNaN( parseFloat( count ) ) ) | |
total += parseFloat( count ); | |
} | |
return total; | |
} | |
self.updateSum = function( entries, nestedFieldId, targetFieldId, formId ) { | |
var total = self.calculateSum( entries, nestedFieldId ); | |
$( '#input_' + formId + '_' + targetFieldId ).val( total ).change(); | |
} | |
self.init(); | |
} | |
} )( jQuery ); | |
</script> | |
<?php | |
} | |
} | |
# Configuration | |
new GPNF_Field_Sum( array( | |
'form_id' => 469, | |
'nested_form_field_id' => 2, | |
'nested_field_id' => 5, | |
'target_field_id' => 7 | |
) ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment