custom/plugins/CioEweLandingCreator/src/Subscriber/WebsiteWrittenSubscriber.php line 73

Open in your IDE?
  1. <?php
  2. namespace CioEweLandingCreator\Subscriber;
  3. use CioEweLandingCreator\Core\Content\CioWebsiteKundenstimmen\CioWebsiteKundenstimmenEntity;
  4. use CioEweLandingCreator\Core\Content\CioWebsiteMitarbeiter\CioWebsiteMitarbeiterEntity;
  5. use CioEweLandingCreator\Core\Content\CioWebsiteNews\CioWebsiteNewsEntity;
  6. use CioEweLandingCreator\Core\Content\CioWebsiteService\CioWebsiteServiceEntity;
  7. use CioEweLandingCreator\Core\Content\CioWebsiteSocialMedia\CioWebsiteSocialMediaEntity;
  8. use GuzzleHttp\Client;
  9. use Shopware\Core\Framework\Context;
  10. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
  12. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  13. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  14. use Shopware\Core\System\SystemConfig\SystemConfigService;
  15. use Symfony\Component\DependencyInjection\ContainerInterface;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. class WebsiteWrittenSubscriber implements EventSubscriberInterface
  18. {
  19.     private ContainerInterface $container;
  20.     private SystemConfigService $systemConfigService;
  21.     public function __construct(ContainerInterface $containerSystemConfigService $systemConfigService)
  22.     {
  23.         $this->container $container;
  24.         $this->systemConfigService $systemConfigService;
  25.     }
  26.     public static function getSubscribedEvents()
  27.     {
  28.         return [
  29.             'cio_website.written' => 'onWebsiteUpdated',
  30.             'cio_website_news.written' => 'onWebsiteNewsUpdated',
  31.             'cio_website_service.written' => 'onWebsiteServiceUpdated',
  32.             'cio_website_social_media.written' => 'onWebsiteSocialUpdated',
  33.             'cio_website_mitarbeiter.written' => 'onWebsiteMitarbeiterUpdated',
  34.             'cio_website_kundenstimmen.written' => 'onWebsiteKundenstimmenUpdated'
  35.         ];
  36.     }
  37.     public function onWebsiteUpdated(EntityWrittenEvent $event)
  38.     {
  39.         $result $event->getWriteResults();
  40.         foreach ($event->getWriteResults() as $result) {
  41.             if ($result->getEntityName() === 'cio_website' && $result->getOperation() === 'update') {
  42.                 $this->clearWebsiteCache($result->getPrimaryKey());
  43.             }
  44.         }
  45.     }
  46.     public function onWebsiteNewsUpdated(EntityWrittenEvent $event)
  47.     {
  48.         $result $event->getWriteResults();
  49.         foreach ($event->getWriteResults() as $result) {
  50.             if ($result->getEntityName() === 'cio_website_news') {
  51.                 /** @var EntityRepositoryInterface $repository */
  52.                 $repository $this->container->get('cio_website_news.repository');
  53.                 /** @var ?CioWebsiteNewsEntity $news */
  54.                 $news $repository->search((new Criteria())->addFilter(new EqualsFilter('id'$result->getPrimaryKey())), $event->getContext())->first();
  55.                 if ($news instanceof CioWebsiteNewsEntity && $news->getWebsiteId()) {
  56.                     $this->clearWebsiteCache($news->getWebsiteId());
  57.                 }
  58.             }
  59.         }
  60.     }
  61.     public function onWebsiteServiceUpdated(EntityWrittenEvent $event)
  62.     {
  63.         $result $event->getWriteResults();
  64.         foreach ($event->getWriteResults() as $result) {
  65.             if ($result->getEntityName() === 'cio_website_service') {
  66.                 /** @var EntityRepositoryInterface $repository */
  67.                 $repository $this->container->get('cio_website_service.repository');
  68.                 /** @var ?CioWebsiteServiceEntity $service */
  69.                 $service $repository->search((new Criteria())->addFilter(new EqualsFilter('id'$result->getPrimaryKey())), $event->getContext())->first();
  70.                 if ($service instanceof CioWebsiteServiceEntity && $service->getWebsiteId()) {
  71.                     $this->clearWebsiteCache($service->getWebsiteId());
  72.                 }
  73.             }
  74.         }
  75.     }
  76.     public function onWebsiteSocialUpdated(EntityWrittenEvent $event)
  77.     {
  78.         $result $event->getWriteResults();
  79.         foreach ($event->getWriteResults() as $result) {
  80.             if ($result->getEntityName() === 'cio_website_social_media') {
  81.                 /** @var EntityRepositoryInterface $repository */
  82.                 $repository $this->container->get('cio_website_social_media.repository');
  83.                 /** @var ?CioWebsiteSocialMediaEntity $social */
  84.                 $social $repository->search((new Criteria())->addFilter(new EqualsFilter('id'$result->getPrimaryKey())), $event->getContext())->first();
  85.                 if ($social instanceof CioWebsiteSocialMediaEntity && $social->getWebsiteId()) {
  86.                     $this->clearWebsiteCache($social->getWebsiteId());
  87.                 }
  88.             }
  89.         }
  90.     }
  91.     public function onWebsiteMitarbeiterUpdated(EntityWrittenEvent $event)
  92.     {
  93.         $result $event->getWriteResults();
  94.         foreach ($event->getWriteResults() as $result) {
  95.             if ($result->getEntityName() === 'cio_website_mitarbeiter') {
  96.                 /** @var EntityRepositoryInterface $repository */
  97.                 $repository $this->container->get('cio_website_mitarbeiter.repository');
  98.                 /** @var ?CioWebsiteMitarbeiterEntity $mitarbeiter */
  99.                 $mitarbeiter $repository->search((new Criteria())->addFilter(new EqualsFilter('id'$result->getPrimaryKey())), $event->getContext())->first();
  100.                 if ($mitarbeiter instanceof CioWebsiteMitarbeiterEntity && $mitarbeiter->getWebsiteId()) {
  101.                     $this->clearWebsiteCache($mitarbeiter->getWebsiteId());
  102.                 }
  103.             }
  104.         }
  105.     }
  106.     public function onWebsiteKundenstimmenUpdated(EntityWrittenEvent $event)
  107.     {
  108.         $result $event->getWriteResults();
  109.         foreach ($event->getWriteResults() as $result) {
  110.             if ($result->getEntityName() === 'cio_website_kundenstimmen') {
  111.                 /** @var EntityRepositoryInterface $repository */
  112.                 $repository $this->container->get('cio_website_kundenstimmen.repository');
  113.                 /** @var ?CioWebsiteKundenstimmenEntity $kundenstimme */
  114.                 $kundenstimme $repository->search((new Criteria())->addFilter(new EqualsFilter('id'$result->getPrimaryKey())), $event->getContext())->first();
  115.                 if ($kundenstimme instanceof CioWebsiteKundenstimmenEntity && $kundenstimme->getWebsiteId()) {
  116.                     $this->clearWebsiteCache($kundenstimme->getWebsiteId());
  117.                 }
  118.             }
  119.         }
  120.     }
  121.     protected function clearWebsiteCache(string $websiteId)
  122.     {
  123.         $baseUrl $this->getConfig('cacheRefreshUrlLandingpages');
  124.         if (!empty($baseUrl)) {
  125.             $client = new Client();
  126.             $options = [];
  127.             // ignore ssl cert problems only in dev env
  128.             if ($_ENV['APP_ENV'] === 'dev') {
  129.                 $options['verify'] = false;
  130.             }
  131.             try {
  132.                 $client->request('GET'str_replace('{websiteId}'$websiteId$baseUrl), $options);
  133.             } catch (\Throwable $e) {
  134.             }
  135.         }
  136.     }
  137.     protected function getConfig($key)
  138.     {
  139.         return $this->systemConfigService->get('CioEweLandingCreator.config.' $key);
  140.     }
  141. }