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

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