Conditional Unique ID for Gravity Flow

Prevent a Unique ID field from generating its value until a specific Gravity Flow step is completed.

Instructions

Code

Filename: gpuid-generate-post-workflow.php

<?php
/**
 * Gravity Perks // Unique ID // Conditional Unique ID for Gravity Flow
 * https://gravitywiz.com/documentation/gravity-forms-unique-id/
 * 
 * Instruction Video: https://www.loom.com/share/e799e8b4b0984d99a66da79faa34ffee
 *
 * Prevent a Unique ID field from generating its value until a specific Gravity Flow Workflow step is completed.
 * Useful when you want to generate the Unique ID only after approval or other workflow steps.
 *
 * Plugin Name:  Conditional Unique ID for Gravity Flow
 * Plugin URI:   https://gravitywiz.com/documentation/gravity-forms-unique-id/
 * Description:  Prevent a Unique ID field from generating its value until a specific Gravity Flow step is completed.
 * Author:       Gravity Wiz
 * Version:      0.1
 * Author URI:   https://gravitywiz.com
 */
class GPUID_Generate_Post_Workflow {

	private $_args = array();

	public function __construct( $args = array() ) {

		$this->_args = wp_parse_args( $args, array(
			'form_id'  => false,
			'field_id' => false,
			'step_id'  => false,
		) );

		if ( ! $this->_args['form_id'] || ! $this->_args['field_id'] || ! $this->_args['step_id'] ) {
			return;
		}

		add_action( 'init', array( $this, 'init' ) );

	}

	public function init() {

		add_filter( 'gpui_unique_id', array( $this, 'prevent_unique_id_generation' ), 10, 3 );
		add_action( 'gravityflow_step_complete', array( $this, 'maybe_generate_unique_id' ), 10, 4 );

	}

	public function prevent_unique_id_generation( $unique, $form_id, $field_id ) {

		if ( $form_id == $this->_args['form_id'] && $field_id == $this->_args['field_id'] && ! gravity_flow()->is_workflow_detail_page() ) {
			return '';
		}

		return $unique;
	}

	public function maybe_generate_unique_id( $step_id, $entry_id, $form_id, $status ) {

		if ( (int) $step_id === $this->_args['step_id'] && (int) $form_id === $this->_args['form_id'] ) {
			$entry = GFAPI::get_entry( $entry_id );
			if ( ! is_wp_error( $entry ) && empty( $entry[ $this->_args['field_id'] ] ) ) {
				$uid_field = GFAPI::get_field( $form_id, $this->_args['field_id'] );
				$uid_field->save_value( GFAPI::get_entry( $entry_id ), $uid_field, false );
			}
		}
	}

}

# Configuration

new GPUID_Generate_Post_Workflow( array(
	'form_id'  => 5,    // Replace with your form ID.
	'field_id' => 3,    // Replace with your Unique ID field ID.
	'step_id'  => 3     // Replace with your Gravity Flow step ID.
) );

Leave a Reply

Your email address will not be published. Required fields are marked *

  • Trouble installing this snippet? See our troubleshooting tips.
  • Need to include code? Create a gist and link to it in your comment.
  • Reporting a bug? Provide a URL where this issue can be recreated.

By commenting, I understand that I may receive emails related to Gravity Wiz and can unsubscribe at any time.