Skip to content

Instantly share code, notes, and snippets.

@spivurno
Last active December 28, 2022 09:17
Show Gist options
  • Save spivurno/8220561 to your computer and use it in GitHub Desktop.
Save spivurno/8220561 to your computer and use it in GitHub Desktop.
Gravity Wiz // Require Minimum Character Limit for Gravity Forms
<?php
/**
* WARNING! THIS SNIPPET MAY BE OUTDATED.
* The latest version of this snippet can be found in the Gravity Wiz Snippet Library:
* https://github.com/gravitywiz/snippet-library/blob/master/gravity-forms/gw-min-and-max-character-limit.php
*/
/**
* Gravity Wiz // Require Minimum Character Limit for Gravity Forms
*
* Adds support for requiring a minimum number of characters for text-based Gravity Form fields.
*
* @version 1.0
* @author David Smith <[email protected]>
* @license GPL-2.0+
* @link http://gravitywiz.com/...
* @copyright 2013 Gravity Wiz
*/
class GW_Minimum_Characters {
public function __construct( $args = array() ) {
// make sure we're running the required minimum version of Gravity Forms
if( ! property_exists( 'GFCommon', 'version' ) || ! version_compare( GFCommon::$version, '1.7', '>=' ) )
return;
// set our default arguments, parse against the provided arguments, and store for use throughout the class
$this->_args = wp_parse_args( $args, array(
'form_id' => false,
'field_id' => false,
'min_chars' => 0,
'max_chars' => false,
'validation_message' => false,
'min_validation_message' => __( 'Please enter at least %s characters.' ),
'max_validation_message' => __( 'You may only enter %s characters.' )
) );
extract( $this->_args );
if( ! $form_id || ! $field_id || ! $min_chars )
return;
// time for hooks
add_filter( "gform_field_validation_{$form_id}_{$field_id}", array( $this, 'validate_character_count' ), 10, 4 );
}
public function validate_character_count( $result, $value, $form, $field ) {
$char_count = strlen( $value );
$is_min_reached = $this->_args['min_chars'] !== false && $char_count >= $this->_args['min_chars'];
$is_max_exceeded = $this->_args['max_chars'] !== false && $char_count > $this->_args['max_chars'];
if( ! $is_min_reached ) {
$message = $this->_args['validation_message'];
if( ! $message )
$message = $this->_args['min_validation_message'];
$result['is_valid'] = false;
$result['message'] = sprintf( $message, $this->_args['min_chars'] );
} else if( $is_max_exceeded ) {
$message = $this->_args['max_validation_message'];
if( ! $message )
$message = $this->_args['validation_message'];
$result['is_valid'] = false;
$result['message'] = sprintf( $message, $this->_args['max_chars'] );
}
return $result;
}
}
# Configuration
new GW_Minimum_Characters( array(
'form_id' => 524,
'field_id' => 1,
'min_chars' => 4,
'max_chars' => 5,
'min_validation_message' => __( 'Oops! You need to enter at least %s characters.' ),
'max_validation_message' => __( 'Oops! You can only enter %s characters.' )
) );
@cliffordp
Copy link

Well I needed to adapt this for my own use to support array-like fields (e.g. Address and Name)

So here you go, everybody: https://github.com/cliffordp/gf-gw-req-char-length

Gravity Wiz folks, thanks for the head start. Feel free to co-own it with me, link it, etc. as you wish.

@spivurno
Copy link
Author

@cliffordp Just seeing this now all these years later. Glad it was helpful to you and always happy to see folks extending our work!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment