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.
		
		
		
		
		
			
		
			
				
					
					
						
							68 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							68 lines
						
					
					
						
							1.7 KiB
						
					
					
				| <?php | |
| namespace frontend\models; | |
|  | |
| use core\entities\user\User; | |
| use Yii; | |
| use yii\base\Exception; | |
| use yii\base\Model; | |
|  | |
| /** | |
|  * Password reset request form | |
|  */ | |
| class PasswordResetRequestForm extends Model | |
| { | |
|     public string $email; | |
|  | |
|     /** | |
|      * @inheritdoc | |
|      */ | |
|     public function rules(): array | |
|     { | |
|         return [ | |
|             ['email', 'trim'], | |
|             ['email', 'required'], | |
|             ['email', 'email'], | |
|             ['email', 'exist', | |
|                 'targetClass' => User::class, | |
|                 '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 | |
|      * @throws Exception | |
|      */ | |
|     public function sendEmail(): bool | |
|     { | |
|         /* @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(); | |
|     } | |
| }
 | |
| 
 |