* @copyright (c), Thread */ class PasswordResetRequestForm extends \yii\base\Model { public $email; /** * @var User */ private $_user = null; protected $_username_attribute; /** * */ public function init() { parent::init(); /** * @var $module \frontend\modules\user\User */ $module = Yii::$app->getModule('user'); $this->_username_attribute = $module->username_attribute; } /** * @return array */ public function rules() { return [ [['email'], 'required'], [['email'], 'trim'], [['email'], 'email'], ]; } /** * @return array */ public function scenarios() { return [ 'remind' => ['email'], ]; } /** * @return array */ public function attributeLabels() { return [ 'email' => Yii::t('app', 'Email'), ]; } /** * Создаем токкен для сброса пароля * @return bool */ public function generateResetToken() { $success = false; /** * @var $user User */ $user = $this->getUserByEmail(); if ($user !== null) { $user->setScenario('resetPassword'); $user->generatePasswordResetToken(); if (!User::isPasswordResetTokenValid($user->password_reset_token)) { $user->generatePasswordResetToken(); } $success = $user->save(); } return $success; } /** * @return bool */ public function sendEmail() { $user = $this->generateResetToken() ? $this->getUser() : null; /** @see runtime/fronend/debug/mail directory */ if ($user) { $carrier = \Yii::$app->get('mail-carrier'); $carrier->setCarrier('passwordChanged')->initCarrier('passwordChanged'); $carrier->addReceiversTo($this->email); $carrier->send([ 'user' => $user, ], 'user/passwordResetToken-text'); return true; } return false; } /** * @return User|null */ public function getUser() { return ($this->_username_attribute === 'username') ? User::findByUsername($this->username) : User::findByEmail($this->email); } /** * @return User|null */ public function getUserByEmail() { return User::findByEmail($this->email); } }