20) {
$error = 'Логин должен содержать не более 20 символов.';
}
if (strlen($login) < 4) {
$error = 'Логин должен содержать не менее 4 символов.';
}
if ($this->hasMixedLatCur($login)) {
$error = 'В логине разрешено использовать только буквы одного алфавита русского или английского. Нельзя смешивать.';
}
//Разделители
if (substr_count($login, ' ') + substr_count($login, '-') + substr_count($login, '_') > 2) {
$error = 'Не более двух разделителей одновременно (пробел, тире, нижнее подчеркивание).';
}
if (!empty($error)) {
$error .= '
Пример правильного никнейма: Петя Убиватор, Коля, xalop.
Пример неправильного никнейма: )))), kolя)=-/.';
}
if ($isRegistered || $wasRegistered || $isRestricted) {
$error = 'Логин ' . $login . ' уже занят, выберите другой.';
}
return $error ?? '';
}
public function hasGoodEmail(string $email): string
{
$isRegistered = Db::getValue('select count(*) from users where mail = ?', [$email]);
$isBlocked = Db::getValue('select count(*) from ban_email where email = ?', [$email]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL) || $isRegistered) {
$error = 'Неправильный email.';
}
if ($isBlocked) {
$error = 'Адрес заблокирован.';
}
$allowedDomains = Db::getColumn('select email from trust_email');
$domain = explode('@', $email)[1];
if (!in_array($domain, $allowedDomains)) {
$error = 'Данный почтовый сервис использовать нельзя.';
}
return $error ?? '';
}
public function hasGoodEmailCode(string $email, int $code): string
{
$check = Db::getValue('select code from secure_code where email = ?', [$email]);
if ($code !== $check) {
return 'Неверный проверочный код.';
}
return '';
}
public function hasGoodPassword(string $password1, string $password2): string
{
if ($password1 !== $password2) {
$error = 'Пароли не совпадают';
}
if (strlen($password1 < 8)) {
$error = 'Пароль должен быть больше 8 символов';
$error .= 'Можете использовать сгенерированный пароль: ' . PassGen::new();
}
return $error ?? '';
}
public static function new(string $login, string $password, string $email, $ref, $birthday, $sex): string
{
$password = password_hash($password, PASSWORD_DEFAULT);
$ip = UserIp::get();
$sex = (int)$sex - 10; //На входе 10\11, а передать надо 0\1.
Db::sql(
'insert into users (users.real,login,host_reg,pass,ip,ipreg,room,timereg,mail,bithday,sex,fnq,molch2,level,hobby,clan_zv) values (1,?,?,?,?,?,9,unix_timestamp(),?,?,?,0,unix_timestamp() + 86400,8,\'\',0)',
[
$login,
$ref ?? '',
$password,
$ip,
$ip,
$email,
date('d.m.Y', strtotime($birthday)),
$sex,
]
);
return Db::lastInsertId();
}
}