/**
  * Displays the login page
  */
 public function actionLogin($service = null)
 {
     if ($service && isset(Yii::app()->eauth)) {
         /** @var EAuth $eauth */
         $eauth = Yii::app()->eauth;
         $serviceIdentity = $eauth->getIdentity($service);
         $serviceIdentity->redirectUrl = Yii::app()->user->returnUrl;
         $serviceIdentity->cancelUrl = $this->createAbsoluteUrl('/login');
         try {
             if ($serviceIdentity->authenticate() && $serviceIdentity->getIsAuthenticated()) {
                 if (Yii::app()->user->isGuest) {
                     $userOauth = UserOauth::model()->find('service = :service AND foreign_id = :id', array('service' => $service, 'id' => $serviceIdentity->getId()));
                     if ($userOauth) {
                         /** @var User $user */
                         $user = $userOauth->user;
                         $userIdentity = new EAuthUserIdentity($serviceIdentity, $user);
                         Yii::app()->user->login($userIdentity);
                         $serviceIdentity->redirect();
                     } else {
                         $eauthSession = isset(Yii::app()->session['eauth']) ? Yii::app()->session['eauth'] : array();
                         $eauthSession[$service] = $serviceIdentity->getAttributes();
                         Yii::app()->session['eauth'] = $eauthSession;
                         $this->redirect(Yii::app()->getModule('user')->registrationUrl);
                     }
                 } else {
                     /** @var User $user */
                     $exists = false;
                     $user = User::model()->findByPk(Yii::app()->user->id);
                     foreach ($user->userOauths as $userOauth) {
                         if ($userOauth->service == $service && $userOauth->foreign_id == $serviceIdentity->getId()) {
                             $exists = true;
                         }
                     }
                     if (!$exists) {
                         $userOauth = new UserOauth();
                         $userOauth->service = $service;
                         $userOauth->foreign_id = $serviceIdentity->getId();
                         $userOauth->user_id = $user->id;
                         $userOauth->save();
                         $user->resetCache();
                     }
                 }
             }
             // Something went wrong, redirect to login page
             $this->redirect(array('/login'));
         } catch (EAuthException $e) {
             // save authentication error to session
             Yii::app()->user->setFlash('error', 'EAuthException: ' . $e->getMessage());
             // close popup window and redirect to cancelUrl
             $serviceIdentity->redirect($serviceIdentity->getCancelUrl());
         }
     }
     if (Yii::app()->user->isGuest) {
         $model = new UserLogin();
         // collect user input data
         if (isset($_POST['UserLogin'])) {
             $model->attributes = $_POST['UserLogin'];
             // validate user input and redirect to previous page if valid
             if ($model->validate()) {
                 $user = $this->lastViset();
                 if (Yii::app()->request->isAjaxRequest) {
                     echo json_encode($user->getUserData);
                     exit;
                 }
                 if (Yii::app()->user->returnUrl == '/index.php') {
                     $this->redirect(Yii::app()->controller->module->returnUrl);
                 } else {
                     $this->redirect(Yii::app()->user->returnUrl);
                 }
             }
         }
         // display the login form
         $this->render('/user/login', array('model' => $model));
     } else {
         $this->redirect(Yii::app()->controller->module->returnUrl);
     }
 }
 /**
  * Registration user
  */
 public function actionRegistration()
 {
     $model = new RegistrationForm();
     if (isset(Yii::app()->eauth)) {
         //Yii::app()->eauth->popup = true;
         $services = array_keys(Yii::app()->eauth->services);
         if (isset(Yii::app()->session['eauth'])) {
             $services = array_diff($services, array_keys(Yii::app()->session['eauth']));
             foreach (Yii::app()->session['eauth'] as $data) {
                 foreach ($data as $property => $value) {
                     if (array_key_exists($property, $model->attributes)) {
                         $model->{$property} = $value;
                     }
                 }
             }
         }
     }
     $model->id = null;
     $model->superuser = 0;
     $model->status = 1;
     if (!$model->username) {
         $model->username = $model->nickname;
     }
     // ajax validator
     if (isset($_POST['ajax']) && $_POST['ajax'] === 'registration-form') {
         echo UActiveForm::validate($model);
         Yii::app()->end();
     }
     if (Yii::app()->user->id) {
         $this->redirect(Yii::app()->controller->module->profileUrl);
     } else {
         if (isset($_POST['RegistrationForm'])) {
             $model->attributes = $_POST['RegistrationForm'];
             if ($model->validate()) {
                 $soucePassword = $model->password;
                 $model->activkey = UserModule::encrypting(microtime() . $model->password);
                 $model->password = UserModule::encrypting($model->password);
                 $model->verifyPassword = UserModule::encrypting($model->verifyPassword);
                 $model->superuser = 0;
                 $model->status = Yii::app()->controller->module->activeAfterRegister ? User::STATUS_ACTIVE : User::STATUS_NOACTIVE;
                 if ($model->save()) {
                     if (Yii::app()->controller->module->sendActivationMail) {
                         $activation_url = $this->createAbsoluteUrl('/user/activation/activation', array("activkey" => $model->activkey, "email" => $model->email));
                         UserModule::sendMail($model->email, UserModule::t("You registered from {site_name}", array('{site_name}' => Yii::app()->name)), UserModule::t("Please activate you account go to {activation_url}", array('{activation_url}' => $activation_url)));
                     }
                     if (isset(Yii::app()->session['eauth'])) {
                         foreach (Yii::app()->session['eauth'] as $service => $info) {
                             $userOauth = new UserOauth();
                             $userOauth->service = $service;
                             $userOauth->foreign_id = $info['id'];
                             $userOauth->user_id = $model->id;
                             $userOauth->save();
                         }
                     }
                     if ((Yii::app()->controller->module->loginNotActiv || Yii::app()->controller->module->activeAfterRegister && Yii::app()->controller->module->sendActivationMail == false) && Yii::app()->controller->module->autoLogin) {
                         $identity = new UserIdentity($model->username, $soucePassword);
                         $identity->authenticate();
                         Yii::app()->user->login($identity, 0);
                         $this->redirect(Yii::app()->controller->module->returnUrl);
                     } else {
                         if (!Yii::app()->controller->module->activeAfterRegister && !Yii::app()->controller->module->sendActivationMail) {
                             Yii::app()->user->setFlash('registration', UserModule::t("Thank you for your registration. Contact Admin to activate your account."));
                         } elseif (Yii::app()->controller->module->activeAfterRegister && Yii::app()->controller->module->sendActivationMail == false) {
                             Yii::app()->user->setFlash('registration', UserModule::t("Thank you for your registration. Please {{login}}.", array('{{login}}' => CHtml::link(UserModule::t('Login'), Yii::app()->controller->module->loginUrl))));
                         } elseif (Yii::app()->controller->module->loginNotActiv) {
                             Yii::app()->user->setFlash('registration', UserModule::t("Thank you for your registration. Please check your email or login."));
                         } else {
                             Yii::app()->user->setFlash('registration', UserModule::t("Thank you for your registration. Please check your email."));
                         }
                         $this->refresh();
                     }
                 }
             }
         }
         $this->render('/user/registration', array('model' => $model, 'services' => isset($services) ? $services : array()));
     }
 }