/** * @param User $user * @param $email * @param bool|true $confirm * @return bool */ public function changeUserEmail(User $user, $email, $confirm = true) { if ($user->email == $email) { return true; } $transaction = Yii::app()->getDb()->beginTransaction(); try { $user->email_confirm = User::EMAIL_CONFIRM_NO; $user->email = $email; if ($user->save()) { if ($confirm && ($token = $this->tokenStorage->createEmailVerifyToken($user)) === false) { throw new CException(Yii::t('UserModule.user', 'Error change Email!')); } Yii::app()->eventManager->fire(UserEvents::SUCCESS_EMAIL_CHANGE, new UserEmailConfirmEvent($token, $user)); $transaction->commit(); return true; } throw new CException(Yii::t('UserModule.user', 'Error change Email!')); } catch (Exception $e) { $transaction->rollback(); return false; } }
/** * Отправить письмо для подтверждения email: * * @param integer $id - ID пользователя * * @throws CHttpException * * @return void */ public function actionVerifySend($id = null) { Yii::app()->getRequest()->getIsAjaxRequest() === true || $this->badRequest(); if ($id === null || ($user = $this->loadModel($id)) === null) { throw new CHttpException(404, Yii::t('UserModule.user', 'requested page was not found!')); } elseif ($user->email_confirm) { return $this->badRequest(); } $tokenStorage = new TokenStorage(); if ($token = $tokenStorage->createEmailVerifyToken($user)) { Yii::app()->notify->send($user, Yii::t('UserModule.user', 'Email verification'), '//user/email/needEmailActivationEmail', array('token' => $token)); Yii::app()->ajax->success(Yii::t('UserModule.user', 'Sent!')); } Yii::app()->ajax->failure(); }