You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					69 lines
				
				1.6 KiB
			
		
		
			
		
	
	
					69 lines
				
				1.6 KiB
			| 
											8 years ago
										 | <?php
 | ||
|  | namespace frontend\models;
 | ||
|  | 
 | ||
|  | use Yii;
 | ||
|  | use yii\base\Model;
 | ||
|  | use common\models\User;
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * Password reset request form
 | ||
|  |  */
 | ||
|  | class PasswordResetRequestForm extends Model
 | ||
|  | {
 | ||
|  |     public $email;
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     /**
 | ||
|  |      * @inheritdoc
 | ||
|  |      */
 | ||
|  |     public function rules()
 | ||
|  |     {
 | ||
|  |         return [
 | ||
|  |             ['email', 'trim'],
 | ||
|  |             ['email', 'required'],
 | ||
|  |             ['email', 'email'],
 | ||
|  |             ['email', 'exist',
 | ||
|  |                 'targetClass' => '\common\models\User',
 | ||
|  |                 'filter' => ['status' => User::STATUS_ACTIVE],
 | ||
|  |                 'message' => 'There is no user with this email address.'
 | ||
|  |             ],
 | ||
|  |         ];
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     /**
 | ||
|  |      * Sends an email with a link, for resetting the password.
 | ||
|  |      *
 | ||
|  |      * @return bool whether the email was send
 | ||
|  |      */
 | ||
|  |     public function sendEmail()
 | ||
|  |     {
 | ||
|  |         /* @var $user User */
 | ||
|  |         $user = User::findOne([
 | ||
|  |             'status' => User::STATUS_ACTIVE,
 | ||
|  |             'email' => $this->email,
 | ||
|  |         ]);
 | ||
|  | 
 | ||
|  |         if (!$user) {
 | ||
|  |             return false;
 | ||
|  |         }
 | ||
|  |         
 | ||
|  |         if (!User::isPasswordResetTokenValid($user->password_reset_token)) {
 | ||
|  |             $user->generatePasswordResetToken();
 | ||
|  |             if (!$user->save()) {
 | ||
|  |                 return false;
 | ||
|  |             }
 | ||
|  |         }
 | ||
|  | 
 | ||
|  |         return Yii::$app
 | ||
|  |             ->mailer
 | ||
|  |             ->compose(
 | ||
|  |                 ['html' => 'passwordResetToken-html', 'text' => 'passwordResetToken-text'],
 | ||
|  |                 ['user' => $user]
 | ||
|  |             )
 | ||
|  |             ->setFrom([Yii::$app->params['supportEmail'] => Yii::$app->name . ' robot'])
 | ||
|  |             ->setTo($this->email)
 | ||
|  |             ->setSubject('Password reset for ' . Yii::$app->name)
 | ||
|  |             ->send();
 | ||
|  |     }
 | ||
|  | }
 |