Files
game/_incl_data/class/UserRegister.php
T

120 lines
4.2 KiB
PHP
Raw Normal View History

<?php
2022-12-30 21:03:37 +02:00
use Core\Db;
class UserRegister
{
2022-12-30 21:03:37 +02:00
public function hasMixedLatCur(string $txt): bool
{
2022-12-30 21:03:37 +02:00
$en = preg_match("/^(([0-9A-z -])+)$/i", $txt);
$ru = preg_match("/^(([0-9À-ÿ _-])+)$/i", $txt);
return ($ru && $en) || (!$ru && !$en);
}
public function hasGoodLogin(string $login): string
{
$isRestricted = in_array(
$login,
[
'àíãåë', 'angel', 'àäìèíèñòðàöèÿ', 'administration', 'Êîììåíòàòîð',
'Ìèðîçäàòåëü', 'Ìóñîðùèê', 'Ïàäàëüùèê', 'Ïîâåëèòåëü',
'Àðõèâàðèóñ', 'Ïåðåñìåøíèê', 'Âîëûíùèê', 'Ëîðä Ðàçðóøèòåëü',
'Ìèëîñåðäèå', 'Ñïðàâåäëèâîñòü', 'Èñêóøåíèå', 'Âîçíåñåíèå',
]
);
$isRegistered = Db::getValue('select count(*) from users where login = ?', [$login]);
//Áûâøèå â óïîòðåáëåíèè ëîãèíû. Äè÷ü, íî ëàäíî.
$wasRegistered = Db::getValue('select count(*) from lastnames where login = ?', [$login]);
$login = str_replace(' ', ' ', $login);
//Ëîãèí îò 4 äî 20 ñèìâîëîâ
if (strlen($login) > 20) {
$error = 'Ëîãèí äîëæåí ñîäåðæàòü íå áîëåå 20 ñèìâîëîâ.';
}
if (strlen($login) < 4) {
$error = 'Ëîãèí äîëæåí ñîäåðæàòü íå ìåíåå 4 ñèìâîëîâ.';
}
if ($this->hasMixedLatCur($login)) {
$error = 'Â ëîãèíå ðàçðåøåíî èñïîëüçîâàòü òîëüêî áóêâû îäíîãî àëôàâèòà ðóññêîãî èëè àíãëèéñêîãî. Íåëüçÿ ñìåøèâàòü.';
}
2022-12-30 21:03:37 +02:00
//Ðàçäåëèòåëè
if (substr_count($login, ' ') + substr_count($login, '-') + substr_count($login, '_') > 2) {
$error = 'Íå áîëåå äâóõ ðàçäåëèòåëåé îäíîâðåìåííî (ïðîáåë, òèðå, íèæíåå ïîä÷åðêèâàíèå).';
}
2022-12-30 21:03:37 +02:00
if (!empty($error)) {
$error .= '<br> Ïðèìåð ïðàâèëüíîãî íèêíåéìà: Ïåòÿ Óáèâàòîð, Êîëÿ, xalop. <br> Ïðèìåð íåïðàâèëüíîãî íèêíåéìà: )))), kolÿ)=-/.';
}
if ($isRegistered || $wasRegistered || $isRestricted) {
$error = 'Ëîãèí ' . $login . ' óæå çàíÿò, âûáåðèòå äðóãîé.';
}
return $error ?? '';
}
2022-12-30 21:03:37 +02:00
public function hasGoodEmail(string $email): string
{
2022-12-30 21:03:37 +02:00
$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 '';
}
2022-12-30 21:03:37 +02:00
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.
2022-12-30 21:03:37 +02:00
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)',
2022-12-30 21:03:37 +02:00
[
$login,
2023-01-06 21:26:10 +02:00
$ref ?? '',
$password,
$ip,
$ip,
2022-12-30 21:03:37 +02:00
$email,
date('d.m.Y', strtotime($birthday)),
$sex,
2022-12-30 21:03:37 +02:00
]
);
return Db::lastInsertId();
}
}