/** * Processes the registration form * * @access public * @return void */ public function registerProcessForm() { $form_errors = array(); $coppa = $this->request['coppa_user'] == 1 ? 1 : 0; $in_password = trim($this->request['PassWord']); $in_email = strtolower(trim($this->request['EmailAddress'])); $_SFS_FOUND = FALSE; /* Check */ if ($this->settings['no_reg'] == 1) { $this->registry->output->showError('registration_disabled', 2016, true); } /* 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; } /* Check the email address */ if (!$in_email or strlen($in_email) < 6 or !IPSText::checkEmailAddress($in_email)) { $form_errors['email'][$this->lang->words['err_invalid_email']] = $this->lang->words['err_invalid_email']; } if (trim($this->request['PassWord_Check']) != $in_password) { $form_errors['password'][$this->lang->words['passwords_not_match']] = $this->lang->words['passwords_not_match']; } /* Test email address */ $this->request['EmailAddress_two'] = strtolower(trim($this->request['EmailAddress_two'])); $this->request['EmailAddress'] = strtolower(trim($this->request['EmailAddress'])); if (!IPSText::checkEmailAddress($this->request['EmailAddress_two'])) { $form_errors['email'][$this->lang->words['reg_error_email_invalid']] = $this->lang->words['reg_error_email_invalid']; } else { if ($in_email and $this->request['EmailAddress_two'] != $in_email) { $form_errors['email'][$this->lang->words['reg_error_email_nm']] = $this->lang->words['reg_error_email_nm']; } } /* Need username? */ $uses_name = false; foreach ($this->cache->getCache('login_methods') as $method) { if ($method['login_user_id'] == 'username') { $uses_name = true; } } if (!$uses_name) { $_REQUEST['UserName'] = $_REQUEST['members_display_name']; $this->request['UserName'] = $this->request['members_display_name']; } /* Check the username */ $user_check = IPSMember::getFunction()->cleanAndCheckName($this->request['UserName'], array(), 'name'); if ($this->settings['auth_allow_dnames']) { $disp_check = IPSMember::getFunction()->cleanAndCheckName($this->request['members_display_name'], array(), 'members_display_name'); } if (is_array($user_check['errors']) && count($user_check['errors'])) { foreach ($user_check['errors'] as $key => $error) { $form_errors[$key][] = $error; } } if ($this->settings['auth_allow_dnames'] and is_array($disp_check['errors']) && count($disp_check['errors'])) { foreach ($disp_check['errors'] as $key => $error) { $form_errors[$key][] = $error; } } /* CHECK 1: Any errors (missing fields, etc)? */ if (count($form_errors)) { $this->registerForm($form_errors); return; } /* Is this email addy taken? */ if (IPSMember::checkByEmail($in_email) == TRUE) { $form_errors['email'][$this->lang->words['reg_error_email_taken']] = $this->lang->words['reg_error_email_taken']; } /* Load handler... */ require_once IPS_ROOT_PATH . 'sources/handlers/han_login.php'; $this->han_login = new han_login($this->registry); $this->han_login->init(); $this->han_login->emailExistsCheck($in_email); if ($this->han_login->return_code and $this->han_login->return_code != 'METHOD_NOT_DEFINED' and $this->han_login->return_code != 'EMAIL_NOT_IN_USE') { $form_errors['email'][$this->lang->words['reg_error_email_taken']] = $this->lang->words['reg_error_email_taken']; } /* Are they banned [EMAIL]? */ if (IPSMember::isBanned('email', $in_email) === TRUE) { $form_errors['email'][$this->lang->words['reg_error_email_ban']] = $this->lang->words['reg_error_email_ban']; } /* Check the CAPTCHA */ if ($this->settings['bot_antispam']) { if ($this->registry->getClass('class_captcha')->validate() !== TRUE) { $form_errors['general'][$this->lang->words['err_reg_code']] = $this->lang->words['err_reg_code']; } } /* Check the Q and A */ if ($this->settings['registration_qanda']) { $qanda = intval($this->request['qanda_id']); $pass = false; if ($qanda) { $data = $this->DB->buildAndFetch(array('select' => '*', 'from' => 'question_and_answer', 'where' => 'qa_id=' . $qanda)); if ($data['qa_id']) { $answers = explode("\n", str_replace("\r", "", $data['qa_answers'])); if (count($answers)) { foreach ($answers as $answer) { if (strtolower($answer) == strtolower($this->request['qa_answer'])) { $pass = true; break; } } } } } else { //----------------------------------------- // Do we have any questions? //----------------------------------------- $data = $this->DB->buildAndFetch(array('select' => 'COUNT(*) as questions', 'from' => 'question_and_answer')); if (!$data['questions']) { $pass = true; } } if (!$pass) { $form_errors['general'][$this->lang->words['err_q_and_a']] = $this->lang->words['err_q_and_a']; } } /* CHECK 2: Any errors ? */ if (count($form_errors)) { $this->registerForm($form_errors); return; } /* Build up the hashes */ $mem_group = $this->settings['member_group']; /* Are we asking the member or admin to preview? */ if ($this->settings['reg_auth_type']) { $mem_group = $this->settings['auth_group']; } else { if ($coppa == 1) { $mem_group = $this->settings['auth_group']; } } /* Create member */ $member = array('name' => $this->request['UserName'], 'password' => $in_password, 'members_display_name' => $this->settings['auth_allow_dnames'] ? $this->request['members_display_name'] : $this->request['UserName'], 'email' => $in_email, 'member_group_id' => $mem_group, 'joined' => time(), 'ip_address' => $this->member->ip_address, 'time_offset' => $this->request['time_offset'], 'coppa_user' => $coppa, 'members_auto_dst' => intval($this->request['dst']), 'allow_admin_mails' => intval($this->request['allow_admin_mail']), 'hide_email' => $this->request['allow_member_mail'] ? 0 : 1); /* Spam Service */ $spamCode = 0; if ($this->settings['spam_service_enabled'] && $this->settings['spam_service_api_key']) { /* Query the service */ $spamCode = IPSMember::querySpamService($in_email); /* Action to perform */ $action = $this->settings['spam_service_action_' . $spamCode]; /* Perform Action */ switch ($action) { /* Proceed with registraction */ case 1: break; /* Flag for admin approval */ /* Flag for admin approval */ case 2: $member['member_group_id'] = $this->settings['auth_group']; $this->settings['reg_auth_type'] = 'admin'; break; /* Approve the account, but ban it */ /* Approve the account, but ban it */ case 3: $member['member_banned'] = 1; $member['member_group_id'] = $this->settings['banned_group']; $this->settings['reg_auth_type'] = ''; break; } } //----------------------------------------- // Create the account //----------------------------------------- $member = IPSMember::create(array('members' => $member, 'pfields_content' => $this->request)); //----------------------------------------- // Login handler create account callback //----------------------------------------- $this->han_login->createAccount(array('email' => $member['email'], 'joined' => $member['joined'], 'password' => $in_password, 'ip_address' => $this->member->ip_address, 'username' => $member['members_display_name'])); //----------------------------------------- // We'll just ignore if this fails - it shouldn't hold up IPB anyways //----------------------------------------- /*if ( $han_login->return_code AND ( $han_login->return_code != 'METHOD_NOT_DEFINED' AND $han_login->return_code != 'SUCCESS' ) ) { $this->registry->output->showError( 'han_login_create_failed', 2017, true ); }*/ //----------------------------------------- // Validation //----------------------------------------- $validate_key = md5(IPSLib::makePassword() . time()); $time = time(); if ($coppa != 1) { if ($this->settings['reg_auth_type'] == 'user' or $this->settings['reg_auth_type'] == 'admin' or $this->settings['reg_auth_type'] == 'admin_user') { //----------------------------------------- // We want to validate all reg's via email, // after email verificiation has taken place, // we restore their previous group and remove the validate_key //----------------------------------------- $this->DB->insert('validating', array('vid' => $validate_key, 'member_id' => $member['member_id'], 'real_group' => $this->settings['member_group'], 'temp_group' => $this->settings['auth_group'], 'entry_date' => $time, 'coppa_user' => $coppa, 'new_reg' => 1, 'ip_address' => $member['ip_address'])); if ($this->settings['reg_auth_type'] == 'user' or $this->settings['reg_auth_type'] == 'admin_user') { IPSText::getTextClass('email')->getTemplate("reg_validate"); IPSText::getTextClass('email')->buildMessage(array('THE_LINK' => $this->settings['base_url'] . "app=core&module=global§ion=register&do=auto_validate&uid=" . urlencode($member['member_id']) . "&aid=" . urlencode($validate_key), 'NAME' => $member['members_display_name'], 'MAN_LINK' => $this->settings['base_url'] . "app=core&module=global§ion=register&do=05", 'EMAIL' => $member['email'], 'ID' => $member['member_id'], 'CODE' => $validate_key)); IPSText::getTextClass('email')->subject = $this->lang->words['new_registration_email'] . $this->settings['board_name']; IPSText::getTextClass('email')->to = $member['email']; IPSText::getTextClass('email')->sendMail(); $this->output = $this->registry->output->getTemplate('register')->showAuthorize($member); } else { if ($this->settings['reg_auth_type'] == 'admin') { $this->output = $this->registry->output->getTemplate('register')->showPreview($member); } } if ($this->settings['new_reg_notify']) { $date = $this->registry->class_localization->getDate(time(), 'LONG', 1); IPSText::getTextClass('email')->getTemplate('admin_newuser'); IPSText::getTextClass('email')->buildMessage(array('DATE' => $date, 'MEMBER_NAME' => $member['members_display_name'])); IPSText::getTextClass('email')->subject = $this->lang->words['new_registration_email1'] . $this->settings['board_name']; IPSText::getTextClass('email')->to = $this->settings['email_in']; IPSText::getTextClass('email')->sendMail(); } $this->registry->output->setTitle($this->lang->words['reg_success']); $this->registry->output->addNavigation($this->lang->words['nav_reg'], ''); } else { /* We don't want to preview, or get them to validate via email. */ $stat_cache = $this->caches['stats']; if ($member['members_display_name'] and $member['member_id']) { $stat_cache['last_mem_name'] = $member['members_display_name']; $stat_cache['last_mem_id'] = $member['member_id']; } $stat_cache['mem_count'] += 1; $this->cache->setCache('stats', $stat_cache, array('array' => 1, 'deletefirst' => 0)); if ($this->settings['new_reg_notify']) { $date = $this->registry->class_localization->getDate(time(), 'LONG', 1); IPSText::getTextClass('email')->getTemplate('admin_newuser'); IPSText::getTextClass('email')->buildMessage(array('DATE' => $date, 'MEMBER_NAME' => $member['members_display_name'])); IPSText::getTextClass('email')->subject = $this->lang->words['new_registration_email1'] . $this->settings['board_name']; IPSText::getTextClass('email')->to = $this->settings['email_in']; IPSText::getTextClass('email')->sendMail(); } IPSCookie::set('pass_hash', $member['member_login_key'], 1); IPSCookie::set('member_id', $member['member_id'], 1); //----------------------------------------- // Fix up session //----------------------------------------- $privacy = $this->request['Privacy'] ? 1 : 0; if ($member['g_hide_online_list']) { $privacy = 1; } $this->member->sessionClass()->convertGuestToMember(array('member_name' => $member['members_display_name'], 'member_id' => $member['member_id'], 'member_group' => $member['member_group_id'], 'login_type' => $privacy)); $this->registry->output->silentRedirect($this->settings['base_url'] . '&app=core&module=global§ion=login&do=autologin&fromreg=1'); } } else { /* This is a COPPA user, so lets tell them they registered OK and redirect to the form. */ $this->DB->insert('validating', array('vid' => $validate_key, 'member_id' => $member['member_id'], 'real_group' => $this->settings['member_group'], 'temp_group' => $this->settings['auth_group'], 'entry_date' => $time, 'coppa_user' => $coppa, 'new_reg' => 1, 'ip_address' => $member['ip_address'])); $this->registry->output->redirectScreen($this->lang->words['cp_success'], $this->settings['base_url'] . 'app=core&module=global&section=register&do=12'); } }
/** * UserCP Save Form: Email Address * * @access public * @return mixed Array of errors / boolean true */ public function saveFormEmail() { //----------------------------------------- // INIT //----------------------------------------- $_emailOne = strtolower(trim($this->request['in_email_1'])); $_emailTwo = strtolower(trim($this->request['in_email_2'])); $captchaInput = trim(ipsRegistry::$request['captchaInput']); $captchaUniqueID = trim(ipsRegistry::$request['captchaUniqueID']); //----------------------------------------- // Check input //----------------------------------------- if ($this->memberData['g_access_cp']) { return array(0 => $this->lang->words['admin_emailpassword']); } if (!$_POST['in_email_1'] or !$_POST['in_email_2']) { return array(0 => $this->lang->words['complete_entire_form']); } //----------------------------------------- // Check password... //----------------------------------------- if (!$this->_isFBUser) { if ($this->_checkPassword($this->request['password']) === FALSE) { return array(0 => $this->lang->words['current_pw_bad']); } } //----------------------------------------- // Test email addresses //----------------------------------------- if ($_emailOne != $_emailTwo) { return array(0 => $this->lang->words['emails_no_matchy']); } if (IPSText::checkEmailAddress($_emailOne) !== TRUE) { return array(0 => $this->lang->words['email_not_valid']); } //----------------------------------------- // Is this email addy taken? //----------------------------------------- if (IPSMember::checkByEmail($_emailOne) == TRUE) { return array(0 => $this->lang->words['email_is_taken']); } //----------------------------------------- // 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']; } //----------------------------------------- // Check in banned list //----------------------------------------- if (isset($banfilters['email']) and is_array($banfilters['email']) and count($banfilters['email'])) { foreach ($banfilters['email'] as $email) { $email = str_replace('\\*', '.*', preg_quote($email, "/")); if (preg_match("/^{$email}\$/i", $_emailOne)) { return array(0 => $this->lang->words['email_is_taken']); } } } //----------------------------------------- // Anti bot flood... //----------------------------------------- if ($this->settings['bot_antispam']) { if ($this->registry->getClass('class_captcha')->validate() !== TRUE) { return array(0 => $this->lang->words['captcha_email_invalid']); } } //----------------------------------------- // Load handler... //----------------------------------------- require_once IPS_ROOT_PATH . 'sources/handlers/han_login.php'; $this->han_login = new han_login($this->registry); $this->han_login->init(); if ($this->han_login->emailExistsCheck($_emailOne) !== FALSE) { return array(0 => $this->lang->words['email_is_taken']); } $this->han_login->changeEmail($this->memberData['email'], $_emailOne); if ($this->han_login->return_code and $this->han_login->return_code != 'METHOD_NOT_DEFINED' and $this->han_login->return_code != 'SUCCESS') { return array(0 => $this->lang->words['email_is_taken']); } //----------------------------------------- // Require new validation? NON ADMINS ONLY //----------------------------------------- if ($this->settings['reg_auth_type'] and !$this->memberData['g_access_cp']) { $validate_key = md5(IPSLib::makePassword() . time()); //----------------------------------------- // Update the new email, but enter a validation key // and put the member in "awaiting authorisation" // and send an email.. //----------------------------------------- $db_str = array('vid' => $validate_key, 'member_id' => $this->memberData['member_id'], 'temp_group' => $this->settings['auth_group'], 'entry_date' => time(), 'coppa_user' => 0, 'email_chg' => 1, 'ip_address' => $this->request['IP_ADDRESS'], 'prev_email' => $this->memberData['email']); if ($this->memberData['member_group_id'] != $this->settings['auth_group']) { $db_str['real_group'] = $this->memberData['member_group_id']; } $this->DB->insert('validating', $db_str); IPSMember::save($this->memberData['member_id'], array('core' => array('member_group_id' => $this->settings['auth_group'], 'email' => $_emailOne))); IPSLib::runMemberSync('onEmailChange', $this->memberData['member_id'], strtolower($_emailOne)); //----------------------------------------- // Update their session with the new member group //----------------------------------------- if ($this->member->session_id) { $this->member->sessionClass()->convertMemberToGuest(); } //----------------------------------------- // Kill the cookies to stop auto log in //----------------------------------------- IPSCookie::set('pass_hash', '-1', 0); IPSCookie::set('member_id', '-1', 0); IPSCookie::set('session_id', '-1', 0); //----------------------------------------- // Dispatch the mail, and return to the activate form. //----------------------------------------- IPSText::getTextClass('email')->getTemplate("newemail"); IPSText::getTextClass('email')->buildMessage(array('NAME' => $this->memberData['members_display_name'], 'THE_LINK' => $this->settings['base_url'] . "app=core&module=global§ion=register&do=auto_validate&type=newemail&uid=" . $this->memberData['member_id'] . "&aid=" . $validate_key, 'ID' => $this->memberData['member_id'], 'MAN_LINK' => $this->settings['base_url'] . "app=core&module=global§ion=register&do=07", 'CODE' => $validate_key)); IPSText::getTextClass('email')->subject = $this->lang->words['lp_subject'] . ' ' . $this->settings['board_name']; IPSText::getTextClass('email')->to = $_emailOne; IPSText::getTextClass('email')->sendMail(); $this->registry->getClass('output')->redirectScreen($this->lang->words['ce_redirect'], $this->settings['base_url'] . 'app=core&module=global&section=register&do=07'); } else { //----------------------------------------- // No authorisation needed, change email addy and return //----------------------------------------- IPSMember::save($this->memberData['member_id'], array('core' => array('email' => $_emailOne))); IPSLib::runMemberSync('onEmailChange', $this->memberData['member_id'], strtolower($_emailOne)); //----------------------------------------- // Add to OK message //----------------------------------------- $this->ok_message = $this->lang->words['ok_email_changed']; return TRUE; } }
/** * Create new member * Very basic functionality at this point. * * @access public * @param array Fields to save in the following format: array( 'members' => array( 'email' => '*****@*****.**', * 'joined' => time() ), * 'extendedProfile' => array( 'signature' => 'My signature' ) ); * Tables: members, pfields_content, profile_portal. * You can also use the aliases: 'core [members]', 'extendedProfile [profile_portal]', and 'customFields [pfields_content]' * @param bool Flag to attempt to auto create a name if the desired is taken * @param bool Bypass custom field saving (if using the sso session integration this is required as member object isn't ready yet) * @return array Final member Data including member_id * * EXCEPTION CODES * CUSTOM_FIELDS_EMPTY - Custom fields were not populated * CUSTOM_FIELDS_INVALID - Custom fields were invalid * CUSTOM_FIELDS_TOOBIG - Custom fields too big */ public static function create($tables = array(), $autoCreateName = FALSE, $bypassCfields = FALSE) { //----------------------------------------- // INIT //----------------------------------------- $finalTables = array(); $password = ''; $bitWiseFields = ipsRegistry::fetchBitWiseOptions('global'); //----------------------------------------- // Remap tables if required //----------------------------------------- foreach ($tables as $table => $data) { $_name = isset(self::$remap[$table]) ? self::$remap[$table] : $table; if ($_name == 'members') { /* Magic password field */ $password = isset($data['password']) ? trim($data['password']) : IPSLib::makePassword(); $md_5_password = md5($password); unset($data['password']); } $finalTables[$_name] = $data; } //----------------------------------------- // Custom profile field stuff //----------------------------------------- if (!$bypassCfields) { require_once IPS_ROOT_PATH . 'sources/classes/customfields/profileFields.php'; $fields = new customProfileFields(); if (is_array($finalTables['pfields_content']) and count($finalTables['pfields_content'])) { $fields->member_data = $finalTables['pfields_content']; } $_cfieldMode = 'normal'; $fields->initData('edit'); $fields->parseToSave($finalTables['pfields_content'], 'register'); /* Check */ if (count($fields->error_fields['empty'])) { //throw new Exception( 'CUSTOM_FIELDS_EMPTY' ); } if (count($fields->error_fields['invalid'])) { //throw new Exception( 'CUSTOM_FIELDS_INVALID' ); } if (count($fields->error_fields['toobig'])) { //throw new Exception( 'CUSTOM_FIELDS_TOOBIG' ); } } //----------------------------------------- // Make sure the account doesn't exist //----------------------------------------- if ($finalTables['members']['email']) { $existing = IPSMember::load($finalTables['members']['email'], 'all'); if ($existing['member_id']) { $existing['full'] = true; $existing['timenow'] = time(); return $existing; } } //----------------------------------------- // Fix up usernames and display names //----------------------------------------- /* Ensure we have a display name */ $finalTables['members']['members_display_name'] = $finalTables['members']['members_display_name'] ? $finalTables['members']['members_display_name'] : $finalTables['members']['name']; //----------------------------------------- // Clean up characters //----------------------------------------- if ($finalTables['members']['name']) { $userName = IPSMember::getFunction()->cleanAndCheckName($finalTables['members']['name'], array(), 'name'); if ($userName['errors']) { $finalTables['members']['name'] = ''; } else { $finalTables['members']['name'] = $userName['username']; } } if ($finalTables['members']['members_display_name']) { $displayName = IPSMember::getFunction()->cleanAndCheckName($finalTables['members']['members_display_name']); if ($displayName['errors']) { $finalTables['members']['members_display_name'] = ''; } else { $finalTables['members']['members_display_name'] = $displayName['members_display_name']; } } //----------------------------------------- // Remove some basic HTML tags //----------------------------------------- $finalTables['members']['members_display_name'] = str_replace(array('<', '>', '"'), '', $finalTables['members']['members_display_name']); $finalTables['members']['name'] = str_replace(array('<', '>', '"'), '', $finalTables['members']['name']); //----------------------------------------- // Make sure the names are unique //----------------------------------------- if ($finalTables['members']['members_display_name']) { try { if (IPSMember::getFunction()->checkNameExists($finalTables['members']['members_display_name'], array(), 'members_display_name', true) === true) { if ($autoCreateName === TRUE) { /* Now, make sure we have a unique display name */ $max = ipsRegistry::DB()->buildAndFetch(array('select' => 'MAX(member_id) as max', 'from' => 'members', 'where' => "members_l_display_name LIKE '" . $this->DB->addSlashes(strtolower($finalTables['members']['members_display_name'])) . "%'")); if ($max['max']) { $_num = $max['max'] + 1; $finalTables['members']['members_display_name'] = $finalTables['members']['members_display_name'] . '_' . $_num; } } else { $finalTables['members']['members_display_name'] = ''; } } } catch (Exception $e) { } } if ($finalTables['members']['name']) { try { if (IPSMember::getFunction()->checkNameExists($finalTables['members']['name'], array(), 'name', true) === true) { if ($autoCreateName === TRUE) { /* Now, make sure we have a unique username */ $max = ipsRegistry::DB()->buildAndFetch(array('select' => 'MAX(member_id) as max', 'from' => 'members', 'where' => "members_l_username LIKE '" . $this->DB->addSlashes(strtolower($finalTables['members']['name'])) . "%'")); if ($max['max']) { $_num = $max['max'] + 1; $finalTables['members']['name'] = $finalTables['members']['name'] . '_' . $_num; } } else { $finalTables['members']['name'] = ''; } } } catch (Exception $e) { } } //----------------------------------------- // Populate member table(s) //----------------------------------------- $finalTables['members']['members_l_username'] = isset($finalTables['members']['name']) ? strtolower($finalTables['members']['name']) : ''; $finalTables['members']['joined'] = $finalTables['members']['joined'] ? $finalTables['members']['joined'] : time(); $finalTables['members']['email'] = $finalTables['members']['email'] ? $finalTables['members']['email'] : $finalTables['members']['name'] . '@' . $finalTables['members']['joined']; $finalTables['members']['member_group_id'] = $finalTables['members']['member_group_id'] ? $finalTables['members']['member_group_id'] : ipsRegistry::$settings['member_group']; $finalTables['members']['ip_address'] = $finalTables['members']['ip_address'] ? $finalTables['members']['ip_address'] : ipsRegistry::member()->ip_address; $finalTables['members']['members_created_remote'] = intval($finalTables['members']['members_created_remote']); $finalTables['members']['member_login_key'] = IPSMember::generateAutoLoginKey(); $finalTables['members']['member_login_key_expire'] = ipsRegistry::$settings['login_key_expire'] ? time() + intval(ipsRegistry::$settings['login_key_expire']) * 86400 : 0; $finalTables['members']['view_sigs'] = 1; $finalTables['members']['email_pm'] = 1; $finalTables['members']['view_img'] = 1; $finalTables['members']['view_avs'] = 1; $finalTables['members']['restrict_post'] = intval($finalTables['members']['restrict_post']); $finalTables['members']['view_pop'] = 1; $finalTables['members']['msg_count_total'] = 0; $finalTables['members']['msg_count_new'] = 0; $finalTables['members']['msg_show_notification'] = 1; $finalTables['members']['coppa_user'] = 0; $finalTables['members']['auto_track'] = intval($finalTables['members']['auto_track']); $finalTables['members']['last_visit'] = $finalTables['members']['last_visit'] ? $finalTables['members']['last_visit'] : time(); $finalTables['members']['last_activity'] = $finalTables['members']['last_activity'] ? $finalTables['members']['last_activity'] : time(); $finalTables['members']['language'] = IPSLib::getDefaultLanguage(); $finalTables['members']['members_editor_choice'] = ipsRegistry::$settings['ips_default_editor']; $finalTables['members']['members_pass_salt'] = IPSMember::generatePasswordSalt(5); $finalTables['members']['members_pass_hash'] = IPSMember::generateCompiledPasshash($finalTables['members']['members_pass_salt'], $md_5_password); $finalTables['members']['members_display_name'] = isset($finalTables['members']['members_display_name']) ? $finalTables['members']['members_display_name'] : ''; $finalTables['members']['members_l_display_name'] = isset($finalTables['members']['members_display_name']) ? strtolower($finalTables['members']['members_display_name']) : ''; $finalTables['members']['fb_uid'] = isset($finalTables['members']['fb_uid']) ? $finalTables['members']['fb_uid'] : 0; $finalTables['members']['fb_emailhash'] = isset($finalTables['members']['fb_emailhash']) ? strtolower($finalTables['members']['fb_emailhash']) : ''; $finalTables['members']['members_seo_name'] = IPSText::makeSeoTitle($finalTables['members']['members_display_name']); $finalTables['members']['bw_is_spammer'] = intval($finalTables['members']['bw_is_spammer']); //----------------------------------------- // Insert: MEMBERS //----------------------------------------- ipsRegistry::DB()->force_data_type = array('name' => 'string', 'members_l_username' => 'string', 'members_display_name' => 'string', 'members_l_display_name' => 'string', 'members_seo_name' => 'string', 'email' => 'string'); /* Bitwise options */ if (is_array($bitWiseFields['members'])) { $_freeze = array(); foreach ($bitWiseFields['members'] as $field) { if (isset($finalTables['members'][$field])) { /* Add to freezeable array */ $_freeze[$field] = $finalTables['members'][$field]; /* Remove it from the fields to save to DB */ unset($finalTables['members'][$field]); } } if (count($_freeze)) { $finalTables['members']['members_bitoptions'] = IPSBWOptions::freeze($_freeze, 'members', 'global'); } } ipsRegistry::DB()->insert('members', $finalTables['members']); //----------------------------------------- // Get the member id //----------------------------------------- $finalTables['members']['member_id'] = ipsRegistry::DB()->getInsertId(); //----------------------------------------- // Insert: PROFILE PORTAL //----------------------------------------- $finalTables['profile_portal']['pp_member_id'] = $finalTables['members']['member_id']; $finalTables['profile_portal']['pp_setting_count_friends'] = 1; $finalTables['profile_portal']['pp_setting_count_comments'] = 1; ipsRegistry::DB()->insert('profile_portal', $finalTables['profile_portal']); //----------------------------------------- // Insert into the custom profile fields DB //----------------------------------------- if (!$bypassCfields) { $fields->out_fields['member_id'] = $finalTables['members']['member_id']; ipsRegistry::DB()->delete('pfields_content', 'member_id=' . $finalTables['members']['member_id']); ipsRegistry::DB()->insert('pfields_content', $fields->out_fields); } else { ipsRegistry::DB()->delete('pfields_content', 'member_id=' . $finalTables['members']['member_id']); ipsRegistry::DB()->insert('pfields_content', array('member_id' => $finalTables['members']['member_id'])); } //----------------------------------------- // Insert into partial ID table //----------------------------------------- $full_account = false; if ($finalTables['members']['members_display_name'] and $finalTables['members']['name'] and $finalTables['members']['email'] != $finalTables['members']['name'] . '@' . $finalTables['members']['joined']) { $full_account = true; } if (!$full_account) { ipsRegistry::DB()->insert('members_partial', array('partial_member_id' => $finalTables['members']['member_id'], 'partial_date' => $finalTables['members']['joined'], 'partial_email_ok' => $finalTables['members']['email'] == $finalTables['members']['name'] . '@' . $finalTables['members']['joined'] ? 0 : 1)); } //IPSMember::updateSearchIndex( $finalTables['members']['member_id'] ); IPSLib::runMemberSync('onCreateAccount', $finalTables['members']); return array_merge($finalTables['members'], $finalTables['profile_portal'], !$bypassCfields ? $fields->out_fields : array(), array('timenow' => $finalTables['members']['joined'], 'full' => $full_account)); }
/** * Completes the lost password request form * * @access public * @return void */ public function lostPasswordEnd() { if ($this->settings['bot_antispam']) { if (!$this->registry->getClass('class_captcha')->validate($this->request['regid'], $this->request['reg_code'])) { $this->lostPasswordForm('err_reg_code'); return; } } /* Back to the usual programming! :o */ if ($this->request['member_name'] == "" and $this->request['email_addy'] == "") { $this->registry->output->showError('lostpass_name_email', 10110); } /* Check for input and it's in a valid format. */ $member_name = trim(strtolower($this->request['member_name'])); $email_addy = trim(strtolower($this->request['email_addy'])); if ($member_name == "" and $email_addy == "") { $this->registry->output->showError('lostpass_name_email', 10111); } /* Attempt to get the user details from the DB */ if ($member_name) { $this->DB->build(array('select' => 'members_display_name, name, member_id, email, member_group_id', 'from' => 'members', 'where' => "members_l_username='******'")); $this->DB->execute(); } else { if ($email_addy) { $this->DB->build(array('select' => 'members_display_name, name, member_id, email, member_group_id', 'from' => 'members', 'where' => "email='{$email_addy}'")); $this->DB->execute(); } } if (!$this->DB->getTotalRows()) { $this->registry->output->showError('lostpass_no_user', 10112); } else { $member = $this->DB->fetch(); /* Is there a validation key? If so, we'd better not touch it */ if ($member['member_id'] == "") { $this->registry->output->showError('lostpass_no_mid', 2014); } $validate_key = md5(IPSLib::makePassword() . uniqid(mt_rand(), TRUE)); /* Get rid of old entries for this member */ $this->DB->delete('validating', "member_id={$member['member_id']} AND lost_pass=1"); /* Update the DB for this member. */ $db_str = array('vid' => $validate_key, 'member_id' => $member['member_id'], 'temp_group' => $member['member_group_id'], 'entry_date' => time(), 'coppa_user' => 0, 'lost_pass' => 1, 'ip_address' => $this->request['IP_ADDRESS']); /* Are they already in the validating group? */ if ($member['member_group_id'] != $this->settings['auth_group']) { $db_str['real_group'] = $member['member_group_id']; } $this->DB->insert('validating', $db_str); /* Send out the email. */ IPSText::getTextClass('email')->getTemplate('lost_pass'); IPSText::getTextClass('email')->buildMessage(array('NAME' => $member['members_display_name'], 'THE_LINK' => $this->settings['base_url'] . "app=core&module=global§ion=lostpass&do=sendform&uid=" . $member['member_id'] . "&aid=" . $validate_key, 'MAN_LINK' => $this->settings['base_url'] . "app=core&module=global§ion=lostpass&do=sendform", 'EMAIL' => $member['email'], 'ID' => $member['member_id'], 'CODE' => $validate_key, 'IP_ADDRESS' => $this->member->ip_address)); IPSText::getTextClass('email')->subject = $this->lang->words['lp_subject'] . ' ' . $this->settings['board_name']; IPSText::getTextClass('email')->to = $member['email']; IPSText::getTextClass('email')->sendMail(); $this->output = $this->registry->getClass('output')->getTemplate('register')->lostPasswordWait($member); } $this->registry->output->setTitle($this->lang->words['lost_pass_form']); }