Login action :

* Add account
* If user has checked "I'm a new customer", we must verify if it's a new email address.
This commit is contained in:
touffies
2013-10-14 12:25:12 +02:00
parent d58f63990a
commit 7695c19b40
4 changed files with 77 additions and 34 deletions

View File

@@ -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());
}

View File

@@ -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

View File

@@ -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 <mraynaud@openstudio.fr>
*/
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()

View File

@@ -41,17 +41,16 @@
{/form_field}
<fieldset>
{form_field form=$form field="account"}
<legend>{intl l="Do you have an account?"}</legend>
<div class="radio radio-account0" >
<label for="account0">
<input type="radio" name="account" id="account0" data-toggle="password" value="0"> {intl l="No, I am a new customer."}
</label>
</div>
<div class="radio radio-account1">
<label for="account1">
<input type="radio" name="account" id="account1" data-toggle="password" value="1" checked> {intl l="Yes, I have a password :"}
</label>
</div>
{foreach $choices as $choice}
<div class="radio radio-account{$choice->value}">
<label for="{$label_attr.for}{$choice->value}">
<input type="radio" name="{$name}" id="{$label_attr.for}{$choice->value}" data-toggle="password" value="{$choice->value}"{if $value === {$choice->value}} checked{/if}> {$choice->label}
</label>
</div>
{/foreach}
{/form_field}
{form_field form=$form field="password"}
<div class="form-group group-password{if $error} has-error{/if}">
<label for="{$label_attr.for}" class="sr-only">{$label}</label>