spivurno
2/19/2015 - 2:18 AM

Gravity Perks // GP Unique ID // Populate Unique ID on Pre Submission (rather than Post Entry Creation)

Gravity Perks // GP Unique ID // Populate Unique ID on Pre Submission (rather than Post Entry Creation)

<?php
/**
 * Gravity Perks // GP Unique ID // Populate Unique ID on Pre Submission (rather than Post Entry Creation)
 *
 * This method is slightly less reliable for guaranteeing a truly unique ID; however, in some cases, you may want access to the
 * unique ID prior to the entry creation.
 */
add_action( 'gform_pre_submission', function( $form ) {

	if( ! function_exists( 'gp_unique_id' ) ) {
		return;
	}

	// get the GP Unique ID field class, we'll need it to access it's methods
	$gpui_field = gp_unique_id()->field_obj;

	// remove the default GP Unique ID functionality that populates the unique when the entry is saved
	remove_filter( 'gform_entry_post_save', array( $gpui_field, 'populate_field_value' ) );

	// loop through the submitted form object for Unique ID fields
	foreach( $form['fields'] as $field ) {
		if( $field->get_input_type() == 'uid' && ! GFFormsModel::is_field_hidden( $form, $field, array() ) ) {

			// generate a unique ID
			$value = gp_unique_id()->get_unique( $form['id'], $field );

			// populate the unique ID into the $_POST so Gravity Forms will populate it into the entry
			$_POST[ sprintf( 'input_%s', $field['id'] ) ] = $value;

			// since the "current entry" is already set, we need to update it manually so other plugins will have access to the unique ID
			$entry = GFFormsModel::get_current_lead();
			$entry[ $field['id'] ] = $value;
			GFFormsModel::set_current_lead( $entry );

		}
	}

}, 9 );