Example #1
0
 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));
 }
Example #2
0
 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);
     }
 }
Example #4
0
 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);
 }
Example #5
0
 public function testSpecificValidateFilter()
 {
     $u = new User();
     $u->email = "sammy";
     $u->save(array('validate_method' => 'emailValidate'));
     $this->assertTrue($u->hasErrors());
 }
Example #6
0
 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());
     }
 }
Example #7
0
 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));
 }