/**
  * Handles register user submit.
  *
  * On validation errors, step back to register form.
  *
  * @since  1.0.0
  */
 public function register_user()
 {
     do_action('ms_controller_frontend_register_user_before', $this);
     if (!$this->verify_nonce()) {
         return;
     }
     try {
         $user = MS_Factory::create('MS_Model_Member');
         // Default WP registration filter
         $fields = apply_filters('signup_user_init', $_REQUEST);
         foreach ($fields as $field => $value) {
             $user->{$field} = $value;
         }
         $user->save();
         // Default WP action hook
         do_action('signup_finished');
         $user->signon_user();
         if (MS_Model_Event::save_event(MS_Model_Event::TYPE_MS_REGISTERED, $user)) {
             if (!defined('MS_DISABLE_WP_NEW_USER_NOTIFICATION')) {
                 wp_new_user_notification($user->id, $user->password);
             }
         }
         do_action('ms_controller_frontend_register_user_complete', $user);
         // Go to membership signup payment form.
         if (empty($_REQUEST['membership_id'])) {
             $redirect = esc_url_raw(add_query_arg(array('step' => self::STEP_CHOOSE_MEMBERSHIP)));
         } else {
             $redirect = esc_url_raw(add_query_arg(array('step' => self::STEP_PAYMENT_TABLE, 'membership_id' => absint($_REQUEST['membership_id']))));
         }
         wp_safe_redirect($redirect);
         exit;
     } catch (Exception $e) {
         self::$register_errors = $e->getMessage();
         // step back
         $this->add_action('the_content', 'register_form', 1);
         do_action('ms_controller_frontend_register_user_error', self::$register_errors);
     }
 }