Forked from spivurno/gw-gravity-forms-map-fields-to-field.php
Created
April 22, 2021 13:09
-
-
Save sparkbold/2cf612081d96d162ad1e3b7adc78bd75 to your computer and use it in GitHub Desktop.
Gravity Wiz // Gravity Forms // Map Submitted Field Values to Another Field
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 Forms // Map Submitted Field Values to Another Field | |
* | |
* Usage | |
* | |
* 1 - Enable "Allow field to be populated dynamically" option on field which should be populated. | |
* 2 - In the "Parameter Name" input, enter the merge tag (or merge tags) of the field whose value whould be populated into this field. | |
* | |
* Basic Fields | |
* | |
* To map a single input field (and most other non-multi-choice fields) enter: {Field Label:1}. It is useful to note that | |
* you do not actually need the field label portion of any merge tag. {:1} would work as well. Change the "1" to the ID of your field. | |
* | |
* Multi-input Fields (i.e. Name, Address, etc) | |
* | |
* To map the first and last name of a Name field to a single field, follow the steps above and enter {First Name:1.3} {Last Name:1.6}. | |
* In this example it is assumed that the name field ID is "1". The input IDs for the first and last name of this field will always be "3" and "6". | |
* | |
* # Uses | |
* | |
* - use merge tags as post tags | |
* - aggregate list of checked checkboxes | |
* - map multiple conditional fields to a single field so you can refer to the single field for the selected value | |
* | |
* @version 1.1 | |
* @author David Smith <david@gravitywiz.com> | |
* @license GPL-2.0+ | |
* @link http://gravitywiz.com/... | |
* @copyright 2014 Gravity Wiz | |
*/ | |
class GWMapFieldToField { | |
public $lead = null; | |
function __construct( ) { | |
add_filter( 'gform_pre_validation', array( $this, 'map_field_to_field' ), 11 ); | |
} | |
function map_field_to_field( $form ) { | |
foreach( $form['fields'] as $field ) { | |
if( is_array( $field['inputs'] ) ) { | |
$inputs = $field['inputs']; | |
} else { | |
$inputs = array( | |
array( | |
'id' => $field['id'], | |
'name' => $field['inputName'] | |
) | |
); | |
} | |
foreach( $inputs as $input ) { | |
$value = rgar( $input, 'name' ); | |
if( ! $value ) | |
continue; | |
$post_key = 'input_' . str_replace( '.', '_', $input['id'] ); | |
$current_value = rgpost( $post_key ); | |
preg_match_all( '/{[^{]*?:(\d+(\.\d+)?)(:(.*?))?}/mi', $input['name'], $matches, PREG_SET_ORDER ); | |
// if there is no merge tag in inputName - OR - if there is already a value populated for this field, don't overwrite | |
if( empty( $matches ) ) | |
continue; | |
$entry = $this->get_lead( $form ); | |
foreach( $matches as $match ) { | |
list( $tag, $field_id, $input_id, $filters, $filter ) = array_pad( $match, 5, 0 ); | |
$force = $filter === 'force'; | |
$tag_field = RGFormsModel::get_field( $form, $field_id ); | |
// only process replacement if there is no value OR if force filter is provided | |
$process_replacement = ! $current_value || $force; | |
if( $process_replacement && ! RGFormsModel::is_field_hidden( $form, $tag_field, array() ) ) { | |
$field_value = GFCommon::replace_variables( $tag, $form, $entry ); | |
if( is_array( $field_value ) ) { | |
$field_value = implode( ',', array_filter( $field_value ) ); | |
} | |
} else { | |
$field_value = ''; | |
} | |
$value = trim( str_replace( $match[0], $field_value, $value ) ); | |
} | |
if( $value ) { | |
$_POST[$post_key] = $value; | |
} | |
} | |
} | |
return $form; | |
} | |
function get_lead( $form ) { | |
if( ! $this->lead ) | |
$this->lead = GFFormsModel::create_lead( $form ); | |
return $this->lead; | |
} | |
} | |
new GWMapFieldToField(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment