* @copyright (c), Thread */ class PasswordController extends BaseUserSigInController { protected $model = Profile::class; public $title = "Profile"; public $defaultAction = 'index'; public $layout = "@app/layouts/user-profile"; /** * */ public function init() { parent::init(); $this->breadcrumbs = [ [ 'label' => Yii::t('user', 'Private Office'), ], [ 'label' => Yii::t('user', 'Profile'), ], [ 'label' => Yii::t('user', 'Password'), ] ]; } /** * @return array */ public function behaviors() { return [ 'AccessControl' => [ 'class' => AccessControl::class, 'rules' => [ [ 'allow' => true, 'actions' => ['change'], 'roles' => ['@'], ], [ 'allow' => true, 'actions' => ['request-reset', 'reset'], 'roles' => ['?'] ], [ 'allow' => false, ], ], ], ]; } /** * @return string */ public function actionChange() { // $this->breadcrumbs[] = [ 'label' => Yii::t('app', 'Update'), ]; // $model = new ChangePassword(); $model->setScenario('passwordChange'); if ($model->load(Yii::$app->getRequest()->post()) && $model->validate()) { $user = User::findIdentity(Yii::$app->getUser()->id); if ($user !== null) { $user->setScenario('passwordChange'); $user->setPassword($model->password); $transaction = $user::getDb()->beginTransaction(); try { $save = $user->save(); if ($save) { $transaction->commit(); $model->addFlash(Yii::t('user', 'Password changed')); } else { $transaction->rollBack(); } } catch (Exception $e) { $transaction->rollBack(); } } } return $this->render('change', [ 'model' => $model, ]); } /** * Requests password reset. * * @return mixed */ public function actionRequestReset() { $this->layout = "@app/layouts/user-register"; $view = 'requestPasswordResetToken'; $model = new PasswordResetRequestForm(); $model->setScenario('remind'); if ($model->load(Yii::$app->request->post()) && $model->validate()) { if ($model->sendEmail()) { Yii::$app->getSession()->addFlash('info-popup', [ 'title' => Yii::t('user', 'Reset password'), 'text' => Yii::t('user', 'Check your email for further instructions.') ]); return $this->redirect(['/']); } else { Yii::$app->getSession()->addFlash('info-popup', [ 'title' => Yii::t('user', 'Reset password'), 'text' => Yii::t('user', 'Sorry, we are unable to reset password for email provided.') ]); return $this->redirect(['/']); } $view = 'requestPasswordResetTokenSuccess'; } return $this->render($view, [ 'model' => $model, ]); } /** * Resets password. * * @param string $token * @return mixed * @throws BadRequestHttpException */ public function actionReset($token) { $this->layout = "@app/layouts/base"; $view = 'resetPassword'; $model = new ResetPasswordForm(); /** * @var $module \frontend\modules\user\User */ $module = $this->module; if ($model->initUserByToken($token) == null) { Yii::$app->session->setFlash('error', Yii::t('user', 'Wrong password reset token.')); $view = 'resetPasswordWrong'; } else { $model->setScenario('setPassword'); if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->setPassword()) { //Yii::$app->session->setFlash('success', Yii::t('user', 'New password was saved.')); Yii::$app->getSession()->addFlash('info-popup', [ 'title' => Yii::t('user', 'Reset password'), 'text' => Yii::t('user', 'New password was saved.') ]); return $this->redirect(['/']); //$view = 'resetPasswordSuccess'; } } return $this->render($view, [ 'model' => $model, 'token' => $token, 'module' => $module ]); } }