/** * Update the user based on the currently submitted lead. * * Update the user meta first as the display name is dependent on the first and last name user meta. Afterwards, * update the "core" user properties. * * @param $lead * @param $form * @param bool $config * @return array */ public static function update_user($lead, $form, $config = false) { if (!$config) { $config = self::get_active_config($form, $lead); } $meta = rgar($config, 'meta'); $user_id = apply_filters('gform_user_registration_update_user_id', $lead['created_by'], $lead, $form, $config); $user_id = apply_filters("gform_user_registration_update_user_id_{$form['id']}", $user_id, $lead, $form, $config); // update user meta before display name due to dependency self::add_user_meta($user_id, $config, $form, $lead, array()); // refreshing $user variable because it might have changed during add_user_meta $user_obj = new WP_User($user_id); $user = get_object_vars($user_obj->data); $user_data = self::get_user_data($lead, $form, $config, true); $user['user_email'] = $user_data['user_email']; $user['display_name'] = self::get_display_name($user['ID'], $config); // if password provided, store it for update in $user array and then remove from $lead if ($user_data['password']) { $user['user_pass'] = $user_data['password']; GFUserData::remove_password($form['id'], $lead['id'], rgar($meta, 'password')); } else { unset($user['user_pass']); } $user_id = wp_update_user($user); $role = rgar($meta, 'role'); // if a role is provied and it is not the 'preserve' option, update the role if (rgar($meta, 'role') && $role != 'gfur_preserve_role') { $user_obj->set_role(rgar($meta, 'role')); } do_action('gform_user_updated', $user_id, $config, $lead, $user_data['password']); // return array with user_id, user_login, user_email, and password return array_merge(array('user_id' => $user_id), $user_data); }
public static function gf_create_user($entry, $form, $fulfilled = false) { // if the entry is marked as spam if (rgar($entry, 'status') == 'spam') { return; } $config = self::get_config($form['id']); $meta = rgar($config, 'meta'); // if there is no registration feed or the registration condition is not met or the feed is not active, abandon ship if (!$config || !self::registration_condition_met($form, $config, $entry) || !$config['is_active']) { return; } // if PayPal Add-on was used for this entry, integrate $paypal_config = self::get_paypal_config($form["id"], $entry); if ($paypal_config) { //$paypal_config = self::get_paypal_config($form["id"], $entry); $order_total = GFCommon::get_order_total($form, $entry); // delay the registration IF: // - the delay registration option is checked // - the order total does NOT equal zero (no delay since there will never be a payment) // - the payment has not already been fulfilled if ($paypal_config && $paypal_config['meta']['delay_registration'] && $order_total != 0 && $fulfilled != true) { return; } } $user_name = apply_filters("gform_username_{$form['id']}", apply_filters('gform_username', self::get_meta_value('username', $config, $form, $entry), $config, $form, $entry), $config, $form, $entry); $user_email = self::get_meta_value('email', $config, $form, $entry); $user_pass = self::get_meta_value('password', $config, $form, $entry); if (empty($user_name) || empty($user_email)) { return; } if (!function_exists('username_exists')) { require_once ABSPATH . WPINC . "/registration.php"; } $user_id = username_exists($user_name); // create the user and password, then add user meta if (!$user_id && empty($user_pass)) { $user_pass = wp_generate_password(); $user_id = wp_create_user($user_name, $user_pass, $user_email); if (is_wp_error($user_id)) { return; } update_user_option($user_id, 'default_password_nag', true, false); self::add_user_meta($user_id, $config, $form, $entry, array()); } else { if (!$user_id) { $user_id = wp_create_user($user_name, $user_pass, $user_email); if (is_wp_error($user_id)) { return; } GFUserData::remove_password($form['id'], $entry['id'], rgar($meta, 'password')); self::add_user_meta($user_id, $config, $form, $entry, array()); } else { // if user with this username already exists, abort user registration return; } } if (rgar($meta, 'role')) { $user = new WP_User($user_id); $user->set_role(rgar($meta, 'role')); } // set post author if (!empty($entry['post_id']) && rgar($meta, 'set_post_author')) { self::attribute_post_author($user_id, $entry['post_id']); } // send user/admin notifications if (rgar($meta, 'notification')) { wp_new_user_notification($user_id, $user_pass); } else { wp_new_user_notification($user_id, ""); // sending a blank password only sends notification to admin } do_action('gform_user_registered', $user_id, $config, $entry, $user_pass); }