<?php declare(strict_types=1);
namespace Shopware\Core\Content\Category\Subscriber;
use Shopware\Core\Content\Category\CategoryDefinition;
use Shopware\Core\Content\Category\CategoryEntity;
use Shopware\Core\Content\Category\CategoryEvents;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
use Shopware\Core\Framework\Log\Package;
use Shopware\Core\System\SalesChannel\Entity\SalesChannelEntityLoadedEvent;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* @deprecated tag:v6.5.0 - reason:becomes-internal - EventSubscribers will become internal in v6.5.0
*/
#[Package('content')]
class CategorySubscriber implements EventSubscriberInterface
{
private SystemConfigService $systemConfigService;
/**
* @internal
*/
public function __construct(
SystemConfigService $systemConfigService
) {
$this->systemConfigService = $systemConfigService;
}
public static function getSubscribedEvents(): array
{
return [
CategoryEvents::CATEGORY_LOADED_EVENT => 'entityLoaded',
'sales_channel.' . CategoryEvents::CATEGORY_LOADED_EVENT => 'entityLoaded',
];
}
public function entityLoaded(EntityLoadedEvent $event): void
{
$salesChannelId = $event instanceof SalesChannelEntityLoadedEvent ? $event->getSalesChannelContext()->getSalesChannelId() : null;
/** @var CategoryEntity $category */
foreach ($event->getEntities() as $category) {
$categoryCmsPageId = $category->getCmsPageId();
// continue if cms page is given and was not set in the subscriber
if ($categoryCmsPageId !== null && !$category->getCmsPageIdSwitched()) {
continue;
}
// continue if cms page is given and not the overall default
if ($categoryCmsPageId !== null && $categoryCmsPageId !== $this->systemConfigService->get(CategoryDefinition::CONFIG_KEY_DEFAULT_CMS_PAGE_CATEGORY)) {
continue;
}
$userDefault = $this->systemConfigService->get(CategoryDefinition::CONFIG_KEY_DEFAULT_CMS_PAGE_CATEGORY, $salesChannelId);
// cms page is not given in system config
if ($userDefault === null) {
continue;
}
/** @var string $userDefault */
$category->setCmsPageId($userDefault);
// mark cms page as set in the subscriber
$category->setCmsPageIdSwitched(true);
}
}
}