From ac70075a387c871bd3dbc4bc3f1336902cc7db32 Mon Sep 17 00:00:00 2001 From: touffies Date: Tue, 22 Oct 2013 22:26:33 +0200 Subject: [PATCH] Newsletter subscription with ajax --- core/lib/Thelia/Config/Resources/config.xml | 3 +- .../Thelia/Config/Resources/routing/front.xml | 5 -- .../Controller/Front/NewsletterController.php | 23 +++++++-- core/lib/Thelia/Form/NewsletterForm.php | 4 +- templates/default/assets/js/script.js | 26 ++++++++++ templates/default/layout.tpl | 9 ++-- templates/default/newsletter-success.html | 15 ------ templates/default/newsletter.html | 48 ++++++++----------- 8 files changed, 74 insertions(+), 59 deletions(-) delete mode 100644 templates/default/newsletter-success.html diff --git a/core/lib/Thelia/Config/Resources/config.xml b/core/lib/Thelia/Config/Resources/config.xml index f548fa0bb..71ee72cd8 100755 --- a/core/lib/Thelia/Config/Resources/config.xml +++ b/core/lib/Thelia/Config/Resources/config.xml @@ -63,6 +63,7 @@
+ @@ -153,8 +154,6 @@ - - diff --git a/core/lib/Thelia/Config/Resources/routing/front.xml b/core/lib/Thelia/Config/Resources/routing/front.xml index 688e4da63..cf8ea636e 100755 --- a/core/lib/Thelia/Config/Resources/routing/front.xml +++ b/core/lib/Thelia/Config/Resources/routing/front.xml @@ -207,10 +207,5 @@ newsletter - - Thelia\Controller\Front\DefaultController::noAction - newsletter-success - - diff --git a/core/lib/Thelia/Controller/Front/NewsletterController.php b/core/lib/Thelia/Controller/Front/NewsletterController.php index 636923f5b..0df57cd61 100644 --- a/core/lib/Thelia/Controller/Front/NewsletterController.php +++ b/core/lib/Thelia/Controller/Front/NewsletterController.php @@ -62,17 +62,32 @@ class NewsletterController extends BaseFrontController $error_message = $e->getMessage(); } - if($error_message !== false) { - \Thelia\Log\Tlog::getInstance()->error(sprintf('Error during newsletter subscription : %s', $error_message)); + \Thelia\Log\Tlog::getInstance()->error(sprintf('Error during newsletter subscription : %s', $error_message)); + // If Ajax Request + if ($this->getRequest()->isXmlHttpRequest()) { + if ($error_message) { + $response = $this->jsonResponse(json_encode(array( + "success" => false, + "message" => $error_message + ))); + } else { + $response = $this->jsonResponse(json_encode(array( + "success" => true, + "message" => "Thanks for signing up! We'll keep you posted whenever we have any new updates." + )));; + } + + return $response; + + } else { $newsletterForm->setErrorMessage($error_message); $this->getParserContext() ->addForm($newsletterForm) ->setGeneralError($error_message) ; - } else { - $this->redirectToRoute('newsletter.success'); } + } } \ No newline at end of file diff --git a/core/lib/Thelia/Form/NewsletterForm.php b/core/lib/Thelia/Form/NewsletterForm.php index 7b32ed8df..3772df71d 100644 --- a/core/lib/Thelia/Form/NewsletterForm.php +++ b/core/lib/Thelia/Form/NewsletterForm.php @@ -73,7 +73,7 @@ class NewsletterForm extends BaseForm ) )) ), - 'label' => Translator::getInstance()->trans('email'), + 'label' => Translator::getInstance()->trans('Email address'), 'label_attr' => array( 'for' => 'email_newsletter' ) @@ -84,7 +84,7 @@ class NewsletterForm extends BaseForm { $customer = NewsletterQuery::create()->findOneByEmail($value); if ($customer) { - $context->addViolation("This email already exists"); + $context->addViolation("You are already subscribed!"); } } diff --git a/templates/default/assets/js/script.js b/templates/default/assets/js/script.js index cc351f27c..fef4e23f5 100644 --- a/templates/default/assets/js/script.js +++ b/templates/default/assets/js/script.js @@ -89,6 +89,32 @@ }).find(':radio:checked').trigger('change.account'); } + // Mini Newsletter Subscription + var $form_newsletter = $('#form-newsletter-mini'); + if($form_newsletter.size() > 0) { + $form_newsletter.on('submit.newsletter', function(){ + + $.ajax({ + url: $(this).attr('action'), + type: $(this).attr('method'), + data: $(this).serialize(), + dataType: 'json', + success: function(json) { + var $msg = ''; + if(json.success){ + $msg = json.message; + }else{ + $msg = json.message; + } + bootbox.alert($msg); + } + }); + + return false; + }); + } + + // Forgot Password /* var $forgot_password = $('.forgot-password', $form_login); diff --git a/templates/default/layout.tpl b/templates/default/layout.tpl index 72e9ec4fa..706517eb6 100644 --- a/templates/default/layout.tpl +++ b/templates/default/layout.tpl @@ -297,12 +297,13 @@ URL: http://www.thelia.net

{intl l="Newsletter"}

{intl l="Sign up to receive our latest news."}

- {form name="thelia.newsletter"} - + {form name="thelia.front.newsletter"} + + {form_hidden_fields form=$form} {form_field form=$form field="email"}
- - + +
{/form_field} diff --git a/templates/default/newsletter-success.html b/templates/default/newsletter-success.html deleted file mode 100644 index d856d033e..000000000 --- a/templates/default/newsletter-success.html +++ /dev/null @@ -1,15 +0,0 @@ -{extends file="layout.tpl"} - -{* Breadcrumb *} -{block name='no-return-functions' append} - {$breadcrumbs = [['title' => {intl l="Thanks !"}, 'url'=>{url path="/contact/success"}]]} -{/block} - -{block name="main-content"} -
-
-

{intl l="Thanks for signing up!"}

-

{intl l="We'll keep you posted whenever we have any new updates. If you ever wish to unsubscribe, you can easily do so via the link that will be in every email."}

-
-
-{/block} \ No newline at end of file diff --git a/templates/default/newsletter.html b/templates/default/newsletter.html index f7e4d25dc..149b85a21 100644 --- a/templates/default/newsletter.html +++ b/templates/default/newsletter.html @@ -8,37 +8,31 @@ {block name="main-content"}
-

{intl l="Newsletter"}

+

{intl l="Newsletter Subscription"}

- {form name="thelia.newsletter"} - + {form name="thelia.front.newsletter"} + {form_hidden_fields form=$form} -
-
- 1. {intl l="Personal Informations"} +

{intl l="You want to subscribe to the newsletter? Please enter your email address below."}

+ {form_field form=$form field="email"} +
+ +
+ + {if $error} + {$message} + {elseif !$error && $value != ""} + {intl l="Thanks for signing up! We'll keep you posted whenever we have any new updates."} + {/if} +
-
- {form_field form=$form field="email"} -
- -
- - {if $error } - {$message} - {assign var="error_focus" value="true"} - {elseif $value != "" && !$error} - - {/if} -
-
- {/form_field} -
-
- -
-
+ {/form_field} + +
+
+
-
+
{/form}