1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-07-05 16:04:24 +03:00
ifhub.club/classes/actions/ActionRegistration.class.php

354 lines
11 KiB
PHP
Raw Normal View History

<?php
2008-09-21 09:36:57 +03:00
/*-------------------------------------------------------
*
* LiveStreet Engine Social Networking
* Copyright © 2008 Mzhelskiy Maxim
*
*--------------------------------------------------------
*
* Official site: www.livestreet.ru
* Contact e-mail: rus.engine@gmail.com
*
* GNU General Public License, version 2:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
---------------------------------------------------------
*/
/**
* Экшен обработки регистрации
2008-09-21 09:36:57 +03:00
*
* @package actions
* @since 1.0
2008-09-21 09:36:57 +03:00
*/
class ActionRegistration extends Action {
/**
* Инициализация
*
*/
public function Init() {
/**
* Проверяем аторизован ли юзер
*/
if ($this->User_IsAuthorization()) {
2009-04-11 14:50:42 +03:00
$this->Message_AddErrorSingle($this->Lang_Get('registration_is_authorization'),$this->Lang_Get('attention'));
return Router::Action('error');
2008-09-21 09:36:57 +03:00
}
/**
* Если включены инвайты то перенаправляем на страницу регистрации по инвайтам
*/
if (!$this->User_IsAuthorization() and Config::Get('general.reg.invite') and !in_array(Router::GetActionEvent(),array('invite','activate','confirm')) and !$this->CheckInviteRegister()) {
return Router::Action('registration','invite');
}
2008-09-21 09:36:57 +03:00
$this->SetDefaultEvent('index');
/**
* Устанавливаем title страницы
*/
2009-04-11 14:50:42 +03:00
$this->Viewer_AddHtmlTitle($this->Lang_Get('registration'));
2008-09-21 09:36:57 +03:00
}
/**
* Регистрируем евенты
*
*/
protected function RegisterEvent() {
$this->AddEvent('index','EventIndex');
2008-09-21 09:36:57 +03:00
$this->AddEvent('confirm','EventConfirm');
$this->AddEvent('activate','EventActivate');
$this->AddEvent('invite','EventInvite');
$this->AddEvent('ajax-validate-fields','EventAjaxValidateFields');
$this->AddEvent('ajax-registration','EventAjaxRegistration');
2008-09-21 09:36:57 +03:00
}
2008-09-21 09:36:57 +03:00
/**********************************************************************************
************************ РЕАЛИЗАЦИЯ ЭКШЕНА ***************************************
**********************************************************************************
*/
/**
* Ajax валидация форму регистрации
*/
protected function EventAjaxValidateFields() {
/**
* Устанавливаем формат Ajax ответа
*/
$this->Viewer_SetResponseAjax('json');
/**
* Создаем объект пользователя и устанавливаем сценарий валидации
*/
$oUser=Engine::GetEntity('ModuleUser_EntityUser');
$oUser->_setValidateScenario('registration');
/**
* Пробегаем по переданным полям/значениям и валидируем их каждое в отдельности
*/
$aFields=getRequest('fields');
if (is_array($aFields)) {
foreach($aFields as $aField) {
if (isset($aField['field']) and isset($aField['value'])) {
$this->Hook_Run('registration_validate_field', array('aField'=>&$aField));
$sField=$aField['field'];
$sValue=$aField['value'];
/**
* Список полей для валидации
*/
switch($sField){
case 'login':
$oUser->setLogin($sValue);
break;
case 'mail':
$oUser->setMail($sValue);
break;
case 'captcha':
$oUser->setCaptcha($sValue);
break;
case 'password':
$oUser->setPassword($sValue);
break;
case 'password_confirm':
$oUser->setPasswordConfirm($sValue);
$oUser->setPassword(isset($aField['params']['password']) ? $aField['params']['password'] : null);
break;
default:
continue;
break;
}
/**
* Валидируем поле
*/
$oUser->_Validate(array($sField),false);
}
}
}
/**
* Возникли ошибки?
*/
if ($oUser->_hasValidateErrors()) {
/**
* Получаем ошибки
*/
$this->Viewer_AssignAjax('aErrors',$oUser->_getValidateErrors());
}
}
2008-09-21 09:36:57 +03:00
/**
* Обработка Ajax регистрации
2008-09-21 09:36:57 +03:00
*/
protected function EventAjaxRegistration() {
/**
* Устанавливаем формат Ajax ответа
*/
$this->Viewer_SetResponseAjax('json');
/**
* Создаем объект пользователя и устанавливаем сценарий валидации
*/
$oUser=Engine::GetEntity('ModuleUser_EntityUser');
$oUser->_setValidateScenario('registration');
/**
* Заполняем поля (данные)
*/
$oUser->setLogin(getRequest('login'));
$oUser->setMail(getRequest('mail'));
$oUser->setPassword(getRequest('password'));
$oUser->setPasswordConfirm(getRequest('password_confirm'));
$oUser->setCaptcha(getRequest('captcha'));
$oUser->setDateRegister(date("Y-m-d H:i:s"));
$oUser->setIpRegister(func_getIp());
2008-09-21 09:36:57 +03:00
/**
* Если используется активация, то генерим код активации
2008-09-21 09:36:57 +03:00
*/
if (Config::Get('general.reg.activation')) {
$oUser->setActivate(0);
$oUser->setActivateKey(md5(func_generator().time()));
} else {
$oUser->setActivate(1);
$oUser->setActivateKey(null);
}
$this->Hook_Run('registration_validate_before', array('oUser'=>$oUser));
/**
* Запускаем валидацию
*/
if ($oUser->_Validate()) {
$this->Hook_Run('registration_validate_after', array('oUser'=>$oUser));
$oUser->setPassword(md5($oUser->getPassword()));
if ($this->User_Add($oUser)) {
$this->Hook_Run('registration_after', array('oUser'=>$oUser));
2011-08-22 16:03:19 +03:00
/**
* Убиваем каптчу
2011-08-22 16:03:19 +03:00
*/
unset($_SESSION['captcha_keystring']);
2011-08-22 16:03:19 +03:00
/**
* Подписываем пользователя на дефолтные события в ленте активности
2011-08-22 16:03:19 +03:00
*/
$this->Stream_switchUserEventDefaultTypes($oUser->getId());
2008-09-21 09:36:57 +03:00
/**
* Если юзер зарегистрировался по приглашению то обновляем инвайт
2008-09-21 09:36:57 +03:00
*/
if (Config::Get('general.reg.invite') and $oInvite=$this->User_GetInviteByCode($this->GetInviteRegister())) {
$oInvite->setUserToId($oUser->getId());
$oInvite->setDateUsed(date("Y-m-d H:i:s"));
$oInvite->setUsed(1);
$this->User_UpdateInvite($oInvite);
}
2008-09-21 09:36:57 +03:00
/**
* Если стоит регистрация с активацией то проводим её
2008-09-21 09:36:57 +03:00
*/
if (Config::Get('general.reg.activation')) {
2008-09-21 09:36:57 +03:00
/**
* Отправляем на мыло письмо о подтверждении регистрации
2008-09-21 09:36:57 +03:00
*/
$this->Notify_SendRegistrationActivate($oUser,getRequest('password'));
$this->Viewer_AssignAjax('sUrlRedirect',Router::GetPath('registration').'confirm/');
2008-09-21 09:36:57 +03:00
} else {
$this->Notify_SendRegistration($oUser,getRequest('password'));
$oUser=$this->User_GetUserById($oUser->getId());
/**
* Сразу авторизуем
*/
$this->User_Authorization($oUser,false);
$this->DropInviteRegister();
/**
* Определяем URL для редиректа после авторизации
*/
$sUrl=Config::Get('module.user.redirect_after_registration');
2012-04-05 11:52:13 +03:00
if (getRequest('return-path')) {
$sUrl=getRequest('return-path');
}
$this->Viewer_AssignAjax('sUrlRedirect',$sUrl ? $sUrl : Config::Get('path.root.web'));
$this->Message_AddNoticeSingle($this->Lang_Get('registration_ok'));
2008-09-21 09:36:57 +03:00
}
} else {
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
return;
2008-09-21 09:36:57 +03:00
}
} else {
/**
* Получаем ошибки
*/
$this->Viewer_AssignAjax('aErrors',$oUser->_getValidateErrors());
2008-09-21 09:36:57 +03:00
}
}
/**
* Показывает страничку регистрации
* Просто вывод шаблона
*/
protected function EventIndex() {
}
2008-09-21 09:36:57 +03:00
/**
* Обрабатывает активацию аккаунта
*/
protected function EventActivate() {
2008-09-21 09:36:57 +03:00
$bError=false;
/**
* Проверяет передан ли код активации
*/
$sActivateKey=$this->GetParam(0);
if (!func_check($sActivateKey,'md5')) {
2008-09-21 09:36:57 +03:00
$bError=true;
}
2008-09-21 09:36:57 +03:00
/**
* Проверяет верный ли код активации
*/
if (!($oUser=$this->User_GetUserByActivateKey($sActivateKey))) {
$bError=true;
}
/**
*
*/
if ($oUser and $oUser->getActivate()) {
2009-04-11 14:50:42 +03:00
$this->Message_AddErrorSingle($this->Lang_Get('registration_activate_error_reactivate'),$this->Lang_Get('error'));
return Router::Action('error');
}
2008-09-21 09:36:57 +03:00
/**
* Если что то не то
*/
if ($bError) {
2009-04-11 14:50:42 +03:00
$this->Message_AddErrorSingle($this->Lang_Get('registration_activate_error_code'),$this->Lang_Get('error'));
2008-09-21 09:36:57 +03:00
return Router::Action('error');
}
/**
* Активируем
*/
$oUser->setActivate(1);
$oUser->setDateActivate(date("Y-m-d H:i:s"));
/**
* Сохраняем юзера
*/
if ($this->User_Update($oUser)) {
$this->DropInviteRegister();
$this->Viewer_Assign('bRefreshToHome',true);
$this->User_Authorization($oUser,false);
2008-09-21 09:36:57 +03:00
return;
} else {
2009-04-11 14:50:42 +03:00
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
2008-09-21 09:36:57 +03:00
return Router::Action('error');
}
}
/**
* Обработка кода приглашения при включеном режиме инвайтов
*
*/
protected function EventInvite() {
if (!Config::Get('general.reg.invite')) {
2009-04-11 14:50:42 +03:00
return parent::EventNotFound();
}
/**
* Обработка отправки формы с кодом приглашения
*/
if (isPost('submit_invite')) {
/**
* проверяем код приглашения на валидность
*/
if ($this->CheckInviteRegister()) {
$sInviteId=$this->GetInviteRegister();
} else {
$sInviteId=getRequest('invite_code');
}
$oInvate=$this->User_GetInviteByCode($sInviteId);
if ($oInvate) {
if (!$this->CheckInviteRegister()) {
$this->Session_Set('invite_code',$oInvate->getCode());
}
return Router::Action('registration');
} else {
$this->Message_AddError($this->Lang_Get('registration_invite_code_error'),$this->Lang_Get('error'));
}
}
}
/**
* Пытается ли юзер зарегистрироваться с помощью кода приглашения
*
* @return bool
*/
2010-02-06 14:47:19 +02:00
protected function CheckInviteRegister() {
if ($this->Session_Get('invite_code')) {
return true;
}
return false;
}
/**
* Вожвращает код приглашения из сессии
*
* @return string
*/
protected function GetInviteRegister() {
return $this->Session_Get('invite_code');
}
/**
* Удаляет код приглашения из сессии
*/
protected function DropInviteRegister() {
if (Config::Get('general.reg.invite')) {
$this->Session_Drop('invite_code');
}
}
2008-09-21 09:36:57 +03:00
/**
* Просто выводит шаблон для подтверждения регистрации
2008-09-21 09:36:57 +03:00
*
*/
protected function EventConfirm() {
2008-09-21 09:36:57 +03:00
}
}
?>