gpui_sequential_unique_id_pre_insert

  1. Description
  2. Usage
  3. Parameters
  4. Examples
    1. Fill Gaps in Sequential Unique IDs
    2. Add HyperDB Support for Sequential IDs
  5. Since

Description

Modify the sequential ID that will be used prior to adding the ID to the database. This is useful for changing the behavior of how sequential IDs are selected.

Usage

add_filter( 'gpui_sequential_unique_id_pre_insert', 'my_custom_function', 10, 4 );

Parameters

  • uid number|bool

    The unique ID to be inserted. If false, the next ID will be calculated using MySQL AUTO_INCREMENT.

  • form_id int

    The ID of the form for which the unique ID is being generated.

  • field_id int

    The ID of the field for which the unique ID is being generated.

  • starting_number int

    The number from which the sequence should start.

Examples

Fill Gaps in Sequential Unique IDs

<?php
/**
 * GP Unique ID // Gravity Perks // Fill Gaps in Sequential Unique IDs
 * https://gravitywiz.com/documentation/gp-unique-id/
 *
 * Use this snippet to automatically fill gaps in the sequence of unique IDs for Unique ID fields of the "Sequential"
 * type. Gaps will occur when entries containing a sequential unique ID are deleted.
 *
 * Update the filter name "gpui_sequential_unique_id_pre_insert_519_5", replacing "519" with your form ID and "5" with
 * your field ID.
 */
add_filter( 'gpui_sequential_unique_id_pre_insert_519_5', function ( $uid, $form_id, $field_id ) {
	global $wpdb;

	$result = $wpdb->get_results( $wpdb->prepare( "
		select value 
		from {$wpdb->prefix}rg_lead_detail 
		where form_id = %d and field_number = %d", $form_id, $field_id ) );

	if ( empty( $result ) ) {
		return $uid;
	}

	$_uids   = wp_list_pluck( $result, 'value' );
	$form    = GFAPI::get_form( $form_id );
	$field   = GFFormsModel::get_field( $form, $field_id );
	$numbers = array();

	foreach ( $_uids as $_uid ) {

		$clean_uid = str_replace( $field['gp-unique-id_prefix'], '', $_uid );
		$clean_uid = str_replace( $field['gp-unique-id_suffix'], '', $clean_uid );
		$clean_uid = intval( ltrim( $clean_uid, '0' ) );

		$numbers[] = $clean_uid;

	}

	sort( $numbers );

	$range = range( 1, max( $numbers ) );
	$diff  = array_diff( $range, $numbers );

	// looks like we've found a gap in the sequence; busted!
	if ( ! empty( $diff ) ) {
		$uid = array_shift( $diff );
	}

	return $uid;
}, 10, 3 );

Add HyperDB Support for Sequential IDs

<?php
/**
 * Gravity Perks // GP Unique ID // HyperDB Support for Sequential IDs
 * https://gravitywiz.com/documentation/gravity-forms-unique-id/
 */
add_filter( 'gpui_sequential_unique_id_pre_insert', function ( $uid, $form_id, $field_id, $starting_number ) {
	global $wpdb;

	$wpdb->query( 'START TRANSACTION' );

	$wpdb->query( $wpdb->prepare(
		'INSERT INTO ' . $wpdb->prefix . 'gpui_sequence ( form_id, field_id, current ) VALUES ( %d, %d, ( @next := 1 ) ) ON DUPLICATE KEY UPDATE current = ( @next := current + 1 )',
		$form_id,
		$field_id
	) );

	$uid = $wpdb->get_var( $wpdb->prepare( 'SELECT `current` from ' . $wpdb->prefix . 'gpui_sequence where form_id = %d and field_id = %d', $form_id, $field_id ) );

	$wpdb->query( 'COMMIT' );

	return $uid;
}, 10, 5 );

Since

This filter is available since Gravity Forms Unique ID 1.2.2.