Skip to content

Instantly share code, notes, and snippets.

@idokd
Last active January 6, 2022 18:14
Show Gist options
  • Select an option

  • Save idokd/ae7fa7f1a69cfe19c582f252b1b0fa4d to your computer and use it in GitHub Desktop.

Select an option

Save idokd/ae7fa7f1a69cfe19c582f252b1b0fa4d to your computer and use it in GitHub Desktop.
GravityForms Unique ID - Generates a alphanumeric, numeric, or sequential "Unique ID" for the entry when submitted
<?php
/*
- Add this to your functions.php
- Add a form input normal
- give it a gf-sequence class
*/
$gfex_gsf = false;
add_filter( 'gform_pre_render', 'gfex_sequence_field' );
function gfex_sequence_field( $form = null ) {
global $gfex_gsf;
foreach ( $form[ 'fields' ] as &$field ) {
if ( strpos( $field->cssClass, 'gf-sequence' ) !== false ) {
$field->defaultValue = gfex_sequence_next( $field->defaultValue, $field);
$gfex_gsf = true;
continue;
$field->allowsPrepopulate = true;
//if ( !empty( $field->inputName ) ) add_filter( 'gform_field_value_' . $field->inputName, 'gfex_sequence_next', 50, 3 );
//else if ( !isset( $gfex_gsf ) || !$gfex_gsf ) {
// add_filter( 'gform_field_value', 'gfex_sequence_next', 50, 2 );
// $gfex_gsf = true;
//}
}
}
if ( $gfex_gsf ) {
?>
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery( ".gf-sequence input" ).attr( "readonly","readonly" );
});
</script>
<?php
}
return( $form );
}
add_filter( 'gform_save_field_value', 'gfex_sequence_save_field_value', 10, 3 );
function gfex_sequence_save_field_value( $value, $lead, $field ) {
if ( strpos( $field->cssClass, 'gf-sequence' ) === false ) return( $value );
return( gfex_sequence_next( $value, $field, false ) );
}
function gfex_sequence_next( $value, $field, $inc = 1 ) {
global $gfex_gsf;
if ( strpos( $field->cssClass, 'gf-sequence' ) === false ) return( $value );
$form_id = $field->formId;
$field_id = $field->id;
$prefix = apply_filters( 'gfex_sequence_prefix', '', $value, $field ); // date('Y') . '-';
do {
$count = RGFormsModel::get_form_counts( $form_id );
$unique = $count[ 'total' ] + ( $inc ? $inc : 0 ); // count of the lead form entries incremented by one
$unique = $prefix . str_pad( $unique, 3, '0', STR_PAD_LEFT ); // padding for number format 001,002...015 so 3 digit number format
} while ( !gfex_sequence_check( $unique, $form_id, $field_id ) );
return( $unique );
}
function gfex_sequence_check( $unique, $form_id, $field_id ) {
global $wpdb;
$table = $wpdb->prefix . 'rg_lead_detail';
$result = $wpdb->get_var( "SELECT value FROM $table WHERE form_id = '$form_id' AND field_number = '$field_id' AND value = '$unique'" );
return( empty( $result) );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment