vendor/shopware/storefront/Theme/Subscriber/UpdateSubscriber.php line 48
<?php declare(strict_types=1);namespace Shopware\Storefront\Theme\Subscriber;use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;use Shopware\Core\Framework\Log\Package;use Shopware\Core\Framework\Plugin\PluginLifecycleService;use Shopware\Core\Framework\Update\Event\UpdatePostFinishEvent;use Shopware\Core\System\SalesChannel\SalesChannelEntity;use Shopware\Storefront\Theme\Exception\ThemeCompileException;use Shopware\Storefront\Theme\ThemeCollection;use Shopware\Storefront\Theme\ThemeEntity;use Shopware\Storefront\Theme\ThemeLifecycleService;use Shopware\Storefront\Theme\ThemeService;use Symfony\Component\EventDispatcher\EventSubscriberInterface;/*** @internal*/#[Package('storefront')]class UpdateSubscriber implements EventSubscriberInterface{/*** @internal*/public function __construct(private readonly ThemeService $themeService,private readonly ThemeLifecycleService $themeLifecycleService,private readonly EntityRepository $salesChannelRepository) {}/*** @return array<string, string|array{0: string, 1: int}|list<array{0: string, 1?: int}>>*/public static function getSubscribedEvents(): array{return [UpdatePostFinishEvent::class => 'updateFinished',];}/*** @internal*/public function updateFinished(UpdatePostFinishEvent $event): void{$context = $event->getContext();$this->themeLifecycleService->refreshThemes($context);if ($context->hasState(PluginLifecycleService::STATE_SKIP_ASSET_BUILDING)) {return;}$criteria = new Criteria();$criteria->addFilter(new EqualsFilter('active', true));$criteria->getAssociation('themes')->addFilter(new EqualsFilter('active', true));$alreadyCompiled = [];/** @var SalesChannelEntity $salesChannel */foreach ($this->salesChannelRepository->search($criteria, $context) as $salesChannel) {$themes = $salesChannel->getExtension('themes');if (!$themes instanceof ThemeCollection) {continue;}$failedThemes = [];/** @var ThemeEntity $theme */foreach ($themes as $theme) {// NEXT-21735 - his is covered randomly// @codeCoverageIgnoreStartif (\in_array($theme->getId(), $alreadyCompiled, true) !== false) {continue;}// @codeCoverageIgnoreEndtry {$alreadyCompiled += $this->themeService->compileThemeById($theme->getId(), $context);} catch (ThemeCompileException $e) {$failedThemes[] = $theme->getName();$alreadyCompiled[] = $theme->getId();}}if (!empty($failedThemes)) {$event->appendPostUpdateMessage('Theme(s): ' . implode(', ', $failedThemes) . ' could not be recompiled.');}}}}