/** * 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'); } }