gpui_sequential_unique_id_pre_insert
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 MySQLAUTO_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.