src/Core/Content/Sitemap/ScheduledTask/SitemapMessageHandler.php line 39

  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Content\Sitemap\ScheduledTask;
  3. use Psr\Log\LoggerInterface;
  4. use Shopware\Core\Content\Sitemap\Exception\AlreadyLockedException;
  5. use Shopware\Core\Content\Sitemap\Service\SitemapExporterInterface;
  6. use Shopware\Core\Framework\Log\Package;
  7. use Shopware\Core\System\SalesChannel\Context\AbstractSalesChannelContextFactory;
  8. use Shopware\Core\System\SalesChannel\Context\SalesChannelContextService;
  9. use Shopware\Core\System\SystemConfig\SystemConfigService;
  10. use Symfony\Component\Messenger\Attribute\AsMessageHandler;
  11. /**
  12.  * @internal
  13.  */
  14. #[AsMessageHandler]
  15. #[Package('sales-channel')]
  16. final class SitemapMessageHandler
  17. {
  18.     /**
  19.      * @internal
  20.      */
  21.     public function __construct(
  22.         private readonly AbstractSalesChannelContextFactory $salesChannelContextFactory,
  23.         private readonly SitemapExporterInterface $sitemapExporter,
  24.         private readonly LoggerInterface $logger,
  25.         private readonly SystemConfigService $systemConfigService,
  26.     ) {
  27.     }
  28.     public function __invoke(SitemapMessage $message): void
  29.     {
  30.         $sitemapRefreshStrategy $this->systemConfigService->getInt('core.sitemap.sitemapRefreshStrategy');
  31.         if ($sitemapRefreshStrategy !== SitemapExporterInterface::STRATEGY_SCHEDULED_TASK) {
  32.             return;
  33.         }
  34.         $this->generate($message);
  35.     }
  36.     private function generate(SitemapMessage $message): void
  37.     {
  38.         if ($message->getLastSalesChannelId() === null || $message->getLastLanguageId() === null) {
  39.             return;
  40.         }
  41.         $context $this->salesChannelContextFactory->create(''$message->getLastSalesChannelId(), [SalesChannelContextService::LANGUAGE_ID => $message->getLastLanguageId()]);
  42.         try {
  43.             $this->sitemapExporter->generate($contexttrue$message->getLastProvider(), $message->getNextOffset());
  44.         } catch (AlreadyLockedException $exception) {
  45.             $this->logger->error(sprintf('ERROR: %s'$exception->getMessage()));
  46.         }
  47.     }
  48. }