diff --git a/system/libs/pot/OTS_Account.php b/system/libs/pot/OTS_Account.php index c0d46dec..8a9e63ac 100644 --- a/system/libs/pot/OTS_Account.php +++ b/system/libs/pot/OTS_Account.php @@ -101,6 +101,37 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable return $name; } + /** + * @param $email + * @return mixed + * @throws Exception + */ + public function createWithEmail($email = null) + { + // if name is not passed then it will be generated randomly + if( !isset($email) ) + { + throw new Exception(__CLASS__ . ':' . __METHOD__ . ' createWithEmail called without e-mail.'); + } + + // repeats until name is unique + do + { + $name = uniqid(); + + $query = $this->db->query('SELECT `id` FROM `accounts` WHERE `name` = ' . $this->db->quote($name)); + } while($query->rowCount() >= 1); + + // saves blank account info + $this->db->exec('INSERT INTO `accounts` (`name`, `password`, `email`, `created`) VALUES (' . $this->db->quote($name) . ', ' . '\'\', ' . $this->db->quote($email) . ', ' . time() . ')'); + + // reads created account's ID + $this->data['id'] = $this->db->lastInsertId(); + $this->data['name'] = $name; + + // return name of newly created account + return $name; + } /** * Creates new account. * diff --git a/system/pages/createaccount.php b/system/pages/createaccount.php index 8af31629..4a8d3f69 100644 --- a/system/pages/createaccount.php +++ b/system/pages/createaccount.php @@ -34,11 +34,13 @@ $errors = array(); $save = isset($_POST['save']) && $_POST['save'] == 1; if($save) { - if(USE_ACCOUNT_NAME) { - $account_name = $_POST['account']; - } - else { - $account_id = $_POST['account']; + if(!config('account_login_by_email')) { + if(USE_ACCOUNT_NAME) { + $account_name = $_POST['account']; + } + else { + $account_id = $_POST['account']; + } } $email = $_POST['email']; @@ -46,12 +48,14 @@ if($save) $password2 = $_POST['password2']; // account - if(isset($account_id)) { - if(!Validator::accountId($account_id)) + if(!config('account_login_by_email')) { + if (isset($account_id)) { + if (!Validator::accountId($account_id)) { + $errors['account'] = Validator::getLastError(); + } + } else if (!Validator::accountName($account_name)) $errors['account'] = Validator::getLastError(); } - else if(!Validator::accountName($account_name)) - $errors['account'] = Validator::getLastError(); // email if(!Validator::email($email)) @@ -93,7 +97,7 @@ if($save) } // check if account name is not equal to password - if(USE_ACCOUNT_NAME && strtoupper($account_name) == strtoupper($password)) { + if(!config('account_login_by_email') && USE_ACCOUNT_NAME && strtoupper($account_name) == strtoupper($password)) { $errors['password'] = 'Password may not be the same as account name.'; } @@ -106,16 +110,28 @@ if($save) } $account_db = new OTS_Account(); - if(USE_ACCOUNT_NAME) - $account_db->find($account_name); - else - $account_db->load($account_id); + if (config('account_login_by_email')) { + $account_db->findByEMail($email); + } + else { + if(USE_ACCOUNT_NAME) { + $account_db->find($account_name); + } + else { + $account_db->load($account_id); + } + } if($account_db->isLoaded()) { - if(USE_ACCOUNT_NAME) - $errors['account'] = 'Account with this name already exist.'; - else - $errors['account'] = 'Account with this id already exist.'; + if (config('account_login_by_email') && !config('account_mail_unique')) { + $errors['account'] = 'Account with this email already exist.'; + } + else if (!config('account_login_by_email')) { + if (USE_ACCOUNT_NAME) + $errors['account'] = 'Account with this name already exist.'; + else + $errors['account'] = 'Account with this id already exist.'; + } } if(!isset($_POST['accept_rules']) || $_POST['accept_rules'] !== 'true') @@ -130,11 +146,12 @@ if($save) 'accept_rules' => isset($_POST['accept_rules']) ? $_POST['accept_rules'] === 'true' : false, ); - if(USE_ACCOUNT_NAME) { - $params['account_name'] = $_POST['account']; - } - else { - $params['account_id'] = $_POST['account']; + if (!config('account_login_by_email')) { + if (USE_ACCOUNT_NAME) { + $params['account_name'] = $_POST['account']; + } else { + $params['account_id'] = $_POST['account']; + } } $hooks->trigger(HOOK_ACCOUNT_CREATE_AFTER_SUBMIT, $params); @@ -151,10 +168,15 @@ if($save) if(empty($errors)) { $new_account = new OTS_Account(); - if(USE_ACCOUNT_NAME) - $new_account->create($account_name); - else - $new_account->create(NULL, $account_id); + if (config('account_login_by_email')) { + $new_account->createWithEmail($email); + } + else { + if(USE_ACCOUNT_NAME) + $new_account->create($account_name); + else + $new_account->create(NULL, $account_id); + } $config_salt_enabled = $db->hasColumn('accounts', 'salt'); if($config_salt_enabled) @@ -192,7 +214,11 @@ if($save) $new_account->setCustomField('premium_points', $config['account_premium_points']); } - $tmp_account = (USE_ACCOUNT_NAME ? $account_name : $account_id); + $tmp_account = $email; + if (!config('account_login_by_email')) { + $tmp_account = (USE_ACCOUNT_NAME ? $account_name : $account_id); + } + if($config['mail_enabled'] && $config['account_mail_verify']) { $hash = md5(generateRandomString(16, true, true) . $email);