<?php
declare(strict_types=1);
namespace NetInventors\NetiNextCmsElementBuilder\Subscriber;
use NetInventors\NetiNextCmsElementBuilder\Service\ElementSyncService;
use Shopware\Core\Framework\Plugin\Event\PluginPostActivateEvent;
use Shopware\Core\Framework\Plugin\Event\PluginPostDeactivateEvent;
use Shopware\Core\Framework\Plugin\Event\PluginPostInstallEvent;
use Shopware\Core\Framework\Plugin\Event\PluginPostUninstallEvent;
use Shopware\Core\Framework\Plugin\Event\PluginPostUpdateEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class PluginLifecycleSubscriber implements EventSubscriberInterface
{
private ElementSyncService $elementSyncService;
public function __construct(
ElementSyncService $elementSyncService
) {
$this->elementSyncService = $elementSyncService;
}
public static function getSubscribedEvents(): array
{
return [
PluginPostInstallEvent::class => 'onPluginInstalled',
PluginPostUninstallEvent::class => 'onPluginUninstalled',
PluginPostUpdateEvent::class => 'onPluginUpdated',
PluginPostActivateEvent::class => 'onPluginActivated',
PluginPostDeactivateEvent::class => 'onPluginDeactivated',
];
}
public function onPluginActivated(PluginPostActivateEvent $event): void
{
$plugin = $event->getPlugin();
$context = $event->getContext()->getContext();
$this->elementSyncService->syncForPlugin($plugin, $context);
}
public function onPluginDeactivated(PluginPostDeactivateEvent $event): void
{
$plugin = $event->getPlugin();
$this->elementSyncService->disablePluginElements($plugin);
}
public function onPluginInstalled(PluginPostInstallEvent $event): void
{
$plugin = $event->getPlugin();
$context = $event->getContext()->getContext();
$this->elementSyncService->syncForPlugin($plugin, $context);
}
public function onPluginUninstalled(PluginPostUninstallEvent $event): void
{
$plugin = $event->getPlugin();
$this->elementSyncService->disablePluginElements($plugin);
}
public function onPluginUpdated(PluginPostUpdateEvent $event): void
{
$plugin = $event->getPlugin();
$context = $event->getContext()->getContext();
$this->elementSyncService->syncForPlugin($plugin, $context);
}
}