/**
  * Registration user
  */
 public function actionRegistration()
 {
     Profile::$regMode = true;
     $model = new RegistrationForm();
     $profile = new Profile();
     $module = Module::getInstance();
     // ajax validator
     //        if (Yii::$app->request->isAjax) {
     //            if ($model->load(Yii::$app->request->post()) && $profile->load(Yii::$app->request->post())) {
     //                Yii::$app->response->format = Response::FORMAT_JSON;
     //                return ActiveForm::validateMultiple([$model, $profile]);
     //            }
     //        }
     if (Yii::$app->user->id) {
         $this->redirect($module->profileUrl);
     } else {
         if ($model->load(Yii::$app->request->post())) {
             $profile->load(Yii::$app->request->post());
             if ($model->validate() && $profile->validate()) {
                 $model->activkey = Module::encrypting(microtime() . $model->password);
                 $model->superuser = 0;
                 $model->status = $module->activeAfterRegister ? User::STATUS_ACTIVE : User::STATUS_NOACTIVE;
                 if ($model->save(false)) {
                     $profile->user_id = $model->id;
                     $profile->save(false);
                     if ($module->sendActivationMail) {
                         $url = Url::to(array_merge($module->activationUrl, ["activkey" => $model->activkey, "email" => $model->email]), true);
                         $activation_url = Html::a($url, $url);
                         Module::sendMail($model->email, Module::t("{site_name} account activation", ['site_name' => Yii::$app->name]), 'register', ['activation_url' => $activation_url]);
                     }
                     if (($module->loginNotActiv || $module->activeAfterRegister && $module->sendActivationMail == false) && $module->autoLogin) {
                         Yii::$app->user->login($model);
                         $this->redirect($module->returnUrl);
                     } else {
                         if (!$module->activeAfterRegister && !$module->sendActivationMail) {
                             Yii::$app->user->setFlash('success', Module::t("Thank you for your registration. Contact Admin to activate your account."));
                         } elseif ($module->activeAfterRegister && $module->sendActivationMail == false) {
                             Yii::$app->user->setFlash('success', Module::t("Thank you for your registration. Please {{login}}.", ['{{login}}' => Html::a(Module::t('Login'), $module->loginUrl)]));
                         } elseif ($module->loginNotActiv) {
                             Yii::$app->user->setFlash('success', Module::t("Thank you for your registration. Please check your email or login."));
                         } else {
                             Yii::$app->user->setFlash('success', Module::t("Thank you for your registration. Please check your email."));
                         }
                         return $this->refresh();
                     }
                 }
             } else {
                 $profile->validate();
             }
         }
         return $this->render('/user/registration', ['model' => $model, 'profile' => $profile]);
     }
 }
 public function actionRecovery()
 {
     /**@var Module $module*/
     $module = Yii::$app->controller->module;
     $form = new UserRecoveryForm();
     if (Yii::$app->user->id) {
         $this->redirect($module->returnUrl);
     }
     $email = $this->r->get('email');
     $activkey = $this->r->get('activkey');
     if ($email && $activkey) {
         $form2 = new UserChangePassword();
         $find = User::find()->notsafe()->andWhere(['email' => $email])->one();
         if (isset($find) && $find->activkey == $activkey) {
             if ($form2->load(Yii::$app->request->post())) {
                 if ($form2->validate()) {
                     $find->password = $module->encrypting($form2->password);
                     $find->activkey = Yii::$app->security->generateRandomString();
                     //$module->encrypting(microtime().$form2->password);
                     if ($find->status == 0) {
                         $find->status = 1;
                     }
                     $find->save();
                     Yii::$app->user->setFlash('success', Module::t("New password has been saved."));
                     return $this->redirect($module->loginUrl);
                 }
             }
             return $this->render('recoverpassword', ['form' => $form2]);
         } else {
             Yii::$app->user->setFlash('danger', Module::t("Incorrect recovery link."));
             return $this->redirect($module->recoveryUrl);
         }
     }
     if ($form->load($this->r->post())) {
         if ($form->validate()) {
             $user = User::find()->notsafe()->findbyPk($form->user_id)->one();
             $url = Url::to(array_merge($module->recoveryUrl, ["activkey" => $user->activkey, "email" => $user->email]), true);
             $activation_url = Html::a($url, $url);
             $subject = Module::t("{site_name} password recovery.", ['site_name' => Yii::$app->name]);
             $mail = Module::sendMail($user->email, $subject, 'recover', ['activation_url' => $activation_url]);
             if ($mail) {
                 Yii::$app->user->setFlash('success', Module::t("Please check your email. An activation instructions was sent to your email address."));
             } else {
                 Yii::$app->user->setFlash('danger', Module::t("Oops! There was a problem with sending activation email."));
             }
             return $this->refresh();
         }
     }
     return $this->render('recovery', ['form' => $form]);
 }