Skip to content

Instantly share code, notes, and snippets.

@bappi-d-great
Last active August 29, 2018 15:41
Show Gist options
  • Save bappi-d-great/e128d7978e69d2f4947d653e5a2ceeb9 to your computer and use it in GitHub Desktop.
Save bappi-d-great/e128d7978e69d2f4947d653e5a2ceeb9 to your computer and use it in GitHub Desktop.
WPMU DEV Forminator Pro: Use a form as registration form (Beta)
<?php
if( ! class_exists( 'Forminatio_Registration_Addon' ) )
{
class Forminatio_Registration_Addon
{
// Registration Form ID
static $Form_ID = '4599';
static $map = array(
'user_login' => 'Username',
'user_email' => 'Email Address'
);
protected function __construct()
{
//add_action( 'form_data_saved', array( $this, 'register_user' ), 99, 2 );
add_filter( 'forminator_custom_form_submit_errors', array( $this, 'check_form_data' ), 99, 3 );
add_action( 'forminator_custom_form_submit_before_set_fields', array( $this, 'register_user' ), 99, 3 );
}
public static function get_instance()
{
static $Inst = null;
if( null == $Inst )
{
$Inst = new self();
}
return $Inst;
}
public function check_form_data( $submit_errors, $form_id, $field_data_array )
{
if( $form_id != self::$Form_ID ) return;
$map = array();
$fields = Forminator_API::get_form_fields( self::$Form_ID );
foreach( $fields as $field )
{
if( $field->raw['field_label'] == self::$map['user_email'] )
{
$map['user_email'] = $field->slug;
}
if( $field->raw['field_label'] == self::$map['user_login'] )
{
$map['user_login'] = $field->slug;
}
}
//print_r($map);
foreach( $field_data_array as $arr )
{
if( $arr['name'] == $map['user_email'] )
{
$email = $arr['value'];
}
elseif( $arr['name'] == $map['user_login'] )
{
$username = $arr['value'];
}
}
if( ! validate_username( $username ) )
{
$submit_errors[][ $map['user_login'] ] = 'The username is not valid!';
}
else if( username_exists( $username ) )
{
$submit_errors[][ $map['user_login'] ] = 'The username is already taken, choose another one!';
}
else if( email_exists( $email ) )
{
$submit_errors[][ $map['user_email'] ] = 'The email is already taken, choose another one!';
}
if( empty( $submit_errors ) )
{
}
return $submit_errors;
}
public function register_user( $entry, $form_id, $field_data_array )
{
if( $form_id != self::$Form_ID ) return;
$map = $userdata = $meta = array();
$submitted_data = array(
'user_description',
'user_firstname',
'user_lastname',
'user_login',
'user_nicename',
'user_email',
'user_url'
);
$fields = Forminator_API::get_form_fields( self::$Form_ID );
foreach( $fields as $field )
{
$field_name = str_replace( ' ', '_', strtolower( $field->raw['field_label'] ) );
if( in_array( $field_name, array( 'email', 'email_address' ) ) )
{
$userdata['user_email'] = $field->slug;
}
else if( in_array( $field_name, array( 'username', 'login', 'user_login' ) ) )
{
$userdata['user_login'] = $field->slug;
}
else if( in_array( $field_name, array( 'display_name' ) ) )
{
$userdata['display_name'] = $field->slug;
}
else if( in_array( $field_name, array( 'name' ) ) )
{
$userdata['first_name'] = $field->slug;
}
else if( in_array( 'user_' . $field_name, $submitted_data ) )
{
$userdata['user_' . $field_name] = $field->slug;
}
else
{
$meta[$field->slug] = $field_name;
}
}
foreach( $field_data_array as $arr )
{
$key = array_search ( $arr['name'], $userdata );
if( isset( $key ) && $key != '' )
{
$userdata[$key] = $arr['value'];
}
}
$user_id = wp_insert_user( $userdata );
foreach( $field_data_array as $arr )
{
if( ! in_array( $arr['name'], $userdata ) )
{
update_user_meta( $user_id, $meta( $arr['name'] ), $arr['value'] );
}
}
}
}
Forminatio_Registration_Addon::get_instance();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment