2022-08-25 14:23:36 +03:00
|
|
|
<?php
|
|
|
|
|
|
2022-12-30 21:03:37 +02:00
|
|
|
use Core\Db;
|
|
|
|
|
|
2022-08-25 14:23:36 +03:00
|
|
|
class UserRegister
|
|
|
|
|
{
|
|
|
|
|
|
2022-12-30 21:03:37 +02:00
|
|
|
public function hasMixedLatCur(string $txt): bool
|
2022-08-25 14:23:36 +03:00
|
|
|
{
|
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-08-25 14:23:36 +03:00
|
|
|
}
|
2022-12-30 21:03:37 +02:00
|
|
|
//Ðàçäåëèòåëè
|
|
|
|
|
if (substr_count($login, ' ') + substr_count($login, '-') + substr_count($login, '_') > 2) {
|
|
|
|
|
$error = 'Íå áîëåå äâóõ ðàçäåëèòåëåé îäíîâðåìåííî (ïðîáåë, òèðå, íèæíåå ïîä÷åðêèâàíèå).';
|
2022-08-25 14:23:36 +03:00
|
|
|
}
|
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-08-25 14:23:36 +03:00
|
|
|
}
|
|
|
|
|
|
2022-12-30 21:03:37 +02:00
|
|
|
public function hasGoodEmail(string $email): string
|
2022-08-25 14:23:36 +03:00
|
|
|
{
|
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-08-25 14:23:36 +03:00
|
|
|
}
|
|
|
|
|
|
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
|
|
|
|
|
{
|
2023-01-06 16:57:25 +02:00
|
|
|
$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(
|
2023-01-06 16:57:25 +02:00
|
|
|
'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 ?? '',
|
2023-01-06 16:57:25 +02:00
|
|
|
$password,
|
|
|
|
|
$ip,
|
|
|
|
|
$ip,
|
2022-12-30 21:03:37 +02:00
|
|
|
$email,
|
|
|
|
|
date('d.m.Y', strtotime($birthday)),
|
2023-01-06 16:57:25 +02:00
|
|
|
$sex,
|
2022-12-30 21:03:37 +02:00
|
|
|
]
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return Db::lastInsertId();
|
|
|
|
|
}
|
2022-08-25 14:23:36 +03:00
|
|
|
}
|