/**
  * Save the data to complete the partial member record login/registration
  *
  * @access	private
  * @return	void		[Outputs to screen/redirects]
  */
 private function _completeRegistrationSave()
 {
     //-----------------------------------------
     // INIT
     //-----------------------------------------
     $mid = intval($this->request['mid']);
     $key = intval($this->request['key']);
     $in_email = strtolower(trim($this->request['EmailAddress']));
     $banfilters = array();
     $form_errors = array('dname' => array(), 'email' => array(), 'general' => array());
     $members_display_name = trim($this->request['members_display_name']);
     $poss_session_id = "";
     //-----------------------------------------
     // Get DB row
     //-----------------------------------------
     $reg = $this->DB->buildAndFetch(array('select' => '*', 'from' => 'members_partial', 'where' => "partial_member_id={$mid} AND partial_date={$key}"));
     $tmp_member = IPSMember::load($mid);
     //-----------------------------------------
     // Got it?
     //-----------------------------------------
     if (!$reg['partial_id'] or !$tmp_member['member_id']) {
         $this->registry->output->showError('partial_reg_noid', 10117);
     }
     //-----------------------------------------
     // Load ban filters
     //-----------------------------------------
     $this->DB->build(array('select' => '*', 'from' => 'banfilters'));
     $this->DB->execute();
     while ($r = $this->DB->fetch()) {
         $banfilters[$r['ban_type']][] = $r['ban_content'];
     }
     //-----------------------------------------
     // Custom profile field stuff
     //-----------------------------------------
     require_once IPS_ROOT_PATH . 'sources/classes/customfields/profileFields.php';
     $custom_fields = new customProfileFields();
     $custom_fields->initData('edit');
     $custom_fields->parseToSave($this->request, 'register');
     /* Check */
     if ($custom_fields->error_messages) {
         $form_errors['general'] = $custom_fields->error_messages;
     }
     //-----------------------------------------
     // Remove 'sneaky' spaces
     //-----------------------------------------
     if ($this->settings['strip_space_chr']) {
         $members_display_name = IPSText::removeControlCharacters($members_display_name);
     }
     //-----------------------------------------
     // Testing email addresses?
     //-----------------------------------------
     if (!$reg['partial_email_ok']) {
         //-----------------------------------------
         // Check the email address
         //-----------------------------------------
         if (!IPSText::checkEmailAddress($in_email)) {
             $form_errors['email'][] = $this->lang->words['reg_error_email_nm'];
         }
         //-----------------------------------------
         // Test email address
         //-----------------------------------------
         $this->request['EmailAddress_two'] = strtolower(trim($this->request['EmailAddress_two']));
         if ($this->request['EmailAddress_two'] != $in_email) {
             $form_errors['email'][] = $this->lang->words['reg_error_email_nm'];
         }
         //-----------------------------------------
         // Are they banned [EMAIL]?
         //-----------------------------------------
         if (is_array($banfilters['email']) and count($banfilters['email'])) {
             foreach ($banfilters['email'] as $email) {
                 $email = str_replace('\\*', '.*', preg_quote($email, "/"));
                 if (preg_match("/^{$email}\$/i", $in_email)) {
                     $form_errors['email'][] = $this->lang->words['reg_error_email_taken'];
                     break;
                 }
             }
         }
         /* Is this email addy taken? */
         if (IPSMember::checkByEmail($in_email) == TRUE) {
             $form_errors['email'][] = $this->lang->words['reg_error_email_taken'];
         }
         //-----------------------------------------
         // Load handler...
         //-----------------------------------------
         require_once IPS_ROOT_PATH . 'sources/handlers/han_login.php';
         $han_login = new han_login($this->registry);
         $han_login->init();
         if ($han_login->emailExistsCheck(trim(strtolower($member['email'])), trim(strtolower($in_email)))) {
             $form_errors['email'][] = $this->lang->words['reg_error_email_taken'];
         }
     }
     if ($this->settings['auth_allow_dnames']) {
         /* Check the username */
         $user_check = IPSMember::getFunction()->cleanAndCheckName($members_display_name, $tmp_member, 'members_display_name');
         if (is_array($user_check['errors']) && count($user_check['errors'])) {
             $form_errors['dname'] = array_merge($form_errors['dname'], $user_check['errors']);
         }
     }
     //-----------------------------------------
     // CHECK 1: Any errors (duplicate names, etc)?
     //-----------------------------------------
     if (count($form_errors)) {
         $errorMessages = array();
         foreach ($form_errors as $errorCat => $errorMessage) {
             foreach ($errorMessage as $error) {
                 $errorMessages['general'][] = $error;
             }
         }
         if (count($errorMessages)) {
             $this->_completeRegistration($errorMessages);
             return;
         }
     }
     //-----------------------------------------
     // Update: Members
     //-----------------------------------------
     $members_display_name = $this->settings['auth_allow_dnames'] ? $members_display_name : $tmp_member['name'];
     if (!$reg['partial_email_ok']) {
         IPSMember::save($mid, array('members' => array('email' => $in_email, 'members_display_name' => $members_display_name, 'name' => $tmp_member['name'] ? $tmp_member['name'] : $members_display_name, 'members_l_username' => $tmp_member['members_l_username'] ? $tmp_member['members_l_username'] : $members_display_name, 'members_l_display_name' => strtolower($members_display_name))));
     } else {
         IPSMember::save($mid, array('members' => array('members_display_name' => $members_display_name, 'name' => $tmp_member['name'] ? $tmp_member['name'] : $members_display_name, 'members_l_username' => $tmp_member['members_l_username'] ? $tmp_member['members_l_username'] : $members_display_name, 'members_l_display_name' => strtolower($members_display_name))));
     }
     //-----------------------------------------
     // Delete: Partials row
     //-----------------------------------------
     $this->DB->delete('members_partial', 'partial_member_id=' . $mid);
     //-----------------------------------------
     //  Update: Profile fields
     //-----------------------------------------
     $this->DB->force_data_type = array();
     foreach ($custom_fields->out_fields as $_field => $_data) {
         $this->DB->force_data_type[$_field] = 'string';
     }
     if (is_array($custom_fields->out_fields) and count($custom_fields->out_fields)) {
         $this->DB->update('pfields_content', $custom_fields->out_fields, 'member_id=' . $mid);
     }
     //-----------------------------------------
     // Send out admin email
     //-----------------------------------------
     if ($this->settings['new_reg_notify']) {
         $date = $this->registry->getClass('class_localization')->getDate(time(), 'LONG', 1);
         IPSText::getTextClass('email')->getTemplate("admin_newuser");
         IPSText::getTextClass('email')->buildMessage(array('DATE' => $date, 'MEMBER_NAME' => $members_display_name));
         IPSText::getTextClass('email')->subject = $this->lang->words['new_registration_email'] . $this->settings['board_name'];
         IPSText::getTextClass('email')->to = $this->settings['email_in'];
         IPSText::getTextClass('email')->sendMail();
     }
     //-----------------------------------------
     // Set cookies
     //-----------------------------------------
     IPSCookie::set("member_id", $mid, 1);
     IPSCookie::set("pass_hash", $tmp_member['member_login_key'], 1);
     //-----------------------------------------
     // Fix up session
     //-----------------------------------------
     $privacy = $this->request['Privacy'] ? 1 : 0;
     if ($this->caches['group_cache'][$tmp_member['member_group_id']]['g_hide_online_list']) {
         $privacy = 1;
     }
     $this->member->sessionClass()->convertGuestToMember(array('member_name' => $members_display_name, 'member_id' => $mid, 'member_group' => $tmp_member['member_group_id'], 'login_type' => $privacy));
     //-----------------------------------------
     // Update Stats
     //-----------------------------------------
     $cache = $this->cache->getCache('stats');
     if ($members_display_name and $mid) {
         $cache['last_mem_name'] = $members_display_name;
         $cache['last_mem_id'] = $mid;
     }
     $cache['mem_count'] += 1;
     $this->cache->setCache('stats', $cache, array('array' => 1, 'deletefirst' => 0));
     /* Complete account */
     IPSLib::runMemberSync('onCompleteAccount', IPSMember::load($mid));
     //-----------------------------------------
     // Go to the board index
     //-----------------------------------------
     $this->registry->output->redirectScreen($this->lang->words['clogin_done'], $this->settings['base_url']);
 }
 /**
  * Check the email address
  *
  * @access	public
  * @return	void		[Outputs to screen]
  */
 public function checkEmail()
 {
     //-----------------------------------------
     // INIT
     //-----------------------------------------
     $email = '';
     if (is_string($_REQUEST['email'])) {
         $email = strtolower(IPSText::parseCleanValue(rawurldecode($_REQUEST['email'])));
     }
     if (!$email) {
         $this->returnString('found');
     }
     if (!IPSText::checkEmailAddress($email)) {
         $this->returnString('found');
     }
     //-----------------------------------------
     // Got the member?
     //-----------------------------------------
     if (!IPSMember::checkByEmail($email)) {
         //-----------------------------------------
         // Load ban filters
         //-----------------------------------------
         $this->DB->build(array('select' => '*', 'from' => 'banfilters'));
         $this->DB->execute();
         while ($r = $this->DB->fetch()) {
             $banfilters[$r['ban_type']][] = $r['ban_content'];
         }
         //-----------------------------------------
         // Are they banned [EMAIL]?
         //-----------------------------------------
         if (is_array($banfilters['email']) and count($banfilters['email'])) {
             foreach ($banfilters['email'] as $memail) {
                 $memail = str_replace("\\*", '.*', preg_quote($memail, "/"));
                 if (preg_match("/{$memail}/", $email)) {
                     $this->returnString('banned');
                     break;
                 }
             }
         }
         //-----------------------------------------
         // Load handler...
         //-----------------------------------------
         require_once IPS_ROOT_PATH . 'sources/handlers/han_login.php';
         $han_login = new han_login($this->registry);
         $han_login->init();
         if ($han_login->emailExistsCheck($email)) {
             $this->returnString('found');
         }
         $this->returnString('notfound');
     } else {
         $this->returnString('found');
     }
 }