public function createUser(RegistrationForm $form) { $transaction = Yii::app()->db->beginTransaction(); try { $user = new User(); $data = $form->getAttributes(); unset($data['cPassword'], $data['verifyCode']); $user->setAttributes($data); $user->hash = $this->hasher->hashPassword($form->password); if ($user->save() && ($token = $this->tokenStorage->createAccountActivationToken($user)) !== false) { Yii::app()->eventManager->fire(UserEvents::SUCCESS_REGISTRATION, new UserRegistrationEvent($form, $user)); Yii::log(Yii::t('UserModule.user', 'Account {nick_name} was created', array('{nick_name}' => $user->nick_name)), CLogger::LEVEL_INFO, UserModule::$logCategory); //@TODO Отправка почты при создании пользователя Yii::app()->notify->send($user, Yii::t('UserModule.user', 'Registration on {site}', array('{site}' => Yii::app()->getModule('yupe')->siteName)), '//user/email/needAccountActivationEmail', array('token' => $token)); $transaction->commit(); return $user; } throw new CException(Yii::t('UserModule.user', 'Error creating account!')); } catch (Exception $e) { Yii::log(Yii::t('UserModule.user', 'Error {error} account creating!', array('{error}' => $e->__toString())), CLogger::LEVEL_INFO, UserModule::$logCategory); $transaction->rollback(); Yii::app()->eventManager->fire(UserEvents::FAILURE_REGISTRATION, new UserRegistrationEvent($form, $user)); return false; } }
public function createUser(RegistrationForm $form, Profile $profile) { $transaction = Yii::app()->db->beginTransaction(); try { $user = new User('registration'); $data = $form->getAttributes(); unset($data['cPassword'], $data['verifyCode']); $user->setAttributes($data); $user->hash = $this->hasher->hashPassword($form->password); $user->role = User::USER_ROLE; if ($user->save() && ($token = $this->tokenStorage->createAccountActivationToken($user)) !== false) { $profile->user_id = $user->id; if (!$profile->save()) { throw new CException(Yii::t('UserModule.user', 'Error creating profile!')); } Yii::log(Yii::t('UserModule.user', 'Account {nick_name} was created', array('{nick_name}' => $user->email)), CLogger::LEVEL_INFO, UserModule::$logCategory); //@TODO Yii::app()->notify->send($user, Yii::t('UserModule.user', 'Registration on {site}', array('{site}' => Yii::app()->getModule('yupe')->siteName)), '//user/email/needAccountActivationEmail', array('token' => $token)); Yii::app()->notify->sendAdmin('Новый пользователь на сайте ' . CHtml::encode(Yii::app()->getModule('yupe')->siteName), '//user/email/newUserEmail', array('user' => $user)); $transaction->commit(); return $user; } throw new CException(Yii::t('UserModule.user', 'Error creating account!')); } catch (Exception $e) { Yii::log(Yii::t('UserModule.user', 'Error {error} account creating!', array('{error}' => $e->__toString())), CLogger::LEVEL_INFO, UserModule::$logCategory); $transaction->rollback(); return false; } }
public function createUser(RegistrationForm $form) { $transaction = Yii::app()->db->beginTransaction(); try { $user = new User('registration'); $profile = new Profile('registration'); $data = $form->getAttributes(); // Устанавливаем атрибуты пользователя $user->setAttributes(array('email' => $data['email'])); // Генерируем для пользователя новый пароль $password = $this->hasher->generateRandomPassword(); $user->hash = $this->hasher->hashPassword($password); // Устанавливаем роль пользователя $user->role = User::USER_ROLE; $profile->setAttributes(array('name' => $data['name'], 'gender' => $data['gender'], 'birth_date' => $data['date'], 'birth_time' => $form->getTime(), 'city_id' => $data['city_id'])); $profile->subscriber = Profile::SUBSCRIBER_YES; if ($user->save() && ($token = $this->tokenStorage->createAccountActivationToken($user)) !== false) { $profile->user_id = $user->id; if (!$profile->save()) { throw new CException(Yii::t('UserModule.user', 'Error creating profile!')); } $event = new CEvent($this, array('user' => $user, 'password' => $password, 'token' => $token, 'programId' => $data['programId'], 'subscriptionType' => $data['subscriptionType'])); $this->onSuccessRegistration($event); Yii::log(Yii::t('UserModule.user', 'Account {nick_name} was created', array('{nick_name}' => $user->email)), CLogger::LEVEL_INFO, UserModule::$logCategory); $transaction->commit(); return $user; } throw new CException(Yii::t('UserModule.user', 'Error creating account!')); } catch (Exception $e) { Yii::log(Yii::t('UserModule.user', 'Error {error} account creating!', array('{error}' => $e->__toString())), CLogger::LEVEL_INFO, UserModule::$logCategory); $transaction->rollback(); return false; } }
public function createUser(RegistrationForm $form) { $transaction = Yii::app()->getDb()->beginTransaction(); try { $user = new User(); $userData = $form->getAttributes(); foreach (['cPassword', 'password', 'verifyCode', 'disableCaptcha'] as $attribute) { unset($userData[$attribute]); } $user->setAttributes($userData); $user->setAttribute('hash', $this->hasher->hashPassword($form->password)); if ($user->save() && ($token = $this->tokenStorage->createAccountActivationToken($user)) !== false) { Yii::app()->eventManager->fire(UserEvents::SUCCESS_REGISTRATION, new UserRegistrationEvent($form, $user, $token)); Yii::log(Yii::t('UserModule.user', 'Account {nick_name} was created', ['{nick_name}' => $user->nick_name]), CLogger::LEVEL_INFO, UserModule::$logCategory); $transaction->commit(); return $user; } throw new CException(Yii::t('UserModule.user', 'Error creating account!')); } catch (Exception $e) { Yii::log(Yii::t('UserModule.user', 'Error {error} account creating!', ['{error}' => $e->__toString()]), CLogger::LEVEL_INFO, UserModule::$logCategory); $transaction->rollback(); Yii::app()->eventManager->fire(UserEvents::FAILURE_REGISTRATION, new UserRegistrationEvent($form, $user)); return false; } }
public function run() { $form = new RegistrationForm(); if (Yii::app()->request->isPostRequest && !empty($_POST['RegistrationForm'])) { $module = Yii::app()->getModule('user'); $form->setAttributes($_POST['RegistrationForm']); // проверка по "черным спискам" // проверить на email if (!$module->isAllowedEmail($form->email)) { // перенаправить на экшн для фиксации невалидных email-адресов $this->controller->redirect(array(Yii::app()->getModule('user')->invalidEmailAction)); } if (!$module->isAllowedIp(Yii::app()->request->userHostAddress)) { // перенаправить на экшн для фиксации невалидных ip-адресов $this->controller->redirect(array(Yii::app()->getModule('user')->invalidIpAction)); } if ($form->validate()) { // если требуется активация по email if ($module->emailAccountVerification) { $registration = new Registration(); // скопируем данные формы $registration->setAttributes($form->getAttributes()); if ($registration->save()) { // отправка email с просьбой активировать аккаунт $mailBody = $this->controller->renderPartial('application.modules.user.views.email.needAccountActivationEmail', array('model' => $registration), true); Yii::app()->mail->send($module->notifyEmailFrom, $registration->email, Yii::t('user', 'Регистрация на сайте {site} !', array('{site}' => Yii::app()->name)), $mailBody); // запись в лог о создании учетной записи Yii::log(Yii::t('user', "Создана учетная запись {nick_name}!", array('{nick_name}' => $registration->nick_name)), CLogger::LEVEL_INFO, UserModule::$logCategory); Yii::app()->user->setFlash(YFlashMessages::NOTICE_MESSAGE, Yii::t('user', 'Учетная запись создана! Инструкции по активации аккаунта отправлены Вам на email!')); $this->controller->refresh(); } else { $form->addErrors($registration->getErrors()); Yii::log(Yii::t('user', "Ошибка при создании учетной записи!"), CLogger::LEVEL_ERROR, UserModule::$logCategory); } } else { // если активации не требуется - сразу создаем аккаунт $user = new User(); $user->createAccount($form->nick_name, $form->email, $form->password); if ($user && !$user->hasErrors()) { Yii::log(Yii::t('user', "Создана учетная запись {nick_name} без активации!", array('{nick_name}' => $user->nick_name)), CLogger::LEVEL_INFO, UserModule::$logCategory); // отправить email с сообщением о успешной регистрации $emailBody = $this->controller->renderPartial('application.modules.user.views.email.accountCreatedEmail', array('model' => $user), true); Yii::app()->mail->send($module->notifyEmailFrom, $user->email, Yii::t('user', 'Регистрация на сайте {site} !', array('{site}' => Yii::app()->name)), $emailBody); Yii::app()->user->setFlash(YFlashMessages::NOTICE_MESSAGE, Yii::t('user', 'Учетная запись создана! Пожалуйста, авторизуйтесь!')); $this->controller->redirect(array('/user/account/login/')); } else { $form->addErrors($user->getErrors()); Yii::log(Yii::t('user', "Ошибка при создании учетной записи без активации!"), CLogger::LEVEL_ERROR, UserModule::$logCategory); } } } } $this->controller->render('registration', array('model' => $form)); }
public function createUser(RegistrationForm $form) { $transaction = Yii::app()->db->beginTransaction(); try { $user = new User(); $data = $form->getAttributes(); $user->setAttributes($data, false); $user->password = $this->hasher->hashPassword($form->password); $user->session = Yii::app()->session->sessionID; $user->md5 = md5(time()); $user->registerDate = date('Y-m-d', time()); if ($user->save()) { if ($this->stateStorage->create($user, $form)) { $transaction->commit(); return $user; } } throw new CException(Yii::t('UserModule.user', 'Error creating account!')); } catch (Exception $e) { $transaction->rollback(); return false; } }