PasswordResetRequestForm.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace app\models\forms;
  3. use Yii;
  4. use yii\base\Model;
  5. use app\models\User;
  6. /**
  7. * Password reset request form
  8. */
  9. class PasswordResetRequestForm extends Model
  10. {
  11. public $email;
  12. /**
  13. * @inheritdoc
  14. */
  15. public function rules()
  16. {
  17. return [
  18. ['email', 'filter', 'filter' => 'trim'],
  19. ['email', 'required'],
  20. ['email', 'email'],
  21. ['email', 'exist',
  22. 'targetClass' => '\app\models\User',
  23. 'filter' => ['status' => User::STATUS_ACTIVE],
  24. 'message' => 'There is no user with such email.'
  25. ],
  26. ];
  27. }
  28. /**
  29. * Sends an email with a link, for resetting the password.
  30. *
  31. * @return boolean whether the email was send
  32. */
  33. public function sendEmail()
  34. {
  35. /** @var User $user */
  36. $user = User::find()->canLogin()->email($this->email)->one();
  37. if ($user) {
  38. $user->generatePasswordResetToken();
  39. if ($user->save()) {
  40. $params = Yii::$app->params;
  41. return Yii::$app->mail->compose('passwordResetToken', ['user' => $user])
  42. ->setFrom([$params['support.email'] => $params['support.name']])
  43. ->setTo($this->email)
  44. ->setSubject('Password reset for ' . Yii::$app->name)
  45. ->send();
  46. }
  47. }
  48. return false;
  49. }
  50. }