custom/plugins/CioEweLandingCreator/src/Controller/WebsiteCustomerController.php line 77

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace CioEweLandingCreator\Controller;
  3. use CioBudget\Service\SessionService;
  4. use CioEweLandingCreator\Core\Content\CioWebsite\CioWebsiteEntity;
  5. use CioEweLandingCreator\Core\Content\CioWebsiteKundenstimmen\CioWebsiteKundenstimmenEntity;
  6. use CioEweLandingCreator\Core\Content\CioWebsiteNews\CioWebsiteNewsEntity;
  7. use CioEweLandingCreator\Core\Content\CioWebsiteService\CioWebsiteServiceEntity;
  8. use CioEweLandingCreator\Core\Content\CioWebsiteSocialMedia\CioWebsiteSocialMediaEntity;
  9. use CioMasterdata\Definition\Masterdata\MasterdataEntity;
  10. use CioMasterdata\Service\MasterdataService;
  11. use CioEweLandingCreator\Core\Content\CioWebsiteMitarbeiter\CioWebsiteMitarbeiterEntity;
  12. use Shopware\Core\Checkout\Customer\CustomerEntity;
  13. use Shopware\Core\Content\Cms\Exception\PageNotFoundException;
  14. use Shopware\Core\Content\Product\ProductEntity;
  15. use Shopware\Core\Framework\Context;
  16. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  17. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  18. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  19. use Shopware\Core\Framework\Uuid\Uuid;
  20. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  21. use Shopware\Storefront\Controller\StorefrontController;
  22. use Shopware\Core\Framework\Routing\Annotation\RouteScope;
  23. use Shopware\Storefront\Page\GenericPageLoader;
  24. use Symfony\Component\HttpFoundation\JsonResponse;
  25. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  26. use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
  27. use Symfony\Component\Routing\Annotation\Route;
  28. use Symfony\Component\HttpFoundation\Request;
  29. use Symfony\Component\HttpFoundation\Response;
  30. use CioEweLandingCreator\Service\WriteWebsiteData\WriteWebsiteData;
  31. use CioEweLandingCreator\Service\ReadMasterData\ReadMasterData;
  32. use CioEweLandingCreator\Service\SocialLinks\SocialLinks;
  33. /**
  34.  * @RouteScope (scopes={"storefront"})
  35.  */
  36. class WebsiteCustomerController extends StorefrontController
  37. {
  38.     private WriteWebsiteData $writeWebsiteData;
  39.     private ReadMasterData $readMasterData;
  40. //    private SocialLinks $socialLinks;
  41.     private MasterdataService $masterdataService;
  42.     public function __construct(
  43.         GenericPageLoader $pageLoader,
  44.         SessionService    $sessionService,
  45.         WriteWebsiteData  $writeWebsiteData,
  46.         ReadMasterData    $readMasterData,
  47.         MasterdataService $masterdataService
  48. //        SocialLinks       $socialLinks
  49.     )
  50.     {
  51.         $this->pageLoader $pageLoader;
  52.         $this->sessionService $sessionService;
  53.         $this->writeWebsiteData $writeWebsiteData;
  54.         $this->readMasterData $readMasterData;
  55. //        $this->socialLinks = $socialLinks;
  56.         $this->masterdataService $masterdataService;
  57.     }
  58.     public function getMasterData(SalesChannelContext $salesChannelContext)
  59.     {
  60.         $customFields = ($salesChannelContext->getCustomer()->getCustomFields());
  61.         $masterdata_id $customFields["masterdata"]["0"]["id"];
  62.         return $masterdata_id;
  63.     }
  64.     /**
  65.      * @Route("/account/website-collection", name="storefront.account.website.collection", methods={"GET"})
  66.      * @param Request $request
  67.      * @param Context $context
  68.      * @return Response
  69.      */
  70.     public function index(Request $requestSalesChannelContext $salesChannelContextContext $context)
  71.     {
  72.         if ($salesChannelContext->getCustomer() === null) {
  73.             return $this->redirectToRoute('frontend.account.login.page');
  74.         }
  75.         return $this->getTemplate([
  76.             'changeBanner' => false,
  77.         ], $request$salesChannelContext$context);
  78.     }
  79.     /**
  80.      * @param Request $request
  81.      * @param SalesChannelContext $salesChannelContext
  82.      *
  83.      * @RouteScope (scopes={"storefront"})
  84.      * @Route ("/account/{websiteId}/change-banner-text", name="storefront.account.change.banner.text", methods={"GET"})
  85.      */
  86.     public function getBannerChangeTemplate(Request $requestSalesChannelContext $salesChannelContextContext $context)
  87.     {
  88.         if ($salesChannelContext->getCustomer() === null) {
  89.             return $this->redirectToRoute('frontend.account.login.page');
  90.         }
  91.         return $this->getTemplate([
  92.             'changeBanner' => true,
  93.         ], $request$salesChannelContext$context);
  94.     }
  95.     /**
  96.      * @param Request $request
  97.      * @param SalesChannelContext $salesChannelContext
  98.      *
  99.      * @RouteScope (scopes={"storefront"})
  100.      * @Route ("/account/{websiteId}/set-banner-text", name="storefront.account.set.banner.text", methods={"POST"})
  101.      */
  102.     public function changeBannerText(Request $requestSalesChannelContext $salesChannelContextContext $context): Response
  103.     {
  104.         $websiteId $request->get('websiteId');
  105.         if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
  106.             return $this->redirectToRoute('storefront.account.change.banner', ['websiteId' => $websiteId]);
  107.         }
  108.         /** @var EntityRepositoryInterface $websiteRepository */
  109.         $websiteRepository $this->container->get('cio_website.repository');
  110.         $website $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$websiteId)), $salesChannelContext->getContext())->first();
  111.         if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
  112.             return $this->redirectToRoute('storefront.account.change.banner.text', ['websiteId' => $websiteId]);
  113.         }
  114.         $websiteRepository->update([
  115.             [
  116.                 'id' => $website->getId(),
  117.                 'bannerText' => $request->request->get('bannerText'),
  118.                 'bannerTextColor' => $request->request->get('color'),
  119.                 'bannerTextBgColor' => $request->request->get('bgcolor')
  120.             ]
  121.         ], $salesChannelContext->getContext());
  122.         return $this->redirectToRoute('storefront.account.website.collection', ['websiteId' => $websiteId]);
  123.     }
  124.     /**
  125.      * @param Request $request
  126.      * @param SalesChannelContext $salesChannelContext
  127.      *
  128.      * @RouteScope (scopes={"storefront"})
  129.      * @Route ("/account/{websiteId}/change-stammdaten", name="storefront.account.change.stammdaten", methods={"GET"})
  130.      */
  131.     public function getStammdatenChangeTemplate(Request $requestSalesChannelContext $salesChannelContextContext $context)
  132.     {
  133.         if ($salesChannelContext->getCustomer() === null) {
  134.             return $this->redirectToRoute('frontend.account.login.page');
  135.         }
  136.         return $this->getTemplate([
  137.             'changeStammdaten' => true,
  138.         ], $request$salesChannelContext$context);
  139.     }
  140.     /**
  141.      * @param Request $request
  142.      * @param SalesChannelContext $salesChannelContext
  143.      *
  144.      * @RouteScope (scopes={"storefront"})
  145.      * @Route ("/account/{websiteId}/change-service", name="storefront.account.change.service", methods={"GET"})
  146.      */
  147.     public function getServiceChangeTemplate(Request $requestSalesChannelContext $salesChannelContextContext $context)
  148.     {
  149.         if ($salesChannelContext->getCustomer() === null) {
  150.             return $this->redirectToRoute('frontend.account.login.page');
  151.         }
  152.         return $this->getTemplate([
  153.             'changeService' => true,
  154.         ], $request$salesChannelContext$context);
  155.     }
  156.     /**
  157.      * @param Request $request
  158.      * @param SalesChannelContext $salesChannelContext
  159.      *
  160.      * @RouteScope (scopes={"storefront"})
  161.      * @Route ("/account/{websiteId}/change-team", name="storefront.account.change.team", methods={"GET"})
  162.      */
  163.     public function getTeamChangeTemplate(Request $requestSalesChannelContext $salesChannelContextContext $context)
  164.     {
  165.         if ($salesChannelContext->getCustomer() === null) {
  166.             return $this->redirectToRoute('frontend.account.login.page');
  167.         }
  168.         return $this->getTemplate([
  169.             'changeTeam' => true,
  170.         ], $request$salesChannelContext$context);
  171.     }
  172.     protected function getTemplate(array $dataRequest $requestSalesChannelContext $salesChannelContextContext $context)
  173.     {
  174.         $page $this->pageLoader->load($request$salesChannelContext);
  175.         $masterdatasForCustomer $this->masterdataService->getMasterdatasForCustomer($salesChannelContext->getCustomer());
  176.         $masterdatasForCustomerIds array_map(function (MasterdataEntity $masterdataEntity) { return $masterdataEntity->getId(); }, $masterdatasForCustomer->getElements());
  177.         $selectableWebsites = [];
  178.         /** @var MasterdataEntity $masterdataForCustomer */
  179.         foreach ($masterdatasForCustomer as $masterdataForCustomer) {
  180.             $website $this->writeWebsiteData->getWebsiteEntity($context, [$masterdataForCustomer->getId()]);
  181.             if ($website instanceof CioWebsiteEntity) {
  182.                 $selectableWebsites[] = [
  183.                     'websiteId' => $website->getId(),
  184.                     'masterdataName' => $masterdataForCustomer->getName(),
  185.                     'masterdatVpNumber' => $masterdataForCustomer->getVpNummer()
  186.                 ];
  187.             }
  188.         }
  189.         /** @var CioWebsiteEntity $websiteEntity */
  190.         $websiteEntity $this->writeWebsiteData->getWebsiteEntity($context$masterdatasForCustomerIds$request->get('websiteId'));
  191.         if (!$websiteEntity instanceof CioWebsiteEntity) {
  192.             return $this->renderStorefront(
  193.                 '@CioEweLandingCreator/storefront/page/account/landingpagemanager.html.twig',
  194.                 array_merge($data, [
  195.                     'page' => $page,
  196.                     'stammDaten' => null,
  197.                     'selectMasterdata' => $selectableWebsites,
  198.                     'currentSelectWebsite' => 0,
  199.                     'website' => null,
  200.                     'storefrontApiBaseUrl' => getenv('APP_URL') . '/',
  201.                 ])
  202.             );
  203.         }
  204.         $masterData $this->masterdataService->getMasterdataById($websiteEntity->getMasterdataId());
  205.         return $this->renderStorefront(
  206.             '@CioEweLandingCreator/storefront/page/account/landingpagemanager.html.twig',
  207.             array_merge($data, [
  208.                 'page' => $page,
  209.                 'stammDaten' => $masterData,
  210.                 'selectMasterdata' => $selectableWebsites,
  211.                 'currentSelectWebsite' => $websiteEntity,
  212.                 'website' => $websiteEntity,
  213.                 'storefrontApiBaseUrl' => getenv('APP_URL') . '/',
  214.             ])
  215.         );
  216.     }
  217.     /**
  218.      * @param Request $request
  219.      * @param SalesChannelContext $salesChannelContext
  220.      *
  221.      * @RouteScope (scopes={"storefront"})
  222.      * @Route ("/account/{websiteId}/change-kundenstimme", name="storefront.account.change.kundenstimme", methods={"GET"})
  223.      */
  224.     public function getKundenstimmeChangeTemplate(Request $requestSalesChannelContext $salesChannelContextContext $context)
  225.     {
  226.         if ($salesChannelContext->getCustomer() === null) {
  227.             return $this->redirectToRoute('frontend.account.login.page');
  228.         }
  229.         return $this->getTemplate([
  230.             'changeKundenstimme' => true,
  231.         ], $request$salesChannelContext$context);
  232.     }
  233.     /**
  234.      * @param Request $request
  235.      * @param SalesChannelContext $salesChannelContext
  236.      *
  237.      * @RouteScope (scopes={"storefront"})
  238.      * @Route ("/account/{websiteId}/change-parken", name="storefront.account.change.parken", methods={"GET"})
  239.      */
  240.     public function getParkenChangeTemplate(Request $requestSalesChannelContext $salesChannelContextContext $context)
  241.     {
  242.         if ($salesChannelContext->getCustomer() === null) {
  243.             return $this->redirectToRoute('frontend.account.login.page');
  244.         }
  245.         return $this->getTemplate([
  246.             'changeParken' => true,
  247.         ], $request$salesChannelContext$context);
  248.     }
  249.     /**
  250.      * @param Request $request
  251.      * @param SalesChannelContext $salesChannelContext
  252.      *
  253.      * @RouteScope (scopes={"storefront"})
  254.      * @Route ("/account/{websiteId}/change-news", name="storefront.account.change.news", methods={"GET"})
  255.      */
  256.     public function getNewsChangeTemplate(Request $requestSalesChannelContext $salesChannelContextContext $context)
  257.     {
  258.         if ($salesChannelContext->getCustomer() === null) {
  259.             return $this->redirectToRoute('frontend.account.login.page');
  260.         }
  261.         return $this->getTemplate([
  262.             'changeNews' => true,
  263.         ], $request$salesChannelContext$context);
  264.     }
  265.     /**
  266.      * @param Request $request
  267.      * @param SalesChannelContext $salesChannelContext
  268.      *
  269.      * @RouteScope (scopes={"storefront"})
  270.      * @Route ("/account/{websiteId}/create-news", name="storefront.account.create.news", methods={"GET"})
  271.      */
  272.     public function getNewsCreationTemplate(Request $requestSalesChannelContext $salesChannelContextContext $context)
  273.     {
  274.         if ($salesChannelContext->getCustomer() === null) {
  275.             return $this->redirectToRoute('frontend.account.login.page');
  276.         }
  277.         return $this->getTemplate([
  278.             'createNews' => true,
  279.         ], $request$salesChannelContext$context);
  280.     }
  281.     /**
  282.      * @param Request $request
  283.      * @param SalesChannelContext $salesChannelContext
  284.      *
  285.      * @RouteScope (scopes={"storefront"})
  286.      * @Route ("/account/{websiteId}/change-single-news/{newsId}", name="storefront.account.change.single.news", methods={"GET"})
  287.      */
  288.     public function getChangeSingleNewsTemplate(Request $requestSalesChannelContext $salesChannelContextContext $context)
  289.     {
  290.         if ($salesChannelContext->getCustomer() === null) {
  291.             return $this->redirectToRoute('frontend.account.login.page');
  292.         }
  293.         /** @var EntityRepositoryInterface $websiteNewsRepository */
  294.         $websiteNewsRepository $this->container->get('cio_website_news.repository');
  295.         $criteria = new Criteria();
  296.         $criteria->addFilter(new EqualsFilter('id'$request->get('newsId')));
  297.         $news $websiteNewsRepository->search($criteria$salesChannelContext->getContext())->first();
  298.         return $this->getTemplate([
  299.             'changeSingleNews' => true,
  300.             'news' => $news
  301.         ], $request$salesChannelContext$context);
  302.     }
  303.     /**
  304.      * @param Request $request
  305.      * @param SalesChannelContext $salesChannelContext
  306.      *
  307.      * @RouteScope (scopes={"storefront"})
  308.      * @Route ("/account/{websiteId}/set-socials", name="storefront.account.set.socials", methods={"POST"})
  309.      */
  310.     public function setSocialLinks(Request $requestSalesChannelContext $salesChannelContextContext $context)
  311.     {
  312.         $websiteId $request->get('websiteId');
  313.         $sociallinks $request->request->get('stammdaten');
  314.         if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
  315.             return $this->redirectToRoute('storefront.account.change.stammdaten', ['websiteId' => $websiteId]);
  316.         }
  317.         /** @var EntityRepositoryInterface $websiteRepository */
  318.         $websiteRepository $this->container->get('cio_website.repository');
  319.         /** @var EntityRepositoryInterface $websiteSocialMediaRepository */
  320.         $websiteSocialMediaRepository $this->container->get('cio_website_social_media.repository');
  321.         $website $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$websiteId)), $salesChannelContext->getContext())->first();
  322.         if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
  323.             return $this->redirectToRoute('storefront.account.change.stammdaten', ['websiteId' => $websiteId]);
  324.         }
  325.         $websiteRepository->update(
  326.             [
  327.                 [
  328.                     'id' => $website->getId(),
  329.                     'telephoneHeaderActive' => $request->request->get('showtelephoneheader') == 'true' true false,
  330.                     'impressum' => $request->request->get('impressum'),
  331.                     'datenschutz' => $request->request->get('datenschutz'),
  332.                     'agb' => $request->request->get('agb')
  333.                 ]
  334.             ], $salesChannelContext->getContext());
  335.         if (is_array($sociallinks)) {
  336.             foreach ($sociallinks as $sociallink) {
  337.                 if (key_exists('id'$sociallink)) {
  338.                     if ($sociallink['id'] === 'new') {
  339.                         $websiteSocialMediaRepository->create([
  340.                             [
  341.                                 'id' => Uuid::randomHex(),
  342.                                 'icon' => $sociallink['icon'],
  343.                                 'link' => $sociallink['link'],
  344.                                 'websiteId' => $websiteId
  345.                             ]
  346.                         ], $salesChannelContext->getContext());
  347.                     }
  348.                     if (is_string($sociallink['id']) && Uuid::isValid($sociallink['id'])) {
  349.                         $websiteSocialMediaRepository->update([
  350.                             [
  351.                                 'id' => $sociallink['id'],
  352.                                 'icon' => $sociallink['icon'],
  353.                                 'link' => $sociallink['link']
  354.                             ]
  355.                         ], $salesChannelContext->getContext());
  356.                     }
  357.                 }
  358.             }
  359.         }
  360.         return $this->redirectToRoute('storefront.account.change.stammdaten', ['websiteId' => $websiteId]);
  361.     }
  362.     /**
  363.      * @param Request $request
  364.      * @param SalesChannelContext $salesChannelContext
  365.      *
  366.      * @RouteScope (scopes={"storefront"})
  367.      * @Route ("/account/{websiteId}/set-team", name="storefront.account.set.team", methods={"POST"})
  368.      */
  369.     public function setTeam(Request $requestSalesChannelContext $salesChannelContextContext $context)
  370.     {
  371.         $websiteId $request->get('websiteId');
  372.         $employees $request->request->get('team');
  373.         if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
  374.             return $this->redirectToRoute('storefront.account.change.team', ['websiteId' => $websiteId]);
  375.         }
  376.         /** @var EntityRepositoryInterface $websiteRepository */
  377.         $websiteRepository $this->container->get('cio_website.repository');
  378.         /** @var EntityRepositoryInterface $websiteMitarbeiterRepository */
  379.         $websiteMitarbeiterRepository $this->container->get('cio_website_mitarbeiter.repository');
  380.         $website $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$websiteId)), $salesChannelContext->getContext())->first();
  381.         if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
  382.             return $this->redirectToRoute('storefront.account.change.team', ['websiteId' => $websiteId]);
  383.         }
  384.         $websiteRepository->update([
  385.             [
  386.                 'id' => $website->getId(),
  387.                 'mitarbeiterActive' => $request->request->get('showteam') == 'true' true false,
  388.                 'fullScreenTeam' => $request->request->get('fullscreenteam') == 'true' true false
  389.             ]
  390.         ], $salesChannelContext->getContext());
  391.         if (is_array($employees)) {
  392.             foreach ($employees as $employee) {
  393.                 if (key_exists('id'$employee)) {
  394.                     if ($employee['id'] === 'new') {
  395.                         $websiteMitarbeiterRepository->create([
  396.                             [
  397.                                 'id' => Uuid::randomHex(),
  398.                                 'name' => $employee['name'],
  399.                                 'position' => $employee['position'],
  400.                                 'websiteId' => $website->getId(),
  401.                                 'mediaId' => key_exists('media'$employee) && is_string($employee['media']) && Uuid::isValid($employee['media']) ? $employee['media'] : null,
  402.                                 'orderNumber' => (int)$employee['orderNumber']
  403.                             ]
  404.                         ], $salesChannelContext->getContext());
  405.                     }
  406.                     if (is_string($employee['id']) && Uuid::isValid($employee['id'])) {
  407.                         $websiteMitarbeiterRepository->update([
  408.                             [
  409.                                 'id' => $employee['id'],
  410.                                 'name' => $employee['name'],
  411.                                 'position' => $employee['position'],
  412.                                 'mediaId' => key_exists('media'$employee) && is_string($employee['media']) && Uuid::isValid($employee['media']) ? $employee['media'] : null,
  413.                                 'orderNumber' => (int)$employee['orderNumber']
  414.                             ]
  415.                         ], $salesChannelContext->getContext());
  416.                     }
  417.                 }
  418.             }
  419.         }
  420.         return $this->redirectToRoute('storefront.account.change.team', ['websiteId' => $websiteId]);
  421.     }
  422.     /**
  423.      * @param Request $request
  424.      * @param SalesChannelContext $salesChannelContext
  425.      *
  426.      * @RouteScope (scopes={"storefront"})
  427.      * @Route ("/account/{websiteId}/{employeeId}/remove-team", name="storefront.account.remove.team", methods={"GET"})
  428.      */
  429.     public function removeTeam(Request $requestSalesChannelContext $salesChannelContextContext $context)
  430.     {
  431.         $websiteId $request->get('websiteId');
  432.         $employees $request->request->get('team');
  433.         if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
  434.             return $this->redirectToRoute('storefront.account.change.team', ['websiteId' => $websiteId]);
  435.         }
  436.         /** @var EntityRepositoryInterface $websiteMitarbeiterRepository */
  437.         $websiteMitarbeiterRepository $this->container->get('cio_website_mitarbeiter.repository');
  438.         /** @var CioWebsiteMitarbeiterEntity $employee */
  439.         $employee $websiteMitarbeiterRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$request->get('employeeId')))->addAssociation('website'), $salesChannelContext->getContext())->first();
  440.         if (!$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $employee->getWebsite())) {
  441.             return $this->redirectToRoute('storefront.account.change.team', ['websiteId' => $websiteId]);
  442.         }
  443.         $websiteMitarbeiterRepository->delete([
  444.             [
  445.                 'id' => $request->get('employeeId')
  446.             ]
  447.         ], $salesChannelContext->getContext());
  448.         return $this->redirectToRoute('storefront.account.website.collection', ['websiteId' => $websiteId]);
  449.     }
  450.     /**
  451.      * @param Request $request
  452.      * @param SalesChannelContext $salesChannelContext
  453.      *
  454.      * @RouteScope (scopes={"storefront"})
  455.      * @Route ("/account/{websiteId}/set-service", name="storefront.account.set.service", methods={"POST"})
  456.      */
  457.     public function setService(Request $requestSalesChannelContext $salesChannelContextContext $context)
  458.     {
  459.         $websiteId $request->get('websiteId');
  460.         $services $request->request->get('service');
  461.         /** @var EntityRepositoryInterface $websiteRepository */
  462.         $websiteRepository $this->container->get('cio_website.repository');
  463.         /** @var EntityRepositoryInterface $websiteServiceRepository */
  464.         $websiteServiceRepository $this->container->get('cio_website_service.repository');
  465.         $website $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$websiteId)), $salesChannelContext->getContext())->first();
  466.         if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
  467.             return $this->redirectToRoute('storefront.account.change.service', ['websiteId' => $websiteId]);
  468.         }
  469.         $websiteRepository->update([
  470.             [
  471.                 'id' => $website->getId(),
  472.                 'serviceActive' => $request->request->get('showservice') == 'true' true false
  473.             ]
  474.         ], $salesChannelContext->getContext());
  475.         if (is_array($services)) {
  476.             foreach ($services as $service) {
  477.                 if (key_exists('id'$service)) {
  478.                     if ($service['id'] === 'new') {
  479.                         $websiteServiceRepository->create([
  480.                             [
  481.                                 'id' => Uuid::randomHex(),
  482.                                 'name' => $service['name'],
  483.                                 'description' => $service['description'],
  484.                                 'websiteId' => $website->getId(),
  485.                                 'orderNumber' => (int)$service['orderNumber']
  486.                             ]
  487.                         ], $salesChannelContext->getContext());
  488.                     }
  489.                     if (is_string($service['id']) && Uuid::isValid($service['id'])) {
  490.                         $websiteServiceRepository->update([
  491.                             [
  492.                                 'id' => $service['id'],
  493.                                 'name' => $service['name'],
  494.                                 'description' => $service['description'],
  495.                                 'orderNumber' => (int)$service['orderNumber']
  496.                             ]
  497.                         ], $salesChannelContext->getContext());
  498.                     }
  499.                 }
  500.             }
  501.         }
  502.         return $this->redirectToRoute('storefront.account.change.service', ['websiteId' => $websiteId]);
  503.     }
  504.     /**
  505.      * @param Request $request
  506.      * @param SalesChannelContext $salesChannelContext
  507.      *
  508.      * @RouteScope (scopes={"storefront"})
  509.      * @Route ("/account/{websiteId}/{serviceId}/remove-service", name="storefront.account.remove.service", methods={"GET"})
  510.      */
  511.     public function removeService(Request $requestSalesChannelContext $salesChannelContextContext $context)
  512.     {
  513.         $websiteId $request->get('websiteId');
  514.         $services $request->request->get('service');
  515.         $serviceId $request->get('serviceId');
  516.         if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
  517.             return $this->redirectToRoute('storefront.account.change.service', ['websiteId' => $websiteId'serviceId' => $serviceId]);
  518.         }
  519.         /** @var EntityRepositoryInterface $websiteServiceRepository */
  520.         $websiteServiceRepository $this->container->get('cio_website_service.repository');
  521.         /** @var CioWebsiteServiceEntity $service */
  522.         $service $websiteServiceRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$request->get('serviceId')))->addAssociation('website'), $salesChannelContext->getContext())->first();
  523.         if (!$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $service->getWebsite())) {
  524.             return $this->redirectToRoute('storefront.account.change.service', ['websiteId' => $websiteId'serviceId' => $serviceId]);
  525.         }
  526.         $websiteServiceRepository->delete([
  527.             [
  528.                 'id' => $serviceId
  529.             ]
  530.         ], $salesChannelContext->getContext());
  531.         return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
  532.     }
  533.     /**
  534.      * @param Request $request
  535.      * @param SalesChannelContext $salesChannelContext
  536.      *
  537.      * @RouteScope (scopes={"storefront"})
  538.      * @Route ("/account/{websiteId}/set-kundenstimmen", name="storefront.account.set.kundenstimmen", methods={"POST"})
  539.      */
  540.     public function setKundenstimmen(Request $requestSalesChannelContext $salesChannelContextContext $context)
  541.     {
  542.         $websiteId $request->get('websiteId');
  543.         $kundenstimmen $request->request->get('kundenstimmen');
  544.         /** @var EntityRepositoryInterface $websiteRepository */
  545.         $websiteRepository $this->container->get('cio_website.repository');
  546.         /** @var EntityRepositoryInterface $websiteKundenstimmenRepository */
  547.         $websiteKundenstimmenRepository $this->container->get('cio_website_kundenstimmen.repository');
  548.         $website $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$websiteId)), $salesChannelContext->getContext())->first();
  549.         if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
  550.             return $this->redirectToRoute('storefront.account.change.kundenstimme', ['websiteId' => $websiteId]);
  551.         }
  552.         $websiteRepository->update([
  553.             [
  554.                 'id' => $website->getId(),
  555.                 'kundenstimmenActive' => $request->request->get('showkundenstimmen') == 'true' true false
  556.             ]
  557.         ], $salesChannelContext->getContext());
  558.         if (is_array($kundenstimmen)) {
  559.             foreach ($kundenstimmen as $kundenstimme) {
  560.                 if (key_exists('id'$kundenstimme)) {
  561.                     if ($kundenstimme['id'] === 'new') {
  562.                         $websiteKundenstimmenRepository->create([
  563.                             [
  564.                                 'id' => Uuid::randomHex(),
  565.                                 'description' => $kundenstimme['description'],
  566.                                 'websiteId' => $website->getId(),
  567.                                 'orderNumber' => (int)$kundenstimme['orderNumber']
  568.                             ]
  569.                         ], $salesChannelContext->getContext());
  570.                     }
  571.                     if (is_string($kundenstimme['id']) && Uuid::isValid($kundenstimme['id'])) {
  572.                         $websiteKundenstimmenRepository->update([
  573.                             [
  574.                                 'id' => $kundenstimme['id'],
  575.                                 'description' => $kundenstimme['description'],
  576.                                 'orderNumber' => (int)$kundenstimme['orderNumber']
  577.                             ]
  578.                         ], $salesChannelContext->getContext());
  579.                     }
  580.                 }
  581.             }
  582.         }
  583.         return $this->redirectToRoute('storefront.account.change.kundenstimme', ['websiteId' => $websiteId]);
  584.     }
  585.     /**
  586.      * @param Request $request
  587.      * @param SalesChannelContext $salesChannelContext
  588.      *
  589.      * @RouteScope (scopes={"storefront"})
  590.      * @Route ("/account/{websiteId}/{kundenstimmenId}/remove-kundenstimme", name="storefront.account.remove.kundenstimme", methods={"GET"})
  591.      */
  592.     public function removeKundenstimme(Request $requestSalesChannelContext $salesChannelContextContext $context)
  593.     {
  594.         $websiteId $request->get('websiteId');
  595.         $kundenstimmen $request->request->get('kundenstimmen');
  596.         if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
  597.             return $this->redirectToRoute('storefront.account.change.kundenstimme', ['websiteId' => $websiteId]);
  598.         }
  599.         /** @var EntityRepositoryInterface $websiteKundenstimmenRepository */
  600.         $websiteKundenstimmenRepository $this->container->get('cio_website_kundenstimmen.repository');
  601.         /** @var CioWebsiteKundenstimmenEntity $kundenstimme */
  602.         $kundenstimme $websiteKundenstimmenRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$request->get('kundenstimmenId')))->addAssociation('website'), $salesChannelContext->getContext())->first();
  603.         if (!$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $kundenstimme->getWebsite())) {
  604.             return $this->redirectToRoute('storefront.account.change.kundenstimme', ['websiteId' => $websiteId]);
  605.         }
  606.         $websiteKundenstimmenRepository->delete([
  607.             [
  608.                 'id' => $request->get('kundenstimmenId')
  609.             ]
  610.         ], $salesChannelContext->getContext());
  611.         return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
  612.     }
  613.     /**
  614.      * @param Request $request
  615.      * @param SalesChannelContext $salesChannelContext
  616.      *
  617.      * @RouteScope (scopes={"storefront"})
  618.      * @Route ("/account/{websiteId}/set-parken", name="storefront.account.set.parken", methods={"POST"})
  619.      */
  620.     public function setParken(Request $requestSalesChannelContext $salesChannelContextContext $context)
  621.     {
  622.         $websiteId $request->get('websiteId');
  623.         if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
  624.             return $this->redirectToRoute('storefront.account.change.parken', ['websiteId' => $websiteId]);
  625.         }
  626.         /** @var EntityRepositoryInterface $websiteRepository */
  627.         $websiteRepository $this->container->get('cio_website.repository');
  628.         $website $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$websiteId)), $salesChannelContext->getContext())->first();
  629.         if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
  630.             return $this->redirectToRoute('storefront.account.change.parken', ['websiteId' => $websiteId]);
  631.         }
  632.         $data = [
  633.             'id' => $website->getId(),
  634.             'parkenActive' => $request->request->get('showparken') == 'true' true false,
  635.             'parkenMediaId' => is_string($request->request->get('parkenMediaId')) && Uuid::isValid($request->request->get('parkenMediaId')) ? $request->request->get('parkenMediaId') : $website->getParkenMediaId(),
  636.             'parkenDescription' => $request->request->get('parkendescription'),
  637.             'parkenDescriptionActive' => $request->request->get('showparkendescription') == 'true' true false
  638.         ];
  639.         $websiteRepository->update([
  640.             $data
  641.         ], $salesChannelContext->getContext());
  642.         return $this->redirectToRoute('storefront.account.change.parken', ['websiteId' => $websiteId]);
  643.     }
  644.     /**
  645.      * @param Request $request
  646.      * @param SalesChannelContext $salesChannelContext
  647.      *
  648.      * @RouteScope (scopes={"storefront"})
  649.      * @Route ("/account/{websiteId}/remove-parken", name="storefront.account.remove.parken", methods={"GET"})
  650.      */
  651.     public function removeParken(Request $requestSalesChannelContext $salesChannelContextContext $context)
  652.     {
  653.         $websiteId $request->get('websiteId');
  654.         if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
  655.             return $this->redirectToRoute('storefront.account.change.parken', ['websiteId' => $websiteId]);
  656.         }
  657.         /** @var EntityRepositoryInterface $websiteRepository */
  658.         $websiteRepository $this->container->get('cio_website.repository');
  659.         /** @var CioWebsiteEntity $parken */
  660.         $parken $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$request->get('websiteId'))), $salesChannelContext->getContext())->first();
  661.         if (!$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $parken)) {
  662.             return $this->redirectToRoute('storefront.account.change.parken', ['websiteId' => $websiteId]);
  663.         }
  664.         $websiteRepository->update([
  665.             [
  666.                 'id' => $request->get('websiteId'),
  667.                 'parkenMediaId' => null
  668.             ]
  669.         ], $salesChannelContext->getContext());
  670.         return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
  671.     }
  672.     /**
  673.      * @param Request $request
  674.      * @param SalesChannelContext $salesChannelContext
  675.      *
  676.      * @RouteScope (scopes={"storefront"})
  677.      * @Route ("/account/{websiteId}/create-news", name="storefront.account.store.news", methods={"POST"})
  678.      */
  679.     public function storeNews(Request $requestSalesChannelContext $salesChannelContextContext $context)
  680.     {
  681.         if ($request->request->get('newsCreate') === 'newsCreate') {
  682.             $websiteId $request->get('websiteId');
  683.             if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
  684.                 return $this->redirectToRoute('storefront.account.change.team', ['websiteId' => $websiteId]);
  685.             }
  686.             /** @var EntityRepositoryInterface $websiteRepository */
  687.             $websiteRepository $this->container->get('cio_website.repository');
  688.             /** @var CioWebsiteEntity $website */
  689.             $website $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$websiteId)), $salesChannelContext->getContext())->first();
  690.             if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
  691.                 throw new NotFoundHttpException();
  692.             }
  693.             /** @var EntityRepositoryInterface $websiteNewsRepository */
  694.             $websiteNewsRepository $this->container->get('cio_website_news.repository');
  695.             $newsEntry = [
  696.                 'header' => $request->request->get('header'),
  697.                 'description' => $request->request->get('description'),
  698.                 'websiteId' => $website->getId(),
  699.                 'mediaId' => empty($request->request->get('media')) ? null $request->request->get('media')
  700.             ];
  701.             $websiteNewsRepository->create([
  702.                 $newsEntry
  703.             ], $salesChannelContext->getContext());
  704.         }
  705.         return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
  706.     }
  707.     /**
  708.      * @param Request $request
  709.      * @param SalesChannelContext $salesChannelContext
  710.      *
  711.      * @RouteScope (scopes={"storefront"})
  712.      * @Route ("/account/{websiteId}/update-news/{newsId}", name="storefront.account.update.news", methods={"POST"})
  713.      */
  714.     public function updateNews(Request $requestSalesChannelContext $salesChannelContextContext $context)
  715.     {
  716.         if ($request->request->get('newsCreate') === 'newsCreate') {
  717.             $websiteId $request->get('websiteId');
  718.             if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
  719.                 return $this->redirectToRoute('storefront.account.change.team', ['websiteId' => $websiteId]);
  720.             }
  721.             /** @var EntityRepositoryInterface $websiteRepository */
  722.             $websiteRepository $this->container->get('cio_website.repository');
  723.             /** @var CioWebsiteEntity $website */
  724.             $website $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$websiteId)), $salesChannelContext->getContext())->first();
  725.             if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
  726.                 throw new NotFoundHttpException();
  727.             }
  728.             /** @var EntityRepositoryInterface $websiteNewsRepository */
  729.             $websiteNewsRepository $this->container->get('cio_website_news.repository');
  730.             /** @var CioWebsiteNewsEntity $websiteNews */
  731.             $websiteNews $websiteNewsRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$request->get('newsId'))), $salesChannelContext->getContext())->first();
  732.             if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
  733.                 throw new NotFoundHttpException();
  734.             }
  735.             $data = [
  736.                 'id' => $websiteNews->getId(),
  737.                 'header' => $request->request->get('header'),
  738.                 'description' => $request->request->get('description'),
  739.                 'websiteId' => $website->getId(),
  740.                 'mediaId' => $request->request->get('media') ? $request->request->get('media') : $websiteNews->getMediaId()
  741.             ];
  742.             if ($request->request->get('media') === 'clear') {
  743.                 $data['mediaId'] = null;
  744.             }
  745.             $websiteNewsRepository->update([
  746.                 $data
  747.             ], $salesChannelContext->getContext());
  748.             return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
  749.         }
  750.         return $this->redirectToRoute('storefront.account.website.collection');
  751.     }
  752.     /**
  753.      * @param Request $request
  754.      * @param SalesChannelContext $salesChannelContext
  755.      *
  756.      * @RouteScope (scopes={"storefront"})
  757.      * @Route ("/account/{websiteId}/{newsId}/remove-news", name="storefront.account.remove.news", methods={"GET"})
  758.      */
  759.     public function removeNews(Request $requestSalesChannelContext $salesChannelContextContext $context)
  760.     {
  761.         $websiteId $request->get('websiteId');
  762.         $sociallinks $request->request->get('stammdaten');
  763.         if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
  764.             return $this->redirectToRoute('storefront.account.website.collection');
  765.         }
  766.         /** @var EntityRepositoryInterface $websiteNewsRepository */
  767.         $websiteNewsRepository $this->container->get('cio_website_news.repository');
  768.         /** @var CioWebsiteNewsEntity $employee */
  769.         $websiteNews $websiteNewsRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$request->get('newsId')))->addAssociation('website'), $salesChannelContext->getContext())->first();
  770.         if (!$websiteNews instanceof CioWebsiteNewsEntity || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $websiteNews->getWebsite())) {
  771.             return $this->redirectToRoute('storefront.account.website.collection');
  772.         }
  773.         $websiteNewsRepository->delete([
  774.             [
  775.                 'id' => $websiteNews->getId()
  776.             ]
  777.         ], $salesChannelContext->getContext());
  778.         return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
  779.     }
  780.     /**
  781.      * @param Request $request
  782.      * @param SalesChannelContext $salesChannelContext
  783.      *
  784.      * @RouteScope (scopes={"storefront"})
  785.      * @Route ("/account/{sociallinkId}/remove-sociallink", name="storefront.account.remove.sociallink", methods={"GET"})
  786.      */
  787.     public function removeSociallink(Request $requestSalesChannelContext $salesChannelContextContext $context)
  788.     {
  789.         $websiteId $request->get('websiteId');
  790.         $sociallinks $request->request->get('stammdaten');
  791.         if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
  792.             return $this->redirectToRoute('storefront.account.change.stammdaten', ['websiteId' => $websiteId]);
  793.         }
  794.         /** @var EntityRepositoryInterface $websiteSocialMediaRepository */
  795.         $websiteSocialMediaRepository $this->container->get('cio_website_social_media.repository');
  796.         /** @var CioWebsiteSocialMediaEntity $employee */
  797.         $sociallink $websiteSocialMediaRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$request->get('sociallinkId')))->addAssociation('website'), $salesChannelContext->getContext())->first();
  798.         if (!$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $sociallink->getWebsite())) {
  799.             return $this->redirectToRoute('storefront.account.change.stammdaten', ['websiteId' => $websiteId]);
  800.         }
  801.         $websiteSocialMediaRepository->delete([
  802.             [
  803.                 'id' => $request->get('sociallinkId')
  804.             ]
  805.         ], $salesChannelContext->getContext());
  806.         return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
  807.     }
  808.     /**
  809.      * @param Request $request
  810.      * @param SalesChannelContext $salesChannelContext
  811.      *
  812.      * @RouteScope (scopes={"storefront"})
  813.      * @Route ("/account/{websiteId}/update-news-checkbox", name="storefront.account.update.news.checkbox", methods={"POST"})
  814.      */
  815.     public function updateNewsCheckbox(Request $requestSalesChannelContext $salesChannelContextContext $context)
  816.     {
  817.         $websiteId $request->get('websiteId');
  818.         /** @var EntityRepositoryInterface $websiteRepository */
  819.         $websiteRepository $this->container->get('cio_website.repository');
  820.         $website $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id'$websiteId)), $salesChannelContext->getContext())->first();
  821.         if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
  822.             return $this->redirectToRoute('storefront.account.change.news', ['websiteId' => $websiteId]);
  823.         }
  824.         $websiteRepository->update([
  825.             [
  826.                 'id' => $website->getId(),
  827.                 'newsActive' => $request->request->get('shownews') == 'true' true false
  828.             ]
  829.         ], $salesChannelContext->getContext());
  830.         return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
  831.     }
  832.     protected function checkCustomerPermissions(CustomerEntity $customerCioWebsiteEntity $website): bool
  833.     {
  834.         $websiteMasterdataId $website->getMasterdataId();
  835.         $customerMasterdata $this->getCustomFieldValue($customer'masterdata', []);
  836.         foreach ($customerMasterdata as $customerMasterdataId) {
  837.             if (is_array($customerMasterdataId) && key_exists('id'$customerMasterdataId) && $customerMasterdataId['id'] === $websiteMasterdataId) {
  838.                 return true;
  839.             }
  840.         }
  841.         return false;
  842.     }
  843.     protected function getCustomFieldValue($entity$key$default null)
  844.     {
  845.         if (!is_array($entity->getCustomFields()) || !key_exists($key$entity->getCustomFields())) {
  846.             return $default;
  847.         }
  848.         return $entity->getCustomFields()[$key];
  849.     }
  850. }