-
-
Save spivurno/ef6572a77cdc7483c40777e65467f448 to your computer and use it in GitHub Desktop.
| <?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-user-registration-skip-registration-for-existing-email.php | |
| */ | |
| /** | |
| * Gravity Wiz // Gravity Forms // User Registration // Skip Registration if Email Exists | |
| * | |
| * If submitted email is already registered, skip registration. | |
| * | |
| * @version 0.4 | |
| * @author David Smith <[email protected]> | |
| * @license GPL-2.0+ | |
| * @link http://gravitywiz.com/ | |
| * | |
| * Plugin Name: Gravity Forms User Registration - Skip Registration if Email Exists | |
| * Plugin URI: http://gravitywiz.com/ | |
| * Description: If submitted email is already registered, skip registration. | |
| * Author: Gravity Wiz | |
| * Version: 0.4 | |
| * Author URI: http://gravitywiz.com | |
| */ | |
| class GW_GFUR_Skip_Registration_If_Email_Exists { | |
| private static $instance = null; | |
| public static function get_instance( $args ) { | |
| if( null == self::$instance ) { | |
| self::$instance = new self( $args ); | |
| } | |
| return self::$instance; | |
| } | |
| private function __construct( $args = array() ) { | |
| // set our default arguments, parse against the provided arguments, and store for use throughout the class | |
| $this->_args = wp_parse_args( $args, array( | |
| 'form_ids' => array(), | |
| 'exclude_form_ids' => array(), | |
| ) ); | |
| add_filter( 'gform_is_delayed_pre_process_feed', array( $this, 'maybe_delay_feeds' ), 10, 4 ); | |
| add_action( 'gform_pre_process', array( $this, 'maybe_skip_user_registration_validation' ) ); | |
| add_action( 'gform_validation', array( $this, 'ignore_email_validation' ) ); | |
| } | |
| public function maybe_delay_feeds( $is_delayed, $form, $entry, $slug ) { | |
| if ( $slug == 'gravityformsuserregistration' && $this->is_applicable_form( $form ) ) { | |
| if( ( $this->does_feed_email_exist( $form, $entry ) || ! $this->is_email_valid( $form, $entry ) ) && ! is_user_logged_in() ) { | |
| return true; | |
| } | |
| } | |
| return $is_delayed; | |
| } | |
| public function maybe_skip_user_registration_validation( $form ) { | |
| if ( function_exists( 'gf_user_registration' ) && $this->is_applicable_form( $form ) && ! is_user_logged_in() ) { | |
| remove_filter( 'gform_validation', array( gf_user_registration(), 'validate' ) ); | |
| } | |
| } | |
| public function does_feed_email_exist( $form, $entry = false ) { | |
| $email = $this->get_email_by_feed( $form, $entry ); | |
| return get_user_by( 'email', $email ) !== false; | |
| } | |
| public function is_email_valid( $form, $entry = false ) { | |
| $email = $this->get_email_by_feed( $form, $entry ); | |
| return ! rgblank( $email ) && GFCommon::is_valid_email( $email ); | |
| } | |
| public function get_email_by_feed( $form, $entry = false ) { | |
| if( $entry == false ) { | |
| $entry = GFFormsModel::get_current_lead(); | |
| } | |
| $feed = gf_user_registration()->get_single_submission_feed( $entry, $form ); | |
| if( empty( $feed ) ) { | |
| return false; | |
| } | |
| $email_field_id = rgars( $feed, 'meta/email' ); | |
| $email = rgar( $entry, $email_field_id ); | |
| return $email; | |
| } | |
| public function ignore_email_validation( $validation_result ) { | |
| // invalid emails should only be ignored for users who are registering; logged in users should not be able to | |
| // enter an incorrect email | |
| if( is_user_logged_in() ) { | |
| return $validation_result; | |
| } | |
| $has_validation_error = false; | |
| foreach( $validation_result['form']['fields'] as &$field ) { | |
| if( $field['validation_message'] == esc_html__( 'Please enter a valid email address.', 'gravityforms' ) ) { | |
| $field['failed_validation'] = false; | |
| } | |
| if( $field['failed_validation'] ) { | |
| $has_validation_error = true; | |
| } | |
| } | |
| $validation_result['is_valid'] = ! $has_validation_error; | |
| return $validation_result; | |
| } | |
| public function is_applicable_form( $form ) { | |
| $form_id = isset( $form['id'] ) ? $form['id'] : $form; | |
| if( ! empty( $this->_args['exclude_form_ids'] ) ) { | |
| return ! in_array( $form_id, $this->_args['exclude_form_ids'] ); | |
| } else if( ! empty( $this->_args['form_ids'] ) ) { | |
| return in_array( $form_id, $this->_args['form_ids'] ); | |
| } | |
| return true; | |
| } | |
| } | |
| function gw_gfur_skip_registration_if_email_exists( $args = array() ) { | |
| return GW_GFUR_Skip_Registration_If_Email_Exists::get_instance( $args ); | |
| } | |
| // Default configuration; applies to all applicable forms automatically. | |
| gw_gfur_skip_registration_if_email_exists(); | |
| // Use this to exclude forms from this snippet. | |
| // gw_gfur_skip_registration_if_email_exists( array( | |
| // 'exclude_form_ids' => array( 1, 2, 3 ) | |
| // ) ); |
I can't seem to get this working with either placing it in my functions.php or as a plugin. Not sure what I'm doing wrong. I'm still getting the "This email address is already registered" error. Here's my form: https://www.smtionline.com/apply/.
Is the plugin still valid? it works? is it to be updated?
@spivurno, can you take a look at this code? I added this to functions.php in my child theme but it doesn't seem to work. I have a contact us form with a checkbox to sign up to receive emails which should create an account so that becomes the system of record and I can use a newsletter app to send emails. I continue to get "this user is already registered" errors when submitting.
@rfmurphy81 We have hundreds of snippets and don't have the man-power to support all of them for free. If you're a Gravity Perks customers with an Advanced or Pro license we'd be happy to take a look for you here: https://gravitywiz.com/support/
Thanks! That seems to be precisely what I need. How can I install this Add-On?