<?php
namespace App\Ecommerce\Controller;
use App\Form\Type\DeleteAccountType;
use App\Service\AccountDeleteManager;
use CoreShop\Bundle\CustomerBundle\Form\Type\CustomerLoginType;
use Exception;
use Pimcore\Model\DataObject\CoreShopCustomer;
use Pimcore\Model\DataObject\CoreShopUser;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use CoreShop\Bundle\FrontendBundle\Controller\SecurityController as BaseSecurityController;
class SecurityController extends BaseSecurityController
{
public function loginAction(Request $request): Response
{
if ($this->shopperContext->hasCustomer()) {
if ($this->getParameterFromRequest($request, 'renderLayout', true)) {
return $this->redirectToRoute('coreshop_index');
} else {
return new Response();
}
}
$lastError = $this->authenticationUtils->getLastAuthenticationError();
return $this->render($this->templateConfigurator->findTemplate(sprintf("Security/%s.html",
($this->getParameterFromRequest($request, 'renderLayout', true) ? "login" : "_login-form"))),
[
'form' => $this->formFactory->createNamed('', CustomerLoginType::class)->createView(),
'last_username' => $this->authenticationUtils->getLastUsername(),
'last_error' => $lastError,
'offerRegistration' => $this->getParameterFromRequest($request, 'offerRegistration'),
'target' => $this->getParameterFromRequest($request, 'target'),
'failure' => $this->getParameterFromRequest($request, 'failure'),
'showErrors' => $this->getParameterFromRequest($request, 'showErrors')
]
);
}
public function deleteAccountAction(Request $request, AccountDeleteManager $manager): Response
{
$user = $this->getUser();
if (!$user instanceof CoreShopUser) {
return $this->redirectToRoute('coreshop_index');
}
$customer = $user->getCustomer();
if (!$customer instanceof CoreShopCustomer) {
return $this->redirectToRoute('coreshop_index');
}
$form = $this->container->get('form.factory')->createNamed(
'deleteAccount', DeleteAccountType::class
);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid() && $form->get('submit')?->isClicked()) {
try {
$this->container->get('security.token_storage')->setToken(null);
$manager->deleteAccount($customer);
$request->getSession()->invalidate(0);
return $this->redirectToRoute('coreshop_index');
} catch (Exception $e) {
$this->addFlash('error', 'Hiba történt!');
return $this->redirectToRoute('coreshop_index');
}
}
return $this->render($this->templateConfigurator->findTemplate('Customer/delete_account.html'), [
'customer' => $customer,
'form' => $form->createView()
]);
}
}