vendor/shopware/storefront/Controller/AccountProfileController.php line 87

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Storefront\Controller;
  3. use Shopware\Core\Checkout\Cart\Exception\CustomerNotLoggedInException;
  4. use Shopware\Core\Checkout\Customer\CustomerEntity;
  5. use Shopware\Core\Checkout\Customer\SalesChannel\AbstractChangeCustomerProfileRoute;
  6. use Shopware\Core\Checkout\Customer\SalesChannel\AbstractChangeEmailRoute;
  7. use Shopware\Core\Checkout\Customer\SalesChannel\AbstractChangePasswordRoute;
  8. use Shopware\Core\Checkout\Customer\SalesChannel\AbstractDeleteCustomerRoute;
  9. use Shopware\Core\Content\Category\Exception\CategoryNotFoundException;
  10. use Shopware\Core\Framework\DataAbstractionLayer\Exception\InconsistentCriteriaIdsException;
  11. use Shopware\Core\Framework\Routing\Annotation\LoginRequired;
  12. use Shopware\Core\Framework\Routing\Annotation\RouteScope;
  13. use Shopware\Core\Framework\Routing\Annotation\Since;
  14. use Shopware\Core\Framework\Routing\Exception\MissingRequestParameterException;
  15. use Shopware\Core\Framework\Validation\DataBag\RequestDataBag;
  16. use Shopware\Core\Framework\Validation\Exception\ConstraintViolationException;
  17. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  18. use Shopware\Storefront\Page\Account\Overview\AccountOverviewPageLoader;
  19. use Shopware\Storefront\Page\Account\Profile\AccountProfilePageLoader;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\Routing\Annotation\Route;
  23. /**
  24.  * @RouteScope(scopes={"storefront"})
  25.  */
  26. class AccountProfileController extends StorefrontController
  27. {
  28.     /**
  29.      * @var AccountOverviewPageLoader
  30.      */
  31.     private $overviewPageLoader;
  32.     /**
  33.      * @var AccountProfilePageLoader
  34.      */
  35.     private $profilePageLoader;
  36.     /**
  37.      * @var AbstractChangeCustomerProfileRoute
  38.      */
  39.     private $changeCustomerProfileRoute;
  40.     /**
  41.      * @var AbstractChangePasswordRoute
  42.      */
  43.     private $changePasswordRoute;
  44.     /**
  45.      * @var AbstractChangeEmailRoute
  46.      */
  47.     private $changeEmailRoute;
  48.     /**
  49.      * @var AbstractDeleteCustomerRoute
  50.      */
  51.     private $deleteCustomerRoute;
  52.     public function __construct(
  53.         AccountOverviewPageLoader $overviewPageLoader,
  54.         AccountProfilePageLoader $profilePageLoader,
  55.         AbstractChangeCustomerProfileRoute $changeCustomerProfileRoute,
  56.         AbstractChangePasswordRoute $changePasswordRoute,
  57.         AbstractChangeEmailRoute $changeEmailRoute,
  58.         AbstractDeleteCustomerRoute $deleteCustomerRoute
  59.     ) {
  60.         $this->overviewPageLoader $overviewPageLoader;
  61.         $this->profilePageLoader $profilePageLoader;
  62.         $this->changeCustomerProfileRoute $changeCustomerProfileRoute;
  63.         $this->changePasswordRoute $changePasswordRoute;
  64.         $this->changeEmailRoute $changeEmailRoute;
  65.         $this->deleteCustomerRoute $deleteCustomerRoute;
  66.     }
  67.     /**
  68.      * @Since("6.0.0.0")
  69.      * @LoginRequired()
  70.      * @Route("/account", name="frontend.account.home.page", methods={"GET"})
  71.      *
  72.      * @throws CustomerNotLoggedInException
  73.      * @throws CategoryNotFoundException
  74.      * @throws InconsistentCriteriaIdsException
  75.      * @throws MissingRequestParameterException
  76.      */
  77.     public function index(Request $requestSalesChannelContext $contextCustomerEntity $customer): Response
  78.     {
  79.         $page $this->overviewPageLoader->load($request$context$customer);
  80.         return $this->renderStorefront('@Storefront/storefront/page/account/index.html.twig', ['page' => $page]);
  81.     }
  82.     /**
  83.      * @Since("6.0.0.0")
  84.      * @LoginRequired()
  85.      * @Route("/account/profile", name="frontend.account.profile.page", methods={"GET"})
  86.      *
  87.      * @throws CustomerNotLoggedInException
  88.      * @throws CategoryNotFoundException
  89.      * @throws InconsistentCriteriaIdsException
  90.      * @throws MissingRequestParameterException
  91.      */
  92.     public function profileOverview(Request $requestSalesChannelContext $context): Response
  93.     {
  94.         $page $this->profilePageLoader->load($request$context);
  95.         return $this->renderStorefront('@Storefront/storefront/page/account/profile/index.html.twig', [
  96.             'page' => $page,
  97.             'passwordFormViolation' => $request->get('passwordFormViolation'),
  98.             'emailFormViolation' => $request->get('emailFormViolation'),
  99.         ]);
  100.     }
  101.     /**
  102.      * @Since("6.0.0.0")
  103.      * @LoginRequired()
  104.      * @Route("/account/profile", name="frontend.account.profile.save", methods={"POST"})
  105.      *
  106.      * @throws CustomerNotLoggedInException
  107.      */
  108.     public function saveProfile(RequestDataBag $dataSalesChannelContext $contextCustomerEntity $customer): Response
  109.     {
  110.         try {
  111.             $this->changeCustomerProfileRoute->change($data$context$customer);
  112.             $this->addFlash(self::SUCCESS$this->trans('account.profileUpdateSuccess'));
  113.         } catch (ConstraintViolationException $formViolations) {
  114.             return $this->forwardToRoute('frontend.account.profile.page', ['formViolations' => $formViolations]);
  115.         } catch (\Exception $exception) {
  116.             $this->addFlash(self::DANGER$this->trans('error.message-default'));
  117.         }
  118.         return $this->redirectToRoute('frontend.account.profile.page');
  119.     }
  120.     /**
  121.      * @Since("6.0.0.0")
  122.      * @LoginRequired()
  123.      * @Route("/account/profile/email", name="frontend.account.profile.email.save", methods={"POST"})
  124.      *
  125.      * @throws CustomerNotLoggedInException
  126.      */
  127.     public function saveEmail(RequestDataBag $dataSalesChannelContext $contextCustomerEntity $customer): Response
  128.     {
  129.         try {
  130.             $this->changeEmailRoute->change($data->get('email')->toRequestDataBag(), $context$customer);
  131.             $this->addFlash(self::SUCCESS$this->trans('account.emailChangeSuccess'));
  132.         } catch (ConstraintViolationException $formViolations) {
  133.             $this->addFlash(self::DANGER$this->trans('account.emailChangeNoSuccess'));
  134.             return $this->forwardToRoute('frontend.account.profile.page', ['formViolations' => $formViolations'emailFormViolation' => true]);
  135.         } catch (\Exception $exception) {
  136.             $this->addFlash(self::DANGER$this->trans('error.message-default'));
  137.         }
  138.         return $this->redirectToRoute('frontend.account.profile.page');
  139.     }
  140.     /**
  141.      * @Since("6.0.0.0")
  142.      * @LoginRequired()
  143.      * @Route("/account/profile/password", name="frontend.account.profile.password.save", methods={"POST"})
  144.      *
  145.      * @throws CustomerNotLoggedInException
  146.      */
  147.     public function savePassword(RequestDataBag $dataSalesChannelContext $contextCustomerEntity $customer): Response
  148.     {
  149.         try {
  150.             $this->changePasswordRoute->change($data->get('password')->toRequestDataBag(), $context$customer);
  151.             $this->addFlash(self::SUCCESS$this->trans('account.passwordChangeSuccess'));
  152.         } catch (ConstraintViolationException $formViolations) {
  153.             $this->addFlash(self::DANGER$this->trans('account.passwordChangeNoSuccess'));
  154.             return $this->forwardToRoute('frontend.account.profile.page', ['formViolations' => $formViolations'passwordFormViolation' => true]);
  155.         }
  156.         return $this->redirectToRoute('frontend.account.profile.page');
  157.     }
  158.     /**
  159.      * @Since("6.3.3.0")
  160.      * @LoginRequired()
  161.      * @Route("/account/profile/delete", name="frontend.account.profile.delete", methods={"POST"})
  162.      *
  163.      * @throws CustomerNotLoggedInException
  164.      */
  165.     public function deleteProfile(Request $requestSalesChannelContext $contextCustomerEntity $customer): Response
  166.     {
  167.         try {
  168.             $this->deleteCustomerRoute->delete($context$customer);
  169.             $this->addFlash(self::SUCCESS$this->trans('account.profileDeleteSuccessAlert'));
  170.         } catch (\Exception $exception) {
  171.             $this->addFlash(self::DANGER$this->trans('error.message-default'));
  172.         }
  173.         if ($request->get('redirectTo') || $request->get('forwardTo')) {
  174.             return $this->createActionResponse($request);
  175.         }
  176.         return $this->redirectToRoute('frontend.home.page');
  177.     }
  178. }