From 036a811ea4ee7018fdd9b63fb31f197046bbed7f Mon Sep 17 00:00:00 2001 From: Alexander Makarov <sam@rmcreative.ru> Date: Thu, 20 Feb 2014 17:50:53 +0400 Subject: [PATCH] Fixes #2458: Added missing validaton to advanced app forms, separated validation from email sending errors for contact form --- apps/advanced/frontend/controllers/SiteController.php | 12 ++++++++---- apps/advanced/frontend/models/ContactForm.php | 21 ++++++++------------- apps/advanced/frontend/models/PasswordResetRequestForm.php | 20 +++++++++----------- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/apps/advanced/frontend/controllers/SiteController.php b/apps/advanced/frontend/controllers/SiteController.php index a360d11..6816daf 100644 --- a/apps/advanced/frontend/controllers/SiteController.php +++ b/apps/advanced/frontend/controllers/SiteController.php @@ -87,8 +87,12 @@ class SiteController extends Controller public function actionContact() { $model = new ContactForm(); - if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['adminEmail'])) { - Yii::$app->session->setFlash('success', 'Thank you for contacting us. We will respond to you as soon as possible.'); + if ($model->load(Yii::$app->request->post()) && $model->validate()) { + if ($model->sendEmail(Yii::$app->params['adminEmail'])) { + Yii::$app->session->setFlash('success', 'Thank you for contacting us. We will respond to you as soon as possible.'); + } else { + Yii::$app->session->setFlash('error', 'There was an error sending email.'); + } return $this->refresh(); } else { return $this->render('contact', [ @@ -122,7 +126,7 @@ class SiteController extends Controller public function actionRequestPasswordReset() { $model = new PasswordResetRequestForm(); - if ($model->load(Yii::$app->request->post())) { + if ($model->load(Yii::$app->request->post()) && $model->validate()) { if ($model->sendEmail()) { Yii::$app->getSession()->setFlash('success', 'Check your email for further instructions.'); return $this->goHome(); @@ -144,7 +148,7 @@ class SiteController extends Controller throw new BadRequestHttpException($e->getMessage()); } - if ($model->load(Yii::$app->request->post()) && $model->resetPassword()) { + if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->resetPassword()) { Yii::$app->getSession()->setFlash('success', 'New password was saved.'); return $this->goHome(); } diff --git a/apps/advanced/frontend/models/ContactForm.php b/apps/advanced/frontend/models/ContactForm.php index 367096d..7d99ae8 100644 --- a/apps/advanced/frontend/models/ContactForm.php +++ b/apps/advanced/frontend/models/ContactForm.php @@ -45,20 +45,15 @@ class ContactForm extends Model * Sends an email to the specified email address using the information collected by this model. * * @param string $email the target email address - * @return boolean whether the model passes validation + * @return boolean whether the email was sent */ - public function contact($email) + public function sendEmail($email) { - if ($this->validate()) { - Yii::$app->mail->compose() - ->setTo($email) - ->setFrom([$this->email => $this->name]) - ->setSubject($this->subject) - ->setTextBody($this->body) - ->send(); - return true; - } else { - return false; - } + return Yii::$app->mail->compose() + ->setTo($email) + ->setFrom([$this->email => $this->name]) + ->setSubject($this->subject) + ->setTextBody($this->body) + ->send(); } } diff --git a/apps/advanced/frontend/models/PasswordResetRequestForm.php b/apps/advanced/frontend/models/PasswordResetRequestForm.php index a82b647..86afc3e 100644 --- a/apps/advanced/frontend/models/PasswordResetRequestForm.php +++ b/apps/advanced/frontend/models/PasswordResetRequestForm.php @@ -37,17 +37,15 @@ class PasswordResetRequestForm extends Model 'email' => $this->email, ]); - if (!$user) { - return false; - } - - $user->generatePasswordResetToken(); - if ($user->save()) { - return \Yii::$app->mail->compose('passwordResetToken', ['user' => $user]) - ->setFrom([\Yii::$app->params['supportEmail'] => \Yii::$app->name . ' robot']) - ->setTo($this->email) - ->setSubject('Password reset for ' . \Yii::$app->name) - ->send(); + if ($user) { + $user->generatePasswordResetToken(); + if ($user->save()) { + return \Yii::$app->mail->compose('passwordResetToken', ['user' => $user]) + ->setFrom([\Yii::$app->params['supportEmail'] => \Yii::$app->name . ' robot']) + ->setTo($this->email) + ->setSubject('Password reset for ' . \Yii::$app->name) + ->send(); + } } return false; -- libgit2 0.27.1