custom/plugins/DatoElectronicInvoicingSw6/src/DatoElectronicInvoicingSw6.php line 20

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace SmartDato\DatoElectronicInvoicing;
  3. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Exception\InconsistentCriteriaIdsException;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  7. use Shopware\Core\Framework\Plugin\Context\UninstallContext;
  8. use Shopware\Core\Framework\Plugin;
  9. use Shopware\Core\Framework\Plugin\Context\InstallContext;
  10. use SmartDato\DatoElectronicInvoicing\Bootstrap\SchemaManager;
  11. use Throwable;
  12. /**
  13.  * Class DatoElectronicInvoicingSw6
  14.  *
  15.  * @package SmartDato\DatoElectronicInvoicing
  16.  */
  17. class DatoElectronicInvoicingSw6 extends Plugin
  18. {
  19.     /**
  20.      * @inheritDoc
  21.      */
  22.     public function postInstall(InstallContext $installContext): void
  23.     {
  24.         parent::postInstall($installContext);
  25.         try {
  26.             $this->addCustomFields(SchemaManager::CUSTOM_FIELDS$installContext);
  27.         } catch (Throwable $ex) {
  28.             echo ($ex->getMessage()) . PHP_EOL;
  29.         }
  30.     }
  31.     /**
  32.      * @inheritDoc
  33.      */
  34.     public function uninstall(UninstallContext $uninstallContext): void
  35.     {
  36.         parent::uninstall($uninstallContext);
  37.         if ($uninstallContext->keepUserData()) {
  38.             return;
  39.         }
  40.         try {
  41.             $this->deleteCustomFields(SchemaManager::CUSTOM_FIELDS$uninstallContext);
  42.         } catch (Throwable $ex) {
  43.             echo ($ex->getMessage()) . PHP_EOL;
  44.         }
  45.     }
  46.     /**
  47.      * Add custom fields
  48.      *
  49.      * @param array $customFields
  50.      * @param InstallContext $installContext
  51.      */
  52.     private function addCustomFields(array $customFieldsInstallContext $installContext): void
  53.     {
  54.         /** @var EntityRepositoryInterface $customFieldSetRepository */
  55.         $customFieldSetRepository $this->container->get('custom_field_set.repository');
  56.         $customFieldSetRepository->create($customFields$installContext->getContext());
  57.     }
  58.     /**
  59.      * Delete custom fields
  60.      *
  61.      * @param array $customFields
  62.      * @param UninstallContext $uninstallContext
  63.      */
  64.     private function deleteCustomFields(array $customFieldsUninstallContext $uninstallContext): void
  65.     {
  66.         $ids $this->getCustomFieldsIdsByNames($customFields$uninstallContext);
  67.         if (!$ids) {
  68.             return;
  69.         }
  70.         $this->deleteCustomFieldsByIds($uninstallContext$ids);
  71.     }
  72.     /**
  73.      * Get custom fields ids by custom fields names
  74.      *
  75.      * @param array $customFields
  76.      * @param UninstallContext $uninstallContext
  77.      *
  78.      * @return string[]|null
  79.      */
  80.     private function getCustomFieldsIdsByNames(array $customFieldsUninstallContext $uninstallContext): ?array
  81.     {
  82.         try {
  83.             $criteria = new Criteria();
  84.         } catch (InconsistentCriteriaIdsException $ex) {
  85.             return null;
  86.         }
  87.         $criteria->addFilter(new EqualsAnyFilter('name'array_column($customFields'name')));
  88.         /** @var EntityRepositoryInterface $customFieldSetRepository */
  89.         $customFieldSetRepository $this->container->get('custom_field_set.repository');
  90.         $idSearchResult $customFieldSetRepository->searchIds($criteria$uninstallContext->getContext());
  91.         return $idSearchResult->getIds();
  92.     }
  93.     /**
  94.      * Delete custom fields by ids
  95.      *
  96.      * @param UninstallContext $uninstallContext
  97.      * @param array $ids
  98.      */
  99.     private function deleteCustomFieldsByIds(UninstallContext $uninstallContext, array $ids): void
  100.     {
  101.         $deleteData = [];
  102.         foreach ($ids as $id) {
  103.             $deleteData[] = ['id' => $id];
  104.         }
  105.         /** @var EntityRepositoryInterface $customFieldSetRepository */
  106.         $customFieldSetRepository $this->container->get('custom_field_set.repository');
  107.         $customFieldSetRepository->delete($deleteData$uninstallContext->getContext());
  108.     }
  109. }