<?php declare(strict_types=1);
namespace CioEweLandingCreator\Controller;
use CioBudget\Service\SessionService;
use CioEweLandingCreator\Core\Content\CioWebsite\CioWebsiteEntity;
use CioEweLandingCreator\Core\Content\CioWebsiteKundenstimmen\CioWebsiteKundenstimmenEntity;
use CioEweLandingCreator\Core\Content\CioWebsiteNews\CioWebsiteNewsEntity;
use CioEweLandingCreator\Core\Content\CioWebsiteService\CioWebsiteServiceEntity;
use CioEweLandingCreator\Core\Content\CioWebsiteSocialMedia\CioWebsiteSocialMediaEntity;
use CioMasterdata\Definition\Masterdata\MasterdataEntity;
use CioMasterdata\Service\MasterdataService;
use CioEweLandingCreator\Core\Content\CioWebsiteMitarbeiter\CioWebsiteMitarbeiterEntity;
use Shopware\Core\Checkout\Customer\CustomerEntity;
use Shopware\Core\Content\Cms\Exception\PageNotFoundException;
use Shopware\Core\Content\Product\ProductEntity;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\Framework\Uuid\Uuid;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Shopware\Storefront\Controller\StorefrontController;
use Shopware\Core\Framework\Routing\Annotation\RouteScope;
use Shopware\Storefront\Page\GenericPageLoader;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use CioEweLandingCreator\Service\WriteWebsiteData\WriteWebsiteData;
use CioEweLandingCreator\Service\ReadMasterData\ReadMasterData;
use CioEweLandingCreator\Service\SocialLinks\SocialLinks;
/**
* @RouteScope (scopes={"storefront"})
*/
class WebsiteCustomerController extends StorefrontController
{
private WriteWebsiteData $writeWebsiteData;
private ReadMasterData $readMasterData;
// private SocialLinks $socialLinks;
private MasterdataService $masterdataService;
public function __construct(
GenericPageLoader $pageLoader,
SessionService $sessionService,
WriteWebsiteData $writeWebsiteData,
ReadMasterData $readMasterData,
MasterdataService $masterdataService
// SocialLinks $socialLinks
)
{
$this->pageLoader = $pageLoader;
$this->sessionService = $sessionService;
$this->writeWebsiteData = $writeWebsiteData;
$this->readMasterData = $readMasterData;
// $this->socialLinks = $socialLinks;
$this->masterdataService = $masterdataService;
}
public function getMasterData(SalesChannelContext $salesChannelContext)
{
$customFields = ($salesChannelContext->getCustomer()->getCustomFields());
$masterdata_id = $customFields["masterdata"]["0"]["id"];
return $masterdata_id;
}
/**
* @Route("/account/website-collection", name="storefront.account.website.collection", methods={"GET"})
* @param Request $request
* @param Context $context
* @return Response
*/
public function index(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
if ($salesChannelContext->getCustomer() === null) {
return $this->redirectToRoute('frontend.account.login.page');
}
return $this->getTemplate([
'changeBanner' => false,
], $request, $salesChannelContext, $context);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/change-banner-text", name="storefront.account.change.banner.text", methods={"GET"})
*/
public function getBannerChangeTemplate(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
if ($salesChannelContext->getCustomer() === null) {
return $this->redirectToRoute('frontend.account.login.page');
}
return $this->getTemplate([
'changeBanner' => true,
], $request, $salesChannelContext, $context);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/set-banner-text", name="storefront.account.set.banner.text", methods={"POST"})
*/
public function changeBannerText(Request $request, SalesChannelContext $salesChannelContext, Context $context): Response
{
$websiteId = $request->get('websiteId');
if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
return $this->redirectToRoute('storefront.account.change.banner', ['websiteId' => $websiteId]);
}
/** @var EntityRepositoryInterface $websiteRepository */
$websiteRepository = $this->container->get('cio_website.repository');
$website = $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $websiteId)), $salesChannelContext->getContext())->first();
if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
return $this->redirectToRoute('storefront.account.change.banner.text', ['websiteId' => $websiteId]);
}
$websiteRepository->update([
[
'id' => $website->getId(),
'bannerText' => $request->request->get('bannerText'),
'bannerTextColor' => $request->request->get('color'),
'bannerTextBgColor' => $request->request->get('bgcolor')
]
], $salesChannelContext->getContext());
return $this->redirectToRoute('storefront.account.website.collection', ['websiteId' => $websiteId]);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/change-stammdaten", name="storefront.account.change.stammdaten", methods={"GET"})
*/
public function getStammdatenChangeTemplate(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
if ($salesChannelContext->getCustomer() === null) {
return $this->redirectToRoute('frontend.account.login.page');
}
return $this->getTemplate([
'changeStammdaten' => true,
], $request, $salesChannelContext, $context);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/change-service", name="storefront.account.change.service", methods={"GET"})
*/
public function getServiceChangeTemplate(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
if ($salesChannelContext->getCustomer() === null) {
return $this->redirectToRoute('frontend.account.login.page');
}
return $this->getTemplate([
'changeService' => true,
], $request, $salesChannelContext, $context);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/change-team", name="storefront.account.change.team", methods={"GET"})
*/
public function getTeamChangeTemplate(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
if ($salesChannelContext->getCustomer() === null) {
return $this->redirectToRoute('frontend.account.login.page');
}
return $this->getTemplate([
'changeTeam' => true,
], $request, $salesChannelContext, $context);
}
protected function getTemplate(array $data, Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
$page = $this->pageLoader->load($request, $salesChannelContext);
$masterdatasForCustomer = $this->masterdataService->getMasterdatasForCustomer($salesChannelContext->getCustomer());
$masterdatasForCustomerIds = array_map(function (MasterdataEntity $masterdataEntity) { return $masterdataEntity->getId(); }, $masterdatasForCustomer->getElements());
$selectableWebsites = [];
/** @var MasterdataEntity $masterdataForCustomer */
foreach ($masterdatasForCustomer as $masterdataForCustomer) {
$website = $this->writeWebsiteData->getWebsiteEntity($context, [$masterdataForCustomer->getId()]);
if ($website instanceof CioWebsiteEntity) {
$selectableWebsites[] = [
'websiteId' => $website->getId(),
'masterdataName' => $masterdataForCustomer->getName(),
'masterdatVpNumber' => $masterdataForCustomer->getVpNummer()
];
}
}
/** @var CioWebsiteEntity $websiteEntity */
$websiteEntity = $this->writeWebsiteData->getWebsiteEntity($context, $masterdatasForCustomerIds, $request->get('websiteId'));
if (!$websiteEntity instanceof CioWebsiteEntity) {
return $this->renderStorefront(
'@CioEweLandingCreator/storefront/page/account/landingpagemanager.html.twig',
array_merge($data, [
'page' => $page,
'stammDaten' => null,
'selectMasterdata' => $selectableWebsites,
'currentSelectWebsite' => 0,
'website' => null,
'storefrontApiBaseUrl' => getenv('APP_URL') . '/',
])
);
}
$masterData = $this->masterdataService->getMasterdataById($websiteEntity->getMasterdataId());
return $this->renderStorefront(
'@CioEweLandingCreator/storefront/page/account/landingpagemanager.html.twig',
array_merge($data, [
'page' => $page,
'stammDaten' => $masterData,
'selectMasterdata' => $selectableWebsites,
'currentSelectWebsite' => $websiteEntity,
'website' => $websiteEntity,
'storefrontApiBaseUrl' => getenv('APP_URL') . '/',
])
);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/change-kundenstimme", name="storefront.account.change.kundenstimme", methods={"GET"})
*/
public function getKundenstimmeChangeTemplate(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
if ($salesChannelContext->getCustomer() === null) {
return $this->redirectToRoute('frontend.account.login.page');
}
return $this->getTemplate([
'changeKundenstimme' => true,
], $request, $salesChannelContext, $context);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/change-parken", name="storefront.account.change.parken", methods={"GET"})
*/
public function getParkenChangeTemplate(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
if ($salesChannelContext->getCustomer() === null) {
return $this->redirectToRoute('frontend.account.login.page');
}
return $this->getTemplate([
'changeParken' => true,
], $request, $salesChannelContext, $context);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/change-news", name="storefront.account.change.news", methods={"GET"})
*/
public function getNewsChangeTemplate(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
if ($salesChannelContext->getCustomer() === null) {
return $this->redirectToRoute('frontend.account.login.page');
}
return $this->getTemplate([
'changeNews' => true,
], $request, $salesChannelContext, $context);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/create-news", name="storefront.account.create.news", methods={"GET"})
*/
public function getNewsCreationTemplate(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
if ($salesChannelContext->getCustomer() === null) {
return $this->redirectToRoute('frontend.account.login.page');
}
return $this->getTemplate([
'createNews' => true,
], $request, $salesChannelContext, $context);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/change-single-news/{newsId}", name="storefront.account.change.single.news", methods={"GET"})
*/
public function getChangeSingleNewsTemplate(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
if ($salesChannelContext->getCustomer() === null) {
return $this->redirectToRoute('frontend.account.login.page');
}
/** @var EntityRepositoryInterface $websiteNewsRepository */
$websiteNewsRepository = $this->container->get('cio_website_news.repository');
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('id', $request->get('newsId')));
$news = $websiteNewsRepository->search($criteria, $salesChannelContext->getContext())->first();
return $this->getTemplate([
'changeSingleNews' => true,
'news' => $news
], $request, $salesChannelContext, $context);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/set-socials", name="storefront.account.set.socials", methods={"POST"})
*/
public function setSocialLinks(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
$websiteId = $request->get('websiteId');
$sociallinks = $request->request->get('stammdaten');
if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
return $this->redirectToRoute('storefront.account.change.stammdaten', ['websiteId' => $websiteId]);
}
/** @var EntityRepositoryInterface $websiteRepository */
$websiteRepository = $this->container->get('cio_website.repository');
/** @var EntityRepositoryInterface $websiteSocialMediaRepository */
$websiteSocialMediaRepository = $this->container->get('cio_website_social_media.repository');
$website = $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $websiteId)), $salesChannelContext->getContext())->first();
if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
return $this->redirectToRoute('storefront.account.change.stammdaten', ['websiteId' => $websiteId]);
}
$websiteRepository->update(
[
[
'id' => $website->getId(),
'telephoneHeaderActive' => $request->request->get('showtelephoneheader') == 'true' ? true : false,
'impressum' => $request->request->get('impressum'),
'datenschutz' => $request->request->get('datenschutz'),
'agb' => $request->request->get('agb')
]
], $salesChannelContext->getContext());
if (is_array($sociallinks)) {
foreach ($sociallinks as $sociallink) {
if (key_exists('id', $sociallink)) {
if ($sociallink['id'] === 'new') {
$websiteSocialMediaRepository->create([
[
'id' => Uuid::randomHex(),
'icon' => $sociallink['icon'],
'link' => $sociallink['link'],
'websiteId' => $websiteId
]
], $salesChannelContext->getContext());
}
if (is_string($sociallink['id']) && Uuid::isValid($sociallink['id'])) {
$websiteSocialMediaRepository->update([
[
'id' => $sociallink['id'],
'icon' => $sociallink['icon'],
'link' => $sociallink['link']
]
], $salesChannelContext->getContext());
}
}
}
}
return $this->redirectToRoute('storefront.account.change.stammdaten', ['websiteId' => $websiteId]);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/set-team", name="storefront.account.set.team", methods={"POST"})
*/
public function setTeam(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
$websiteId = $request->get('websiteId');
$employees = $request->request->get('team');
if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
return $this->redirectToRoute('storefront.account.change.team', ['websiteId' => $websiteId]);
}
/** @var EntityRepositoryInterface $websiteRepository */
$websiteRepository = $this->container->get('cio_website.repository');
/** @var EntityRepositoryInterface $websiteMitarbeiterRepository */
$websiteMitarbeiterRepository = $this->container->get('cio_website_mitarbeiter.repository');
$website = $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $websiteId)), $salesChannelContext->getContext())->first();
if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
return $this->redirectToRoute('storefront.account.change.team', ['websiteId' => $websiteId]);
}
$websiteRepository->update([
[
'id' => $website->getId(),
'mitarbeiterActive' => $request->request->get('showteam') == 'true' ? true : false,
'fullScreenTeam' => $request->request->get('fullscreenteam') == 'true' ? true : false
]
], $salesChannelContext->getContext());
if (is_array($employees)) {
foreach ($employees as $employee) {
if (key_exists('id', $employee)) {
if ($employee['id'] === 'new') {
$websiteMitarbeiterRepository->create([
[
'id' => Uuid::randomHex(),
'name' => $employee['name'],
'position' => $employee['position'],
'websiteId' => $website->getId(),
'mediaId' => key_exists('media', $employee) && is_string($employee['media']) && Uuid::isValid($employee['media']) ? $employee['media'] : null,
'orderNumber' => (int)$employee['orderNumber']
]
], $salesChannelContext->getContext());
}
if (is_string($employee['id']) && Uuid::isValid($employee['id'])) {
$websiteMitarbeiterRepository->update([
[
'id' => $employee['id'],
'name' => $employee['name'],
'position' => $employee['position'],
'mediaId' => key_exists('media', $employee) && is_string($employee['media']) && Uuid::isValid($employee['media']) ? $employee['media'] : null,
'orderNumber' => (int)$employee['orderNumber']
]
], $salesChannelContext->getContext());
}
}
}
}
return $this->redirectToRoute('storefront.account.change.team', ['websiteId' => $websiteId]);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/{employeeId}/remove-team", name="storefront.account.remove.team", methods={"GET"})
*/
public function removeTeam(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
$websiteId = $request->get('websiteId');
$employees = $request->request->get('team');
if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
return $this->redirectToRoute('storefront.account.change.team', ['websiteId' => $websiteId]);
}
/** @var EntityRepositoryInterface $websiteMitarbeiterRepository */
$websiteMitarbeiterRepository = $this->container->get('cio_website_mitarbeiter.repository');
/** @var CioWebsiteMitarbeiterEntity $employee */
$employee = $websiteMitarbeiterRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $request->get('employeeId')))->addAssociation('website'), $salesChannelContext->getContext())->first();
if (!$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $employee->getWebsite())) {
return $this->redirectToRoute('storefront.account.change.team', ['websiteId' => $websiteId]);
}
$websiteMitarbeiterRepository->delete([
[
'id' => $request->get('employeeId')
]
], $salesChannelContext->getContext());
return $this->redirectToRoute('storefront.account.website.collection', ['websiteId' => $websiteId]);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/set-service", name="storefront.account.set.service", methods={"POST"})
*/
public function setService(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
$websiteId = $request->get('websiteId');
$services = $request->request->get('service');
/** @var EntityRepositoryInterface $websiteRepository */
$websiteRepository = $this->container->get('cio_website.repository');
/** @var EntityRepositoryInterface $websiteServiceRepository */
$websiteServiceRepository = $this->container->get('cio_website_service.repository');
$website = $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $websiteId)), $salesChannelContext->getContext())->first();
if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
return $this->redirectToRoute('storefront.account.change.service', ['websiteId' => $websiteId]);
}
$websiteRepository->update([
[
'id' => $website->getId(),
'serviceActive' => $request->request->get('showservice') == 'true' ? true : false
]
], $salesChannelContext->getContext());
if (is_array($services)) {
foreach ($services as $service) {
if (key_exists('id', $service)) {
if ($service['id'] === 'new') {
$websiteServiceRepository->create([
[
'id' => Uuid::randomHex(),
'name' => $service['name'],
'description' => $service['description'],
'websiteId' => $website->getId(),
'orderNumber' => (int)$service['orderNumber']
]
], $salesChannelContext->getContext());
}
if (is_string($service['id']) && Uuid::isValid($service['id'])) {
$websiteServiceRepository->update([
[
'id' => $service['id'],
'name' => $service['name'],
'description' => $service['description'],
'orderNumber' => (int)$service['orderNumber']
]
], $salesChannelContext->getContext());
}
}
}
}
return $this->redirectToRoute('storefront.account.change.service', ['websiteId' => $websiteId]);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/{serviceId}/remove-service", name="storefront.account.remove.service", methods={"GET"})
*/
public function removeService(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
$websiteId = $request->get('websiteId');
$services = $request->request->get('service');
$serviceId = $request->get('serviceId');
if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
return $this->redirectToRoute('storefront.account.change.service', ['websiteId' => $websiteId, 'serviceId' => $serviceId]);
}
/** @var EntityRepositoryInterface $websiteServiceRepository */
$websiteServiceRepository = $this->container->get('cio_website_service.repository');
/** @var CioWebsiteServiceEntity $service */
$service = $websiteServiceRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $request->get('serviceId')))->addAssociation('website'), $salesChannelContext->getContext())->first();
if (!$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $service->getWebsite())) {
return $this->redirectToRoute('storefront.account.change.service', ['websiteId' => $websiteId, 'serviceId' => $serviceId]);
}
$websiteServiceRepository->delete([
[
'id' => $serviceId
]
], $salesChannelContext->getContext());
return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/set-kundenstimmen", name="storefront.account.set.kundenstimmen", methods={"POST"})
*/
public function setKundenstimmen(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
$websiteId = $request->get('websiteId');
$kundenstimmen = $request->request->get('kundenstimmen');
/** @var EntityRepositoryInterface $websiteRepository */
$websiteRepository = $this->container->get('cio_website.repository');
/** @var EntityRepositoryInterface $websiteKundenstimmenRepository */
$websiteKundenstimmenRepository = $this->container->get('cio_website_kundenstimmen.repository');
$website = $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $websiteId)), $salesChannelContext->getContext())->first();
if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
return $this->redirectToRoute('storefront.account.change.kundenstimme', ['websiteId' => $websiteId]);
}
$websiteRepository->update([
[
'id' => $website->getId(),
'kundenstimmenActive' => $request->request->get('showkundenstimmen') == 'true' ? true : false
]
], $salesChannelContext->getContext());
if (is_array($kundenstimmen)) {
foreach ($kundenstimmen as $kundenstimme) {
if (key_exists('id', $kundenstimme)) {
if ($kundenstimme['id'] === 'new') {
$websiteKundenstimmenRepository->create([
[
'id' => Uuid::randomHex(),
'description' => $kundenstimme['description'],
'websiteId' => $website->getId(),
'orderNumber' => (int)$kundenstimme['orderNumber']
]
], $salesChannelContext->getContext());
}
if (is_string($kundenstimme['id']) && Uuid::isValid($kundenstimme['id'])) {
$websiteKundenstimmenRepository->update([
[
'id' => $kundenstimme['id'],
'description' => $kundenstimme['description'],
'orderNumber' => (int)$kundenstimme['orderNumber']
]
], $salesChannelContext->getContext());
}
}
}
}
return $this->redirectToRoute('storefront.account.change.kundenstimme', ['websiteId' => $websiteId]);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/{kundenstimmenId}/remove-kundenstimme", name="storefront.account.remove.kundenstimme", methods={"GET"})
*/
public function removeKundenstimme(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
$websiteId = $request->get('websiteId');
$kundenstimmen = $request->request->get('kundenstimmen');
if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
return $this->redirectToRoute('storefront.account.change.kundenstimme', ['websiteId' => $websiteId]);
}
/** @var EntityRepositoryInterface $websiteKundenstimmenRepository */
$websiteKundenstimmenRepository = $this->container->get('cio_website_kundenstimmen.repository');
/** @var CioWebsiteKundenstimmenEntity $kundenstimme */
$kundenstimme = $websiteKundenstimmenRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $request->get('kundenstimmenId')))->addAssociation('website'), $salesChannelContext->getContext())->first();
if (!$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $kundenstimme->getWebsite())) {
return $this->redirectToRoute('storefront.account.change.kundenstimme', ['websiteId' => $websiteId]);
}
$websiteKundenstimmenRepository->delete([
[
'id' => $request->get('kundenstimmenId')
]
], $salesChannelContext->getContext());
return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/set-parken", name="storefront.account.set.parken", methods={"POST"})
*/
public function setParken(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
$websiteId = $request->get('websiteId');
if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
return $this->redirectToRoute('storefront.account.change.parken', ['websiteId' => $websiteId]);
}
/** @var EntityRepositoryInterface $websiteRepository */
$websiteRepository = $this->container->get('cio_website.repository');
$website = $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $websiteId)), $salesChannelContext->getContext())->first();
if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
return $this->redirectToRoute('storefront.account.change.parken', ['websiteId' => $websiteId]);
}
$data = [
'id' => $website->getId(),
'parkenActive' => $request->request->get('showparken') == 'true' ? true : false,
'parkenMediaId' => is_string($request->request->get('parkenMediaId')) && Uuid::isValid($request->request->get('parkenMediaId')) ? $request->request->get('parkenMediaId') : $website->getParkenMediaId(),
'parkenDescription' => $request->request->get('parkendescription'),
'parkenDescriptionActive' => $request->request->get('showparkendescription') == 'true' ? true : false
];
$websiteRepository->update([
$data
], $salesChannelContext->getContext());
return $this->redirectToRoute('storefront.account.change.parken', ['websiteId' => $websiteId]);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/remove-parken", name="storefront.account.remove.parken", methods={"GET"})
*/
public function removeParken(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
$websiteId = $request->get('websiteId');
if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
return $this->redirectToRoute('storefront.account.change.parken', ['websiteId' => $websiteId]);
}
/** @var EntityRepositoryInterface $websiteRepository */
$websiteRepository = $this->container->get('cio_website.repository');
/** @var CioWebsiteEntity $parken */
$parken = $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $request->get('websiteId'))), $salesChannelContext->getContext())->first();
if (!$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $parken)) {
return $this->redirectToRoute('storefront.account.change.parken', ['websiteId' => $websiteId]);
}
$websiteRepository->update([
[
'id' => $request->get('websiteId'),
'parkenMediaId' => null
]
], $salesChannelContext->getContext());
return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/create-news", name="storefront.account.store.news", methods={"POST"})
*/
public function storeNews(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
if ($request->request->get('newsCreate') === 'newsCreate') {
$websiteId = $request->get('websiteId');
if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
return $this->redirectToRoute('storefront.account.change.team', ['websiteId' => $websiteId]);
}
/** @var EntityRepositoryInterface $websiteRepository */
$websiteRepository = $this->container->get('cio_website.repository');
/** @var CioWebsiteEntity $website */
$website = $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $websiteId)), $salesChannelContext->getContext())->first();
if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
throw new NotFoundHttpException();
}
/** @var EntityRepositoryInterface $websiteNewsRepository */
$websiteNewsRepository = $this->container->get('cio_website_news.repository');
$newsEntry = [
'header' => $request->request->get('header'),
'description' => $request->request->get('description'),
'websiteId' => $website->getId(),
'mediaId' => empty($request->request->get('media')) ? null : $request->request->get('media')
];
$websiteNewsRepository->create([
$newsEntry
], $salesChannelContext->getContext());
}
return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/update-news/{newsId}", name="storefront.account.update.news", methods={"POST"})
*/
public function updateNews(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
if ($request->request->get('newsCreate') === 'newsCreate') {
$websiteId = $request->get('websiteId');
if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
return $this->redirectToRoute('storefront.account.change.team', ['websiteId' => $websiteId]);
}
/** @var EntityRepositoryInterface $websiteRepository */
$websiteRepository = $this->container->get('cio_website.repository');
/** @var CioWebsiteEntity $website */
$website = $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $websiteId)), $salesChannelContext->getContext())->first();
if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
throw new NotFoundHttpException();
}
/** @var EntityRepositoryInterface $websiteNewsRepository */
$websiteNewsRepository = $this->container->get('cio_website_news.repository');
/** @var CioWebsiteNewsEntity $websiteNews */
$websiteNews = $websiteNewsRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $request->get('newsId'))), $salesChannelContext->getContext())->first();
if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
throw new NotFoundHttpException();
}
$data = [
'id' => $websiteNews->getId(),
'header' => $request->request->get('header'),
'description' => $request->request->get('description'),
'websiteId' => $website->getId(),
'mediaId' => $request->request->get('media') ? $request->request->get('media') : $websiteNews->getMediaId()
];
if ($request->request->get('media') === 'clear') {
$data['mediaId'] = null;
}
$websiteNewsRepository->update([
$data
], $salesChannelContext->getContext());
return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
}
return $this->redirectToRoute('storefront.account.website.collection');
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/{newsId}/remove-news", name="storefront.account.remove.news", methods={"GET"})
*/
public function removeNews(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
$websiteId = $request->get('websiteId');
$sociallinks = $request->request->get('stammdaten');
if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
return $this->redirectToRoute('storefront.account.website.collection');
}
/** @var EntityRepositoryInterface $websiteNewsRepository */
$websiteNewsRepository = $this->container->get('cio_website_news.repository');
/** @var CioWebsiteNewsEntity $employee */
$websiteNews = $websiteNewsRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $request->get('newsId')))->addAssociation('website'), $salesChannelContext->getContext())->first();
if (!$websiteNews instanceof CioWebsiteNewsEntity || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $websiteNews->getWebsite())) {
return $this->redirectToRoute('storefront.account.website.collection');
}
$websiteNewsRepository->delete([
[
'id' => $websiteNews->getId()
]
], $salesChannelContext->getContext());
return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{sociallinkId}/remove-sociallink", name="storefront.account.remove.sociallink", methods={"GET"})
*/
public function removeSociallink(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
$websiteId = $request->get('websiteId');
$sociallinks = $request->request->get('stammdaten');
if (!$salesChannelContext->getCustomer() instanceof CustomerEntity) {
return $this->redirectToRoute('storefront.account.change.stammdaten', ['websiteId' => $websiteId]);
}
/** @var EntityRepositoryInterface $websiteSocialMediaRepository */
$websiteSocialMediaRepository = $this->container->get('cio_website_social_media.repository');
/** @var CioWebsiteSocialMediaEntity $employee */
$sociallink = $websiteSocialMediaRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $request->get('sociallinkId')))->addAssociation('website'), $salesChannelContext->getContext())->first();
if (!$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $sociallink->getWebsite())) {
return $this->redirectToRoute('storefront.account.change.stammdaten', ['websiteId' => $websiteId]);
}
$websiteSocialMediaRepository->delete([
[
'id' => $request->get('sociallinkId')
]
], $salesChannelContext->getContext());
return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
}
/**
* @param Request $request
* @param SalesChannelContext $salesChannelContext
*
* @RouteScope (scopes={"storefront"})
* @Route ("/account/{websiteId}/update-news-checkbox", name="storefront.account.update.news.checkbox", methods={"POST"})
*/
public function updateNewsCheckbox(Request $request, SalesChannelContext $salesChannelContext, Context $context)
{
$websiteId = $request->get('websiteId');
/** @var EntityRepositoryInterface $websiteRepository */
$websiteRepository = $this->container->get('cio_website.repository');
$website = $websiteRepository->search((new Criteria())->addFilter(new EqualsFilter('id', $websiteId)), $salesChannelContext->getContext())->first();
if ((!$website instanceof CioWebsiteEntity) || !$this->checkCustomerPermissions($salesChannelContext->getCustomer(), $website)) {
return $this->redirectToRoute('storefront.account.change.news', ['websiteId' => $websiteId]);
}
$websiteRepository->update([
[
'id' => $website->getId(),
'newsActive' => $request->request->get('shownews') == 'true' ? true : false
]
], $salesChannelContext->getContext());
return $this->redirectToRoute('storefront.account.website.collection', [ 'websiteId' => $websiteId ]);
}
protected function checkCustomerPermissions(CustomerEntity $customer, CioWebsiteEntity $website): bool
{
$websiteMasterdataId = $website->getMasterdataId();
$customerMasterdata = $this->getCustomFieldValue($customer, 'masterdata', []);
foreach ($customerMasterdata as $customerMasterdataId) {
if (is_array($customerMasterdataId) && key_exists('id', $customerMasterdataId) && $customerMasterdataId['id'] === $websiteMasterdataId) {
return true;
}
}
return false;
}
protected function getCustomFieldValue($entity, $key, $default = null)
{
if (!is_array($entity->getCustomFields()) || !key_exists($key, $entity->getCustomFields())) {
return $default;
}
return $entity->getCustomFields()[$key];
}
}