Inital commit
This commit is contained in:
@@ -12,23 +12,21 @@
|
||||
|
||||
namespace Thelia\Action;
|
||||
|
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||
use Thelia\Core\Event\ActionEvent;
|
||||
use Thelia\Core\Event\Customer\CustomerCreateOrUpdateEvent;
|
||||
use Thelia\Core\Event\Customer\CustomerEvent;
|
||||
use Thelia\Core\Event\Customer\CustomerLoginEvent;
|
||||
use Thelia\Core\Event\LostPasswordEvent;
|
||||
use Thelia\Core\Event\TheliaEvents;
|
||||
use Thelia\Core\Security\SecurityContext;
|
||||
use Thelia\Core\Template\ParserInterface;
|
||||
use Thelia\Core\Translation\Translator;
|
||||
use Thelia\Exception\CustomerException;
|
||||
use Thelia\Mailer\MailerFactory;
|
||||
use Thelia\Model\ConfigQuery;
|
||||
use Thelia\Model\Customer as CustomerModel;
|
||||
use Thelia\Core\Event\Customer\CustomerLoginEvent;
|
||||
use Thelia\Model\CustomerQuery;
|
||||
use Thelia\Model\LangQuery;
|
||||
use Thelia\Model\MessageQuery;
|
||||
use Thelia\Tools\Password;
|
||||
|
||||
/**
|
||||
@@ -37,46 +35,77 @@ use Thelia\Tools\Password;
|
||||
*
|
||||
* Class Customer
|
||||
* @package Thelia\Action
|
||||
* @author Manuel Raynaud <mraynaud@openstudio.fr>
|
||||
* @author Manuel Raynaud <manu@raynaud.io>
|
||||
*/
|
||||
class Customer extends BaseAction implements EventSubscriberInterface
|
||||
{
|
||||
/** @var SecurityContext */
|
||||
protected $securityContext;
|
||||
|
||||
protected $parser;
|
||||
|
||||
/** @var MailerFactory */
|
||||
protected $mailer;
|
||||
|
||||
public function __construct(SecurityContext $securityContext, ParserInterface $parser, MailerFactory $mailer)
|
||||
public function __construct(SecurityContext $securityContext, MailerFactory $mailer)
|
||||
{
|
||||
$this->securityContext = $securityContext;
|
||||
$this->mailer = $mailer;
|
||||
$this->parser = $parser;
|
||||
}
|
||||
|
||||
public function create(CustomerCreateOrUpdateEvent $event)
|
||||
public function create(CustomerCreateOrUpdateEvent $event, $eventName, EventDispatcherInterface $dispatcher)
|
||||
{
|
||||
|
||||
$customer = new CustomerModel();
|
||||
|
||||
$this->createOrUpdateCustomer($customer, $event);
|
||||
$plainPassword = $event->getPassword();
|
||||
|
||||
$this->createOrUpdateCustomer($customer, $event, $dispatcher);
|
||||
|
||||
if ($event->getNotifyCustomerOfAccountCreation()) {
|
||||
$this->mailer->sendEmailToCustomer(
|
||||
'customer_account_created',
|
||||
$customer,
|
||||
[ 'password' => $plainPassword ]
|
||||
);
|
||||
}
|
||||
|
||||
$dispatcher->dispatch(
|
||||
TheliaEvents::SEND_ACCOUNT_CONFIRMATION_EMAIL,
|
||||
new CustomerEvent($customer)
|
||||
);
|
||||
}
|
||||
|
||||
public function modify(CustomerCreateOrUpdateEvent $event)
|
||||
{
|
||||
|
||||
$customer = $event->getCustomer();
|
||||
|
||||
$this->createOrUpdateCustomer($customer, $event);
|
||||
|
||||
}
|
||||
|
||||
public function updateProfile(CustomerCreateOrUpdateEvent $event)
|
||||
public function customerConfirmationEmail(CustomerEvent $event, $eventName, EventDispatcherInterface $dispatcher)
|
||||
{
|
||||
$customer = $event->getCustomer();
|
||||
|
||||
$customer->setDispatcher($event->getDispatcher());
|
||||
if (ConfigQuery::isCustomerEmailConfirmationEnable() && $customer->getConfirmationToken() !== null && $customer !== null) {
|
||||
$this->mailer->sendEmailToCustomer(
|
||||
'customer_confirmation',
|
||||
$customer,
|
||||
['customer_id' => $customer->getId()]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function modify(CustomerCreateOrUpdateEvent $event, $eventName, EventDispatcherInterface $dispatcher)
|
||||
{
|
||||
$plainPassword = $event->getPassword();
|
||||
|
||||
$customer = $event->getCustomer();
|
||||
|
||||
$emailChanged = $customer->getEmail() !== $event->getEmail();
|
||||
|
||||
$this->createOrUpdateCustomer($customer, $event, $dispatcher);
|
||||
|
||||
if (! empty($plainPassword) || $emailChanged) {
|
||||
$this->mailer->sendEmailToCustomer('customer_account_changed', $customer, ['password' => $plainPassword]);
|
||||
}
|
||||
}
|
||||
|
||||
public function updateProfile(CustomerCreateOrUpdateEvent $event, $eventName, EventDispatcherInterface $dispatcher)
|
||||
{
|
||||
$customer = $event->getCustomer();
|
||||
|
||||
$customer->setDispatcher($dispatcher);
|
||||
|
||||
if ($event->getTitle() !== null) {
|
||||
$customer->setTitleId($event->getTitle());
|
||||
@@ -91,7 +120,7 @@ class Customer extends BaseAction implements EventSubscriberInterface
|
||||
}
|
||||
|
||||
if ($event->getEmail() !== null) {
|
||||
$customer->setEmail($event->getEmail());
|
||||
$customer->setEmail($event->getEmail(), $event->getEmailUpdateAllowed());
|
||||
}
|
||||
|
||||
if ($event->getPassword() !== null) {
|
||||
@@ -118,7 +147,6 @@ class Customer extends BaseAction implements EventSubscriberInterface
|
||||
public function delete(CustomerEvent $event)
|
||||
{
|
||||
if (null !== $customer = $event->getCustomer()) {
|
||||
|
||||
if (true === $customer->hasOrder()) {
|
||||
throw new CustomerException(Translator::getInstance()->trans("Impossible to delete a customer who already have orders"));
|
||||
}
|
||||
@@ -127,9 +155,9 @@ class Customer extends BaseAction implements EventSubscriberInterface
|
||||
}
|
||||
}
|
||||
|
||||
private function createOrUpdateCustomer(CustomerModel $customer, CustomerCreateOrUpdateEvent $event)
|
||||
private function createOrUpdateCustomer(CustomerModel $customer, CustomerCreateOrUpdateEvent $event, EventDispatcherInterface $dispatcher)
|
||||
{
|
||||
$customer->setDispatcher($event->getDispatcher());
|
||||
$customer->setDispatcher($dispatcher);
|
||||
|
||||
$customer->createOrUpdate(
|
||||
$event->getTitle(),
|
||||
@@ -145,12 +173,14 @@ class Customer extends BaseAction implements EventSubscriberInterface
|
||||
$event->getCountry(),
|
||||
$event->getEmail(),
|
||||
$event->getPassword(),
|
||||
$event->getLang(),
|
||||
$event->getLangId(),
|
||||
$event->getReseller(),
|
||||
$event->getSponsor(),
|
||||
$event->getDiscount(),
|
||||
$event->getCompany(),
|
||||
$event->getRef()
|
||||
$event->getRef(),
|
||||
$event->getEmailUpdateAllowed(),
|
||||
$event->getState()
|
||||
);
|
||||
|
||||
$event->setCustomer($customer);
|
||||
@@ -171,84 +201,27 @@ class Customer extends BaseAction implements EventSubscriberInterface
|
||||
*
|
||||
* @param ActionEvent $event
|
||||
*/
|
||||
public function logout(ActionEvent $event)
|
||||
public function logout(/** @noinspection PhpUnusedParameterInspection */ ActionEvent $event)
|
||||
{
|
||||
$this->securityContext->clearCustomerUser();
|
||||
}
|
||||
|
||||
public function lostPassword(LostPasswordEvent $event)
|
||||
{
|
||||
$contact_email = ConfigQuery::read('store_email');
|
||||
if (null !== $customer = CustomerQuery::create()->filterByEmail($event->getEmail())->findOne()) {
|
||||
$password = Password::generateRandom(8);
|
||||
|
||||
if ($contact_email) {
|
||||
if (null !== $customer = CustomerQuery::create()->filterByEmail($event->getEmail())->findOne()) {
|
||||
$customer
|
||||
->setPassword($password)
|
||||
->save()
|
||||
;
|
||||
|
||||
$password = Password::generateRandom(8);
|
||||
|
||||
$customer
|
||||
->setPassword($password)
|
||||
->save()
|
||||
;
|
||||
|
||||
if ($customer->getLang() !== null) {
|
||||
$lang = LangQuery::create()
|
||||
->findPk($customer->getLang());
|
||||
|
||||
$locale = $lang->getLocale();
|
||||
} else {
|
||||
$lang = LangQuery::create()
|
||||
->filterByByDefault(1)
|
||||
->findOne();
|
||||
|
||||
$locale = $lang->getLocale();
|
||||
}
|
||||
|
||||
$message = MessageQuery::create()
|
||||
->filterByName('lost_password')
|
||||
->findOne();
|
||||
|
||||
$message->setLocale($locale);
|
||||
|
||||
if (false === $message) {
|
||||
throw new \Exception("Failed to load message 'order_confirmation'.");
|
||||
}
|
||||
|
||||
$this->parser->assign('password', $password);
|
||||
|
||||
$instance = \Swift_Message::newInstance()
|
||||
->addTo($customer->getEmail(), $customer->getFirstname()." ".$customer->getLastname())
|
||||
->addFrom($contact_email, ConfigQuery::read('store_name'))
|
||||
;
|
||||
|
||||
// Build subject and body
|
||||
|
||||
$message->buildMessage($this->parser, $instance);
|
||||
|
||||
$this->mailer->send($instance);
|
||||
|
||||
}
|
||||
$this->mailer->sendEmailToCustomer('lost_password', $customer, ['password' => $password]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of event names this subscriber wants to listen to.
|
||||
*
|
||||
* The array keys are event names and the value can be:
|
||||
*
|
||||
* * The method name to call (priority defaults to 0)
|
||||
* * An array composed of the method name to call and the priority
|
||||
* * An array of arrays composed of the method names to call and respective
|
||||
* priorities, or 0 if unset
|
||||
*
|
||||
* For instance:
|
||||
*
|
||||
* * array('eventName' => 'methodName')
|
||||
* * array('eventName' => array('methodName', $priority))
|
||||
* * array('eventName' => array(array('methodName1', $priority), array('methodName2'))
|
||||
*
|
||||
* @return array The event names to listen to
|
||||
*
|
||||
* @api
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function getSubscribedEvents()
|
||||
{
|
||||
@@ -259,7 +232,8 @@ class Customer extends BaseAction implements EventSubscriberInterface
|
||||
TheliaEvents::CUSTOMER_LOGOUT => array('logout', 128),
|
||||
TheliaEvents::CUSTOMER_LOGIN => array('login', 128),
|
||||
TheliaEvents::CUSTOMER_DELETEACCOUNT => array('delete', 128),
|
||||
TheliaEvents::LOST_PASSWORD => array('lostPassword', 128)
|
||||
TheliaEvents::LOST_PASSWORD => array('lostPassword', 128),
|
||||
TheliaEvents::SEND_ACCOUNT_CONFIRMATION_EMAIL => array('customerConfirmationEmail', 128)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user