custom/plugins/CodevisionMiraklConnector/src/CodevisionMiraklConnector.php line 31

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace CodevisionMiraklConnector;
  3. use CodevisionMiraklConnector\Migration\CustomFields\CustomFieldGenerator;
  4. use CodevisionMiraklConnector\Migration\Lifecycle\PluginInstaller;
  5. use CodevisionMiraklConnector\Migration\Lifecycle\PluginUninstaller;
  6. use CodevisionMiraklConnector\Migration\Payment\MiraklPaymentMethodGenerator;
  7. use CodevisionMiraklConnector\Migration\SalesChannel\SalesChannelGenerator;
  8. use CodevisionMiraklConnector\Migration\Streams\ProductStreamGenerator;
  9. use CodevisionMiraklConnector\Migration\UserConfig\OrderSearchExtension;
  10. use Doctrine\DBAL\Connection;
  11. use JMS\SerializerBundle\JMSSerializerBundle;
  12. use League\Tactician\Bundle\TacticianBundle;
  13. use Shopware\Core\Framework\Parameter\AdditionalBundleParameters;
  14. use Shopware\Core\Framework\Plugin;
  15. use Shopware\Core\Framework\Plugin\Context\ActivateContext;
  16. use Shopware\Core\Framework\Plugin\Context\InstallContext;
  17. use Shopware\Core\Framework\Plugin\Context\UninstallContext;
  18. use Shopware\Core\Framework\Plugin\Context\UpdateContext;
  19. use Symfony\Component\Config\FileLocator;
  20. use Symfony\Component\DependencyInjection\ContainerBuilder;
  21. use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
  22. use Webmozart\Assert\Assert;
  23. if (is_dir(__DIR__.'/../vendor') === true) {
  24.     include_once __DIR__.'/../vendor/autoload.php';
  25. }
  26. class CodevisionMiraklConnector extends Plugin
  27. {
  28.     private ?PluginInstaller $installer null;
  29.     public const DEBUG_MODE false;
  30.     public const SW_MIN_REQUIRED '6.4.15';
  31.     public const SW_MAX_EXCLUDED '6.5.*';
  32.     public function getAdditionalBundles(AdditionalBundleParameters $parameters): array
  33.     {
  34.         return [
  35.             new TacticianBundle(),
  36.             new JMSSerializerBundle(),
  37.         ];
  38.     }
  39.     public function build(ContainerBuilder $container): void
  40.     {
  41.         parent::build($container);
  42.         $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/Resources'));
  43.         $loader->load('services.yaml');
  44.     }
  45.     public function update(UpdateContext $updateContext): void
  46.     {
  47.         parent::update($updateContext);
  48.         /** @var Plugin\Util\PluginIdProvider $pluginIdProvider */
  49.         $pluginIdProvider $this->container->get(Plugin\Util\PluginIdProvider::class);
  50.         $pluginId $pluginIdProvider->getPluginIdByBaseClass(get_class($this), $updateContext->getContext());
  51.         (new MiraklPaymentMethodGenerator($this->container->get('payment_method.repository')))->update(
  52.             $updateContext,
  53.             $pluginId
  54.         );
  55.         $this->buildInstaller();
  56.         $this->installer->upsert($updateContext);
  57.     }
  58.     private function buildInstaller(): void {
  59.         if ($this->installer !== null) {
  60.             return;
  61.         }
  62.         $this->installer = new PluginInstaller(
  63.             new CustomFieldGenerator(
  64.                 $this->container->get('custom_field_set.repository')
  65.             ),
  66.             new SalesChannelGenerator(
  67.                 $this->container->get('sales_channel_type.repository'),
  68.                 $this->container->get('sales_channel.repository'),
  69.                 $this->container->get('product_stream.repository'),
  70.                 $this->container->get('product_export.repository')
  71.             ),
  72.             new ProductStreamGenerator(
  73.                 $this->container->get('product_stream.repository'),
  74.                 $this->container->get('product_stream_filter.repository')
  75.             ),
  76.             new OrderSearchExtension(
  77.                 $this->container->get('user_config.repository'),
  78.                 $this->container->get(Connection::class)
  79.             )
  80.         );
  81.     }
  82.     public function activate(ActivateContext $activateContext): void
  83.     {
  84.         parent::activate($activateContext);
  85.         $this->buildInstaller();
  86.         $this->installer->upsert($activateContext);
  87.         /** @var Plugin\Util\PluginIdProvider $pluginIdProvider */
  88.         $pluginIdProvider $this->container->get(Plugin\Util\PluginIdProvider::class);
  89.         $pluginId $pluginIdProvider->getPluginIdByBaseClass(get_class($this), $activateContext->getContext());
  90.         (new MiraklPaymentMethodGenerator($this->container->get('payment_method.repository')))->install(
  91.             $activateContext,
  92.             $pluginId
  93.         );
  94.     }
  95.     public function install(InstallContext $installContext): void
  96.     {
  97.         $currentShopwareVersion $this->container->getParameter('kernel.shopware_version');
  98.         parent::install($installContext);
  99.         Assert::true(
  100.             version_compare(
  101.                 $currentShopwareVersion,
  102.                 CodevisionMiraklConnector::SW_MIN_REQUIRED,
  103.                 '>='
  104.             )
  105.             &&
  106.             version_compare(
  107.                 $currentShopwareVersion,
  108.                 CodevisionMiraklConnector::SW_MAX_EXCLUDED,
  109.                 '<'
  110.             ),
  111.             sprintf(
  112.                 'The Shopware Version you are currently using (%s) is too low or too high. Please upgrade to at least %s and lower than %s',
  113.                 $currentShopwareVersion,
  114.                 CodevisionMiraklConnector::SW_MIN_REQUIRED,
  115.                 CodevisionMiraklConnector::SW_MAX_EXCLUDED,
  116.             )
  117.         );
  118.         $this->buildInstaller();
  119.         $this->installer->upsert($installContext);
  120.         /** @var Plugin\Util\PluginIdProvider $pluginIdProvider */
  121.         $pluginIdProvider $this->container->get(Plugin\Util\PluginIdProvider::class);
  122.         $pluginId $pluginIdProvider->getPluginIdByBaseClass(get_class($this), $installContext->getContext());
  123.         (new MiraklPaymentMethodGenerator($this->container->get('payment_method.repository')))->install(
  124.             $installContext,
  125.             $pluginId
  126.         );
  127.     }
  128.     public function uninstall(UninstallContext $uninstallContext): void
  129.     {
  130.         parent::uninstall($uninstallContext);
  131.         try {
  132.             $uninstaller = new PluginUninstaller(
  133.                 $this->container->get('dead_message.repository'),
  134.                 $this->container->get(Connection::class),
  135.             );
  136.             $uninstaller->uninstall($uninstallContext);
  137.             /** @var Plugin\Util\PluginIdProvider $pluginIdProvider */
  138.             $pluginIdProvider $this->container->get(Plugin\Util\PluginIdProvider::class);
  139.             $pluginId $pluginIdProvider->getPluginIdByBaseClass(get_class($this), $uninstallContext->getContext());
  140.             (new MiraklPaymentMethodGenerator($this->container->get('payment_method.repository')))->uninstall(
  141.                 $uninstallContext,
  142.                 $pluginId
  143.             );
  144.         } catch (\Exception $exception) {
  145.         }
  146.     }
  147. }