EngineGP/system/sections/user/signup.php
Sergey ee61ff490d Minor fixes
Convert to spaces
Fixer array
2023-03-05 16:37:46 +03:00

217 lines
No EOL
8.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
if(!DEFINED('EGP'))
exit(header('Refresh: 0; URL=http://'.$_SERVER['SERVER_NAME'].'/404'));
// Проверка на авторизацию
sys::auth();
// Генерация новой капчи
if(isset($url['captcha']))
sys::captcha('signup', $uip);
$aData = array();
// Сбор данных из $_POST в $aData
if(isset($_POST['mail']))
{
foreach($aSignup['input'] as $name => $add)
{
if(!$add)
continue;
$aData[$name] = isset($_POST[$name]) ? trim($_POST[$name]) : '';
}
}
// Регистрация
if($go)
{
$nmch = 'go_signup_'.$uip;
if($mcache->get($nmch))
sys::outjs(array('e' => sys::text('other', 'mcache')), $nmch);
$mcache->set($nmch, 1, false, 15);
// Проверка капчи
if(!isset($_POST['captcha']) || sys::captcha_check('signup', $uip, $_POST['captcha']))
sys::outjs(array('e' => sys::text('other', 'captcha')), $nmch);
// Проверка входных данных
foreach($aData as $input => $val)
{
// Если не заполнено поле
if($val == '')
sys::outjs(array('e' => sys::text('input', 'all')), $nmch);
// Проверка данных на валидность
if(sys::valid($val, 'other', $aValid[$input]))
sys::outjs(array('e' => sys::text('input', $input.'_valid')), $nmch);
}
// Проверка логина на занятость
if(isset($aData['login']))
{
$sql->query('SELECT `id` FROM `users` WHERE `login`="'.$aData['login'].'" LIMIT 1');
if($sql->num())
sys::outjs(array('e' => sys::text('input', 'login_use')), $nmch);
}
if(!isset($aData['mail']))
sys::outjs(array('e' => sys::text('input', 'mail_valid')), $nmch);
// Проверка почты на занятость
$sql->query('SELECT `id` FROM `users` WHERE `mail`="'.$aData['mail'].'" LIMIT 1');
if($sql->num())
sys::outjs(array('e' => sys::text('input', 'mail_use')), $nmch);
// Проверка телефона на занятость
if(isset($aData['phone']))
{
$sql->query('SELECT `id` FROM `users` WHERE `phone`="'.$aData['phone'].'" LIMIT 1');
if($sql->num())
sys::outjs(array('e' => sys::text('input', 'phone_use')), $nmch);
}
// Проверка контактов на занятость
if(isset($aData['contacts']))
{
$sql->query('SELECT `id` FROM `users` WHERE `contacts`="'.$aData['contacts'].'" LIMIT 1');
if($sql->num())
sys::outjs(array('e' => sys::text('input', 'use_contacts')), $nmch);
}
// Проверка почты на подачу регистрации
$sql->query('SELECT `id`, `key` FROM `signup` WHERE `mail`="'.$aData['mail'].'" LIMIT 1');
if($sql->num())
{
$signup = $sql->get();
$sql->query('UPDATE `signup` set `date`="'.$start_point.'" WHERE `id`="'.$signup['id'].'" LIMIT 1');
// Повторная отправка письма на почту
sys::mail(
'Регистрация',
sys::updtext(
sys::text('mail', 'signup'),
array(
'site' => $cfg['name'],
'url' => $cfg['http'].'user/section/signup/confirm/'.$signup['key']
)
),
$aData['mail']
);
sys::outjs(array('s' => sys::text('output', 'remail'), 'mail' => sys::mail_domain($aData['mail'])), $nmch);
}
// Генерация ключа
$key = sys::key('signup_'.$uip);
$data = sys::b64js($aData);
// Запись данных в базу
$sql->query('INSERT INTO `signup` set `mail`="'.$aData['mail'].'", `key`="'.$key.'", `data`="'.$data.'", `date`="'.$start_point.'"');
// Отправка сообщения на почту
if(sys::mail('Регистрация', sys::updtext(sys::text('mail', 'signup'), array('site' => $cfg['name'], 'url' => $cfg['http'].'user/section/signup/confirm/'.$key)), $aData['mail']))
sys::outjs(array('s' => sys::text('output', 'mail'), 'mail' => sys::mail_domain($aData['mail'])), $nmch);
// Выхлоп: не удалось отправить письмо
sys::outjs(array('e' => sys::text('error', 'mail')), $nmch);
}
// Завершение регистрации
if(isset($url['confirm']) && !sys::valid($url['confirm'], 'md5'))
{
$sql->query('SELECT `id`, `data` FROM `signup` WHERE `key`="'.$url['confirm'].'" LIMIT 1');
if($sql->num())
{
$signup = $sql->get();
$aData = sys::b64djs($signup['data']);
foreach($aSignup['input'] as $name => $add)
$aNData[$name] = isset($aData[$name]) ? $aData[$name] : '';
unset($aData);
// Если регистрация без указания логина
if(empty($aNData['login']))
{
$lchar = false;
while(1)
{
$aNData['login'] = sys::login($aNData['mail'], $lchar);
$sql->query('SELECT `id` FROM `users` WHERE `login`="'.$aNData['login'].'" LIMIT 1');
if(!$sql->num())
break;
$lchar = true;
}
}
// Если регистрация без указания пароля
if(empty($aNData['passwd']))
$aNData['passwd'] = sys::passwd(10);
// Реферал
if(isset($_COOKIE['part']))
$part = ', `part`="'.sys::int($_COOKIE['part']).'"';
// Запись данных в базу
$sql->query('INSERT INTO `users` set '
.'`login`="'.$aNData['login'].'",'
.'`passwd`="'.sys::passwdkey($aNData['passwd']).'",'
.'`mail`="'.$aNData['mail'].'",'
.'`name`="'.$aNData['name'].'",'
.'`lastname`="'.$aNData['lastname'].'",'
.'`patronymic`="'.$aNData['patronymic'].'",'
.'`phone`="'.$aNData['phone'].'",'
.'`contacts`="'.$aNData['contacts'].'",'
.'`balance`="0", `group`="user", `date`="'.$start_point.'"'.$part);
$sql->query('DELETE FROM `signup` WHERE `id`="'.$signup['id'].'" LIMIT 1');
// Отправка сообщения на почту
if(sys::mail('Завершение регистрации', sys::updtext(sys::text('mail', 'signup_end'), array('site' => $cfg['name'], 'login' => $aNData['login'], 'passwd' => $aNData['passwd'])), $aNData['mail']))
sys::outhtml(sys::text('output', 'signup'), 5, 'http://'.sys::mail_domain($aNData['mail']));
// Выхлоп: не удалось отправить письмо
sys::outjs(array('e' => sys::text('error', 'mail')), $nmch);
}
sys::outhtml(sys::text('error', 'signup'), 5);
}
// Генерация формы
foreach($aSignup['input'] as $name => $add)
{
if(!$add)
continue;
$html->get('signup', 'sections/user/inputs');
$html->set('name', $name);
$html->set('info', $aSignup['info'][$name]);
$html->set('type', $aSignup['type'][$name]);
$html->set('placeholder', $aSignup['placeholder'][$name]);
$html->pack('inputs');
}
$html->get('signup', 'sections/user');
$inputsjs = '';
foreach($aSignup['input'] as $name => $add)
{
if(!$add)
continue;
$inputsjs .= '"'.$name.'",';
}
$html->set('inputs', $html->arr['inputs'], true);
$html->set('inputsjs', $inputsjs);
$html->pack('main');
?>