vendor/shopware/storefront/Theme/Subscriber/UnusedMediaSubscriber.php line 33
<?php declare(strict_types=1);
namespace Shopware\Storefront\Theme\Subscriber;
use Shopware\Core\Content\Media\Event\UnusedMediaSearchEvent;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\Log\Package;
use Shopware\Core\Framework\Uuid\Uuid;
use Shopware\Storefront\Theme\ThemeService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* @internal
*/
#[Package('storefront')]
class UnusedMediaSubscriber implements EventSubscriberInterface
{
public function __construct(
private readonly EntityRepository $themeRepository,
private readonly ThemeService $themeService
) {
}
public static function getSubscribedEvents(): array
{
return [
UnusedMediaSearchEvent::class => 'removeUsedMedia',
];
}
public function removeUsedMedia(UnusedMediaSearchEvent $event): void
{
$context = Context::createDefaultContext();
/** @var array<string> $allThemeIds */
$allThemeIds = $this->themeRepository->searchIds(new Criteria(), $context)->getIds();
$mediaIds = [];
foreach ($allThemeIds as $themeId) {
$config = $this->themeService->getThemeConfiguration($themeId, false, $context);
foreach ($config['fields'] ?? [] as $data) {
if ($data['type'] === 'media' && $data['value'] && Uuid::isValid($data['value'])) {
$mediaIds[] = $data['value'];
}
}
}
$event->markAsUsed(array_unique($mediaIds));
}
}