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)); }
protected function returnOrRenderView(User $model, $view) { if ($this->isAjax()) { // Flatten errors $errors = array(); foreach ($model->getErrors() as $attribute => $att_errors) { $errors = array_merge($errors, $att_errors); } echo CJSON::encode(array('result' => -1, 'message' => $model->hasErrors() ? $errors[0] : "No data")); Yii::app()->end(); } else { $this->getController()->render($view, array('model' => $model)); } }
public static function run() { if ($_SERVER["REQUEST_METHOD"] == "POST") { $user = new User($_POST); if ($user->hasErrors()) { SignUpView::show($user); } else { if (UserDatabase::createUser($user)) { echo "Account Created :)<br/>"; header("Location: home"); } else { $user->setError("database", "CREATE_ACCOUNT_FAILED"); SignUpView::show($user); } } } else { SignUpView::show(null); } }
public function testValidation() { $user = new User(); $user->password = '******'; $this->assertFalse($user->hasErrors()); $this->assertEquals(array(), $user->errors); $this->assertEquals(array(), $user->getErrors('username')); $this->assertFalse($user->save()); $this->assertNull($user->id); $this->assertTrue($user->isNewRecord); $this->assertTrue($user->hasErrors()); $this->assertTrue($user->hasErrors('username')); $this->assertTrue($user->hasErrors('email')); $this->assertFalse($user->hasErrors('password')); $this->assertEquals(1, count($user->getErrors('username'))); $this->assertEquals(1, count($user->getErrors('email'))); $this->assertEquals(2, count($user->errors)); $user->clearErrors(); $this->assertFalse($user->hasErrors()); $this->assertEquals(array(), $user->errors); }
public function testSpecificValidateFilter() { $u = new User(); $u->email = "sammy"; $u->save(array('validate_method' => 'emailValidate')); $this->assertTrue($u->hasErrors()); }
public function testUserAliasUnique() { $admin = $this->users('admin'); // can't set username to someone else's username $admin->userAlias = $this->users('testUser')->username; $admin->validate(array('userAlias')); $this->assertTrue($admin->hasErrors('userAlias')); $newUser = new User(); // can't set username to someone else's user alias $newUser->username = $this->users('testUser')->userAlias; $newUser->validate(array('username')); $this->assertTrue($newUser->hasErrors('username')); // ensure that user can have alias which matches their own username $newUser = new User(); $newUser->username = '******'; $newUser->userAlias = 'username'; $newUser->validate(array('username')); $newUser->validate(array('userAlias')); $this->assertFalse($newUser->hasErrors('username')); if ($newUser->hasErrors()) { X2_TEST_DEBUG_LEVEL > 1 && print_r($newUser->getErrors()); } }
public function actionRegistration() { $id = Yii::app()->user->getState('sid'); $name = Yii::app()->user->getState('name'); $service = Yii::app()->user->getState('service'); if (!isset($id, $name, $service)) { Yii::app()->user->setFlash(YFlashMessages::ERROR_MESSAGE, Yii::t('social', 'При авторизации произошла ошибка!')); $this->redirect(array('/user/account/login')); } $model = new User(); if (Yii::app()->request->isPostRequest && !empty($_POST['User'])) { $nick_name = $_POST['User']['nick_name']; $transaction = Yii::app()->db->beginTransaction(); try { $model->createAccount($nick_name, "{$nick_name}@{$nick_name}.ru", null, null, User::STATUS_ACTIVE); if ($model && !$model->hasErrors()) { //создадим запись в Login $login = new Login(); $login->setAttributes(array('user_id' => $model->id, 'identity_id' => Yii::app()->user->getState('sid'), 'type' => Yii::app()->user->getState('service'))); if (!$login->save()) { throw new CDbException(Yii::t('social', 'При создании учетной записи произошла ошибка!')); } $transaction->commit(); } else { throw new CDbException(Yii::t('social', 'При создании учетной записи произошла ошибка!')); } // авторизуем нового пользователя $socialLogin = new SocialLoginIdentity(Yii::app()->user->getState('service'), Yii::app()->user->getState('sid')); if ($socialLogin->authenticate()) { $this->cleanState(); Yii::app()->user->login($socialLogin); Yii::app()->user->setFlash(YFlashMessages::NOTICE_MESSAGE, Yii::t('social', 'Вы успешно авторизовались!')); $this->redirect(array(Yii::app()->getModule('user')->loginSuccess)); } else { Yii::app()->user->setFlash(YFlashMessages::ERROR_MESSAGE, Yii::t('social', 'При авторизации произошла ошибка!')); $this->cleanState(); $this->redirect(array('/user/account/login')); } } catch (Exception $e) { $transaction->rollback(); $this->cleanState(); Yii::log(Yii::t('social', "При авторизации через {servive} произошла ошибка!", array('{servive}' => Yii::app()->user->getState('service'))), CLogger::LEVEL_ERROR); Yii::app()->user->setFlash(YFlashMessages::ERROR_MESSAGE, Yii::t('social', 'При создании учетной записи произошла ошибка!')); $this->redirect(array('/user/account/login')); } } $this->render('registration', array('model' => $model)); }