custom/plugins/AppflixStudygood/src/AppflixStudygood.php line 15

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Appflix\Studygood;
  3. use MoorlFoundation\Core\Service\DataService;
  4. use MoorlFoundation\MoorlFoundation;
  5. use Appflix\Studygood\Core\Defaults;
  6. use Doctrine\DBAL\Connection;
  7. use Shopware\Core\Framework\Plugin;
  8. use Shopware\Core\Framework\Plugin\Context\ActivateContext;
  9. use Shopware\Core\Framework\Plugin\Context\UninstallContext;
  10. use Shopware\Core\Framework\Plugin\Context\UpdateContext;
  11. use Symfony\Component\DependencyInjection\ContainerBuilder;
  12. class AppflixStudygood extends Plugin
  13. {
  14.     public const PLUGIN_TABLES = [
  15.         'studygood_media',
  16.         'studygood_tutor',
  17.         'studygood_tutor_translation',
  18.         'studygood_course',
  19.         'studygood_course_translation',
  20.         'studygood_rating',
  21.         'studygood_chapter',
  22.         'studygood_chapter_translation',
  23.         'studygood_lesson',
  24.         'studygood_lesson_translation',
  25.         'studygood_lesson_media',
  26.         'studygood_board',
  27.         'studygood_test_question',
  28.         'studygood_test_question_translation',
  29.         'studygood_test_answer',
  30.         'studygood_test_answer_translation',
  31.         'studygood_certificate',
  32.         'studygood_certificate_translation',
  33.         'studygood_esd',
  34.         'studygood_course_product',
  35.         'studygood_product_meta'
  36.     ];
  37.     public const SHOPWARE_TABLES = [
  38.         'media_folder',
  39.         'product_manufacturer',
  40.         'cms_page',
  41.         'cms_page_translation',
  42.         'cms_section',
  43.         'cms_block',
  44.         'category',
  45.         'category_translation',
  46.         'product',
  47.         'product_translation',
  48.         'product_category',
  49.         'product_visibility',
  50.         'product_stream',
  51.         'product_cross_selling',
  52.         'custom_field_set',
  53.         'document_type',
  54.         'theme',
  55.         'theme_sales_channel'
  56.     ];
  57.     public const INHERITANCES = [
  58.         'product' => ['studygoodCourses']
  59.     ];
  60.     public function build(ContainerBuilder $container): void
  61.     {
  62.         if (class_exists(MoorlFoundation::class)) {
  63.             parent::build($container);
  64.         }
  65.     }
  66.     public function activate(ActivateContext $activateContext): void
  67.     {
  68.         parent::activate($activateContext);
  69.         /* @var $dataService DataService */
  70.         $dataService $this->container->get(DataService::class);
  71.         $dataService->install(Defaults::NAME);
  72.         /* Migration to MoorlFoundation */
  73.         $connection $this->container->get(Connection::class);
  74.         $connection->executeStatement("UPDATE `cms_slot` SET `slot` = 'slot-a' WHERE `slot` = 'one' AND `type` = 'appflix-search-hero';");
  75.         $connection->executeStatement("UPDATE `cms_slot` SET `slot` = 'slot-a' WHERE `slot` = 'one' AND `type` = 'appflix-usp';");
  76.         $connection->executeStatement("UPDATE `cms_slot` SET `slot` = 'slot-b' WHERE `slot` = 'two' AND `type` = 'appflix-usp';");
  77.         $connection->executeStatement("UPDATE `cms_slot` SET `slot` = 'slot-c' WHERE `slot` = 'three' AND `type` = 'appflix-usp';");
  78.         $connection->executeStatement("UPDATE `cms_slot` SET `slot` = 'slot-a' WHERE `slot` = 'one' AND `type` = 'appflix-newsletter';");
  79.         $connection->executeStatement("UPDATE `cms_slot` SET `slot` = 'slot-b' WHERE `slot` = 'two' AND `type` = 'appflix-newsletter';");
  80.         $connection->executeStatement("UPDATE `cms_slot` SET `type` = REPLACE(`type`, 'appflix', 'moorl');");
  81.         $connection->executeStatement("UPDATE `cms_block` SET `custom_fields` = REPLACE(`custom_fields`, 'appflix', 'moorl');");
  82.         $connection->executeStatement("UPDATE `cms_block` SET `type` = REPLACE(`type`, 'appflix-usp', 'appflix-column-layout-1-1-1');");
  83.         $connection->executeStatement("UPDATE `cms_block` SET `type` = REPLACE(`type`, 'appflix-newsletter', 'appflix-column-layout-1-1');");
  84.         $connection->executeStatement("UPDATE `cms_block` SET `type` = REPLACE(`type`, 'appflix-search-hero', 'appflix-column-layout-1');");
  85.         $connection->executeStatement("UPDATE `cms_block` SET `type` = REPLACE(`type`, 'appflix', 'moorl');");
  86.         $connection->executeStatement("UPDATE `cms_section` SET `custom_fields` = REPLACE(`custom_fields`, 'appflix_section', 'moorl_section_config');");
  87.         $connection->executeStatement("UPDATE `cms_section` SET `custom_fields` = REPLACE(`custom_fields`, 'appflix', 'moorl');");
  88.     }
  89.     public function uninstall(UninstallContext $uninstallContext): void
  90.     {
  91.         parent::uninstall($uninstallContext);
  92.         if ($uninstallContext->keepUserData()) {
  93.             return;
  94.         }
  95.         $this->uninstallTrait();
  96.     }
  97.     private function uninstallTrait(): void
  98.     {
  99.         $connection $this->container->get(Connection::class);
  100.         foreach (self::PLUGIN_TABLES as $table) {
  101.             $sql sprintf('SET FOREIGN_KEY_CHECKS=0; DROP TABLE IF EXISTS `%s`;'$table);
  102.             $connection->executeStatement($sql);
  103.         }
  104.         foreach (array_reverse(self::SHOPWARE_TABLES) as $table) {
  105.             $sql sprintf("SET FOREIGN_KEY_CHECKS=0; DELETE FROM `%s` WHERE `created_at` = '%s';"$tableDefaults::DATA_CREATED_AT);
  106.             try {
  107.                 $connection->executeStatement($sql);
  108.             } catch (\Exception $exception) {
  109.                 continue;
  110.             }
  111.         }
  112.         foreach (self::INHERITANCES as $table => $propertyNames) {
  113.             foreach ($propertyNames as $propertyName) {
  114.                 $sql sprintf("ALTER TABLE `%s` DROP `%s`;"$table$propertyName);
  115.                 try {
  116.                     $connection->executeStatement($sql);
  117.                 } catch (\Exception $exception) {
  118.                     continue;
  119.                 }
  120.             }
  121.         }
  122.     }
  123. }