custom/plugins/DneCustomCssJs/src/Subscriber/ThemeCompilerSubscriber.php line 34

  1. <?php declare(strict_types=1);
  2. namespace Dne\CustomCssJs\Subscriber;
  3. use Shopware\Core\Framework\Context;
  4. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Aggregation\Bucket\TermsAggregation;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\AggregationResult\Bucket\TermsResult;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\MultiFilter;
  10. use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
  11. use Shopware\Storefront\Event\ThemeCompilerConcatenatedScriptsEvent;
  12. use Shopware\Storefront\Event\ThemeCompilerConcatenatedStylesEvent;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. class ThemeCompilerSubscriber implements EventSubscriberInterface
  15. {
  16.     private EntityRepository $repository;
  17.     public function __construct(EntityRepository $repository)
  18.     {
  19.         $this->repository $repository;
  20.     }
  21.     public static function getSubscribedEvents(): array
  22.     {
  23.         return [
  24.             ThemeCompilerConcatenatedStylesEvent::class => 'onGetConcatenatedStyles',
  25.             ThemeCompilerConcatenatedScriptsEvent::class => 'onGetConcatenatedScripts',
  26.         ];
  27.     }
  28.     public function onGetConcatenatedStyles(ThemeCompilerConcatenatedStylesEvent $event): void
  29.     {
  30.         $styles $event->getConcatenatedStyles();
  31.         $additionalStyles $this->getResources('css'$event->getSalesChannelId());
  32.         $event->setConcatenatedStyles($styles \PHP_EOL $additionalStyles);
  33.     }
  34.     public function onGetConcatenatedScripts(ThemeCompilerConcatenatedScriptsEvent $event): void
  35.     {
  36.         $scripts $event->getConcatenatedScripts();
  37.         $additionalScripts $this->getResources('js'$event->getSalesChannelId());
  38.         $event->setConcatenatedScripts($scripts \PHP_EOL $additionalScripts);
  39.     }
  40.     public function getResources(string $fieldstring $salesChannelId): string
  41.     {
  42.         $criteria = new Criteria();
  43.         $criteria->setLimit(1);
  44.         $criteria->addFilter(
  45.             new MultiFilter(MultiFilter::CONNECTION_AND, [
  46.                 new EqualsFilter('active'true),
  47.                 new MultiFilter(MultiFilter::CONNECTION_OR, [
  48.                     new EqualsFilter('salesChannels.id'$salesChannelId),
  49.                     new EqualsFilter('salesChannels.id'null),
  50.                 ]),
  51.             ])
  52.         );
  53.         $criteria->addAggregation(
  54.             new TermsAggregation(
  55.                 'resources',
  56.                 $field,
  57.                 0,
  58.                 new FieldSorting('name'FieldSorting::ASCENDING)
  59.             )
  60.         );
  61.         $result $this->repository->search($criteriaContext::createDefaultContext());
  62.         /** @var TermsResult $aggregation */
  63.         $aggregation $result->getAggregations()->get('resources');
  64.         $contents '';
  65.         foreach ($aggregation->getBuckets() as $bucket) {
  66.             $contents .= $bucket->getKey() . \PHP_EOL;
  67.         }
  68.         return $contents;
  69.     }
  70. }