custom/plugins/EwGrecoAdministration/src/EwGrecoAdministration.php line 17

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Ew\GrecoAdministration;
  4. use Doctrine\DBAL\Connection;
  5. use Ew\GrecoAdministration\Service\CustomFieldService;
  6. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\ContainsFilter;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  10. use Shopware\Core\Framework\Plugin;
  11. use Shopware\Core\Framework\Plugin\Context\InstallContext;
  12. use Shopware\Core\Framework\Plugin\Context\UninstallContext;
  13. use Shopware\Core\System\CustomField\CustomFieldTypes;
  14. class EwGrecoAdministration extends Plugin
  15. {
  16.     public function install(InstallContext $installContext): void
  17.     {
  18.         $this->createCustomFields($installContext->getContext());
  19.         $customFieldService = new CustomFieldService(
  20.             $this->container->get('custom_field_set.repository')
  21.         );
  22.         $customFieldService->createCustomFields($installContext->getContext());
  23.     }
  24.     public function uninstall(UninstallContext $uninstallContext): void
  25.     {
  26.         parent::uninstall($uninstallContext);
  27.         if ($uninstallContext->keepUserData()) {
  28.             return;
  29.         }
  30.         $this->removeCustomFields($uninstallContext->getContext());
  31.         $connection $this->container->get(Connection::class);
  32.         if ($connection->executeQuery("SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'customer' AND column_name = 'dc_code';")->fetchColumn()) {
  33.             $connection->executeUpdate('ALTER TABLE `customer` DROP COLUMN `dc_code`');
  34.         }
  35.         if ($connection->executeQuery("SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'promotion' AND column_name = 'dc_customer_id';")->fetchColumn()) {
  36.             $connection->executeUpdate('ALTER TABLE `promotion` DROP CONSTRAINT `fk.promotion.dc_customer_id`;');
  37.             $connection->executeUpdate('ALTER TABLE `promotion` DROP COLUMN `dc_customer_id`');
  38.         }
  39.     }
  40.     private function createCustomFields($context){
  41.         $customFields = [
  42.             [
  43.                 'name' => 'greco_administration',
  44.                 'active' => true,
  45.                 'global' => true,
  46.                 'config' => [
  47.                     'label' => [
  48.                         'en-GB' => 'Greco Administration Fields',
  49.                         'de-DE' => 'Greco Administration Fields'
  50.                     ],
  51.                 ],
  52.                 'customFields' => [
  53.                     [
  54.                         'name' => 'greco_hide_modal',
  55.                         'type' => CustomFieldTypes::SWITCH,
  56.                         'config' => [
  57.                             'bordered' => false,
  58.                             'label' => [
  59.                                 'en-GB' => 'Hide DC code modal',
  60.                                 'de-DE' => 'Hide DC code modal',
  61.                             ],
  62.                             'customFieldPosition' => 1
  63.                         ]
  64.                     ]
  65.                 ],
  66.                 'relations' => [
  67.                     ['entityName' => 'category']
  68.                 ]
  69.             ],
  70.             [
  71.                 'name' => 'greco_administration_order',
  72.                 'active' => true,
  73.                 'global' => true,
  74.                 'config' => [
  75.                     'label' => [
  76.                         'en-GB' => 'EW Order Fields',
  77.                         'de-DE' => 'EW Order Fields'
  78.                     ],
  79.                 ],
  80.                 'customFields' => [
  81.                     [
  82.                         'name' => 'dc_code',
  83.                         'type' => CustomFieldTypes::TEXT,
  84.                         'config' => [
  85.                             'label' => [
  86.                                 'de-DE' => 'DC Code',
  87.                                 'en-GB' => 'DC Code'
  88.                             ],
  89.                             'placeholder' => [
  90.                                 'de-DE' => 'M12US',
  91.                                 'en-GB' => 'M12US'
  92.                             ],
  93.                             'customFieldPosition' => 1
  94.                         ]
  95.                     ]
  96.                 ],
  97.                 'relations' => [
  98.                     [
  99.                         'entityName' => 'order'
  100.                     ]
  101.                 ]
  102.             ]
  103.         ];
  104.         $repo $this->container->get('custom_field_set.repository');
  105.         $customFieldSetEntry $repo->search((new Criteria())->addFilter(new EqualsFilter('name''greco_administration')), $context)->first();
  106.         if(!$customFieldSetEntry) {
  107.             foreach ($customFields as $customFieldSet) {
  108.                 $repo->upsert([$customFieldSet], $context);
  109.             }
  110.         }
  111.     }
  112.     private function removeCustomFields($context): void
  113.     {
  114.         foreach (['greco_administration''greco_administration_order'] as $customFieldSetName) {
  115.             /** @var EntityRepository $customFieldRepo */
  116.             $customFieldRepo $this->container->get('custom_field.repository');
  117.             $result $customFieldRepo->search(
  118.                 (new Criteria())->addFilter(new ContainsFilter('name'$customFieldSetName)),
  119.                 $context
  120.             );
  121.             $deleteIds = [];
  122.             foreach ($result->getIds() as $id) {
  123.                 $deleteIds[] = ['id' => $id];
  124.             }
  125.             $customFieldRepo->delete($deleteIds$context);
  126.             /** @var EntityRepository $customFieldsetRepo */
  127.             $customFieldsetRepo $this->container->get('custom_field_set.repository');
  128.             $findByName = new Criteria();
  129.             $findByName->addFilter(new EqualsFilter('name'$customFieldSetName));
  130.             $result $customFieldsetRepo->searchIds($findByName$context);
  131.             $deleteIds = [];
  132.             foreach ($result->getIds() as $id) {
  133.                 $deleteIds[] = ['id' => $id];
  134.             }
  135.             $customFieldsetRepo->delete($deleteIds$context);
  136.         }
  137.     }
  138. }