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