From a35d85a9b0e423f6f7c4d4cdbfc4a023111327af Mon Sep 17 00:00:00 2001 From: touffies Date: Thu, 10 Oct 2013 16:38:52 +0200 Subject: [PATCH 1/5] Use only one routing for /Login --- core/lib/Thelia/Config/Resources/routing/front.xml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/core/lib/Thelia/Config/Resources/routing/front.xml b/core/lib/Thelia/Config/Resources/routing/front.xml index 53a0408a0..4966ee6b7 100755 --- a/core/lib/Thelia/Config/Resources/routing/front.xml +++ b/core/lib/Thelia/Config/Resources/routing/front.xml @@ -9,18 +9,24 @@ index - + Thelia\Controller\Front\DefaultController::noAction register + + + Thelia\Controller\Front\CustomerController::loginAction + login + Thelia\Controller\Front\DefaultController::noAction login + Thelia\Controller\Front\CustomerController::logoutAction @@ -40,11 +46,6 @@ Thelia\Controller\Front\CustomerController::updateAction - - Thelia\Controller\Front\CustomerController::loginAction - login - - Thelia\Controller\Front\DefaultController::noAction From 3092c260b107e9c28fb5d7eb5b272aee74269cf5 Mon Sep 17 00:00:00 2001 From: touffies Date: Thu, 10 Oct 2013 16:40:44 +0200 Subject: [PATCH 2/5] Remove alert --- templates/default/assets/js/script.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/default/assets/js/script.js b/templates/default/assets/js/script.js index 6938696df..2cc7d4b99 100644 --- a/templates/default/assets/js/script.js +++ b/templates/default/assets/js/script.js @@ -3,7 +3,7 @@ /* ------------------------------------------------------------------ onLoad Function -------------------------------------------------- */ - $(document).ready(function(){ alert(1); + $(document).ready(function(){ // Loader var $loader = $('
'); From d58f63990a6a1a496f25749bc53ab2f4f4b0a374 Mon Sep 17 00:00:00 2001 From: touffies Date: Thu, 10 Oct 2013 16:41:50 +0200 Subject: [PATCH 3/5] Remove path.less in thelia's folder --- .../default/assets/less/fontawesome/path.less | 12 ++++++++++++ templates/default/assets/less/thelia/import.less | 1 - templates/default/assets/less/thelia/path.less | 14 -------------- 3 files changed, 12 insertions(+), 15 deletions(-) delete mode 100644 templates/default/assets/less/thelia/path.less diff --git a/templates/default/assets/less/fontawesome/path.less b/templates/default/assets/less/fontawesome/path.less index 8ccef8cf0..646525207 100644 --- a/templates/default/assets/less/fontawesome/path.less +++ b/templates/default/assets/less/fontawesome/path.less @@ -1,6 +1,7 @@ /* FONT PATH * -------------------------- */ +/* @font-face { font-family: 'FontAwesome'; src: url('@{FontAwesomePath}/fontawesome-webfont.eot?v=@{FontAwesomeVersion}'); @@ -11,4 +12,15 @@ // src: url('@{FontAwesomePath}/FontAwesome.otf') format('opentype'); // used when developing fonts font-weight: normal; font-style: normal; +}*/ +@font-face { + font-family: 'FontAwesome'; + src: url('@{FontAwesomePath}/fontawesome-webfont.eot?v=3'); + src: url('@{FontAwesomePath}/fontawesome-webfont.eot?#iefix&v=3') format('embedded-opentype'), + url('@{FontAwesomePath}/fontawesome-webfont.woff?v=3') format('woff'), + url('@{FontAwesomePath}/fontawesome-webfont.ttf?v=3') format('truetype'), + url('@{FontAwesomePath}/fontawesome-webfont.svg?v=3#fontawesomeregular') format('svg'); + // src: url('@{FontAwesomePath}/FontAwesome.otf') format('opentype'); // used when developing fonts + font-weight: normal; + font-style: normal; } diff --git a/templates/default/assets/less/thelia/import.less b/templates/default/assets/less/thelia/import.less index 90ced90bb..b18246f32 100755 --- a/templates/default/assets/less/thelia/import.less +++ b/templates/default/assets/less/thelia/import.less @@ -1,6 +1,5 @@ // Thelia @import "variables.less"; -//@import "path.less"; // Thelia : Layout @import "global.less"; diff --git a/templates/default/assets/less/thelia/path.less b/templates/default/assets/less/thelia/path.less deleted file mode 100644 index c8d2e13e9..000000000 --- a/templates/default/assets/less/thelia/path.less +++ /dev/null @@ -1,14 +0,0 @@ -/* FONT PATH - * -------------------------- */ - -@font-face { - font-family: 'FontAwesome'; - src: url('@{FontAwesomePath}/fontawesome-webfont.eot'); - src: url('@{FontAwesomePath}/fontawesome-webfont.eot?#iefix') format('embedded-opentype'), - url('@{FontAwesomePath}/fontawesome-webfont.woff') format('woff'), - url('@{FontAwesomePath}/fontawesome-webfont.ttf') format('truetype'), - url('@{FontAwesomePath}/fontawesome-webfont.svg#fontawesomeregular') format('svg'); - // src: url('@{FontAwesomePath}/FontAwesome.otf') format('opentype'); // used when developing fonts - font-weight: normal; - font-style: normal; -} From 7695c19b402a71947ef20cebcbb82ddea3e2d3fc Mon Sep 17 00:00:00 2001 From: touffies Date: Mon, 14 Oct 2013 12:25:12 +0200 Subject: [PATCH 4/5] Login action : * Add account * If user has checked "I'm a new customer", we must verify if it's a new email address. --- .../Controller/Front/CustomerController.php | 37 +++++++------- .../Core/Template/Smarty/Plugins/Form.php | 5 ++ core/lib/Thelia/Form/CustomerLogin.php | 50 ++++++++++++++++--- templates/default/login.html | 19 ++++--- 4 files changed, 77 insertions(+), 34 deletions(-) diff --git a/core/lib/Thelia/Controller/Front/CustomerController.php b/core/lib/Thelia/Controller/Front/CustomerController.php index f322d3fe1..bf84d987f 100755 --- a/core/lib/Thelia/Controller/Front/CustomerController.php +++ b/core/lib/Thelia/Controller/Front/CustomerController.php @@ -193,31 +193,34 @@ class CustomerController extends BaseFrontController $form = $this->validateForm($customerLoginForm, "post"); - $authenticator = new CustomerUsernamePasswordFormAuthenticator($request, $customerLoginForm); + try { - $customer = $authenticator->getAuthentifiedUser(); + $authenticator = new CustomerUsernamePasswordFormAuthenticator($request, $customerLoginForm); - $this->processLogin($customer); + $customer = $authenticator->getAuthentifiedUser(); - $this->redirectSuccess($customerLoginForm); + $this->processLogin($customer); + + $this->redirectSuccess($customerLoginForm); + + } catch (UsernameNotFoundException $e) { + $message = "1.Wrong email or password. Please try again"; + } catch (WrongPasswordException $e) { + $message = "2.Wrong email or password. Please try again"; + } catch (AuthenticationException $e) { + $message = "3.Wrong email or password. Please try again"; + } } catch (FormValidationException $e) { - if ($request->request->has("account")) { - $account = $request->request->get("account"); - $form = $customerLoginForm->getForm(); - if ($account == 0 && $form->get("email")->getData() !== null) { - $this->redirectToRoute("customer.create.view", array("email" => $form->get("email")->getData())); - } + // If User is a new customer + $form = $customerLoginForm->getForm(); + if ($form->get('account')->getData() == 0 && !$form->get("email")->getErrors()) { + $this->redirectToRoute("customer.create.view", array("email" => $form->get("email")->getData())); + } else { + $message = sprintf("Please check your input: %s", $e->getMessage()); } - $message = sprintf("Please check your input: %s", $e->getMessage()); - } catch (UsernameNotFoundException $e) { - $message = "Wrong email or password. Please try again"; - } catch (WrongPasswordException $e) { - $message = "Wrong email or password. Please try again"; - } catch (AuthenticationException $e) { - $message = "Wrong email or password. Please try again"; } catch (\Exception $e) { $message = sprintf("Sorry, an error occured: %s", $e->getMessage()); } diff --git a/core/lib/Thelia/Core/Template/Smarty/Plugins/Form.php b/core/lib/Thelia/Core/Template/Smarty/Plugins/Form.php index e7613bbac..84ce2e7f9 100755 --- a/core/lib/Thelia/Core/Template/Smarty/Plugins/Form.php +++ b/core/lib/Thelia/Core/Template/Smarty/Plugins/Form.php @@ -151,6 +151,11 @@ class Form extends AbstractSmartyPlugin $template->assign("options", $formFieldView->vars); + /* access to choices */ + if (isset($formFieldView->vars['choices'])) { + $template->assign("choices", $formFieldView->vars['choices']); + } + $value = $formFieldView->vars["value"]; /* FIXME: doesnt work. We got "This form should not contain extra fields." error. // We have a collection diff --git a/core/lib/Thelia/Form/CustomerLogin.php b/core/lib/Thelia/Form/CustomerLogin.php index 63dc186aa..dee785735 100755 --- a/core/lib/Thelia/Form/CustomerLogin.php +++ b/core/lib/Thelia/Form/CustomerLogin.php @@ -22,10 +22,18 @@ /*************************************************************************************/ namespace Thelia\Form; +use Symfony\Component\Validator\Constraints; use Symfony\Component\Validator\Constraints\NotBlank; use Symfony\Component\Validator\Constraints\Email; +use Symfony\Component\Validator\ExecutionContextInterface; use Thelia\Core\Translation\Translator; +use Thelia\Model\Base\CustomerQuery; +/** + * Class CustomerLogin + * @package Thelia\Form + * @author Manuel Raynaud + */ class CustomerLogin extends BaseForm { protected function buildForm() @@ -33,8 +41,14 @@ class CustomerLogin extends BaseForm $this->formBuilder ->add("email", "email", array( "constraints" => array( - new NotBlank(), - new Email() + new Constraints\NotBlank(), + new Constraints\Email(), + new Constraints\Callback(array( + "methods" => array( + array($this, + "verifyExistingEmail") + ) + )) ), "label" => Translator::getInstance()->trans("Please enter your email address"), "label_attr" => array( @@ -42,18 +56,40 @@ class CustomerLogin extends BaseForm ), "required" => true )) + ->add("account", "choice", array( + "choices" => array( + 0 => Translator::getInstance()->trans("No, I am a new customer."), + 1 => Translator::getInstance()->trans("Yes, I have a password :") + ), + "label_attr" => array( + "for" => "account" + ), + "data" => 0 + )) ->add("password", "password", array( "constraints" => array( - new NotBlank() + new Constraints\NotBlank() ), "label" => Translator::getInstance()->trans("Please enter your password"), "label_attr" => array( "for" => "password" ), - "required" => true - )) - ->add("remember_me", "checkbox") - ; + 'required' => false + )); + } + + /** + * If the user select "I'am a new customer", we make sure is email address does not exit in the database. + */ + public function verifyExistingEmail($value, ExecutionContextInterface $context) + { + $data = $context->getRoot()->getData(); + if ($data["account"] == 0) { + $customer = CustomerQuery::create()->findOneByEmail($value); + if ($customer) { + $context->addViolation("A user already exists with this email address. Please login or if you've forgotten your password, go to Reset Your Password."); + } + } } public function getName() diff --git a/templates/default/login.html b/templates/default/login.html index 8f0dc4c1e..6975a90b3 100644 --- a/templates/default/login.html +++ b/templates/default/login.html @@ -41,17 +41,16 @@ {/form_field}
+ {form_field form=$form field="account"} {intl l="Do you have an account?"} -
- -
-
- -
+ {foreach $choices as $choice} +
+ +
+ {/foreach} + {/form_field} {form_field form=$form field="password"}
From 4441fc819050405fdd99076d0f878310c49c2313 Mon Sep 17 00:00:00 2001 From: touffies Date: Mon, 14 Oct 2013 12:25:46 +0200 Subject: [PATCH 5/5] Change path to the register page --- core/lib/Thelia/Config/Resources/routing/front.xml | 10 +++++----- templates/default/register.html | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/lib/Thelia/Config/Resources/routing/front.xml b/core/lib/Thelia/Config/Resources/routing/front.xml index 4966ee6b7..217c713cf 100755 --- a/core/lib/Thelia/Config/Resources/routing/front.xml +++ b/core/lib/Thelia/Config/Resources/routing/front.xml @@ -10,6 +10,11 @@ + + Thelia\Controller\Front\CustomerController::createAction + register + + Thelia\Controller\Front\DefaultController::noAction register @@ -36,11 +41,6 @@ account - - Thelia\Controller\Front\CustomerController::createAction - register - - Thelia\Controller\Front\CustomerController::updateAction diff --git a/templates/default/register.html b/templates/default/register.html index 739522a4b..018a4a8d6 100644 --- a/templates/default/register.html +++ b/templates/default/register.html @@ -15,7 +15,7 @@

{intl l="Create New Account"}

{form name="thelia.customer.creation"} -
+ {form_field form=$form field='success_url'} {* the url the user is redirected to on login success *} {/form_field}