/** * set new email * @return bool */ public function changeEmail() { $user = Yii::$app->user->identity; if (!Account::isTokenValid($user->change_email_token)) { $user->generateChangeEmailToken(); } $user->new_email = $this->newEmail; if ($user->save()) { Yii::$app->language = $user->language; $subject = Yii::t('app', '[{APP_NAME}] Please verify your email address', ['APP_NAME' => Yii::$app->name]); return Yii::$app->mailer->compose(['html' => 'change-email-html', 'text' => 'change-email-text'], ['title' => $subject, 'user' => $user])->setFrom([Setting::getValue('outgoingMail')])->setTo($user->new_email)->setSubject($subject)->send(); } return false; }
/** * Sends an email with a link, for resetting the password. * * @return boolean whether the email was send */ public function sendEmail() { $user = Account::findOne(['status' => Account::STATUS_ACTIVE, 'email' => $this->email]); if ($user) { if (!Account::isTokenValid($user->password_reset_token)) { $user->generatePasswordResetToken(); } if ($user->save()) { $email = Yii::$app->mailer->compose(['html' => 'password-reset-token-html', 'text' => 'password-reset-token-text'], ['user' => $user])->setFrom([Setting::getValue('outgoingMail') => \Yii::$app->name])->setTo($this->email)->setSubject(Yii::t('app', 'Password reset for {APP_NAME}', ['APP_NAME' => \Yii::$app->name])); return $email->send(); } } return false; }
/** * @param $token * @return \yii\web\Response */ public function actionEmailConfirm($token) { $user = Yii::$app->user->identity; if (Account::isTokenValid($token) == false || $user->change_email_token != $token) { Yii::$app->session->setFlash('error', Yii::t('app', 'Invalid or expired token.')); } else { $user->email = $user->new_email; $user->new_email = null; $user->removeChangeEmailToken(); if ($user->save()) { Yii::$app->getSession()->setFlash('success', Yii::t('app', 'Email successfully changed.')); } else { Yii::$app->getSession()->setFlash('error', Yii::t('app', 'Sorry, something went wrong. Please try again later.')); } } return $this->redirect(['/account/email']); }