custom/static-plugins/CioCustomerPermissionGroups/src/CioCustomerPermissionGroups.php line 17

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace CioCustomerPermissionGroups;
  4. use CioCustomerPermissionGroups\Definition\CustomerAclgroupsEntity;
  5. use Shopware\Core\Framework\Context;
  6. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  8. use Shopware\Core\Framework\Plugin;
  9. use Doctrine\DBAL\Connection;
  10. use Shopware\Core\Framework\Plugin\Context\ActivateContext;
  11. use Shopware\Core\Framework\Plugin\Context\InstallContext;
  12. use Shopware\Core\Framework\Plugin\Context\UninstallContext;
  13. class CioCustomerPermissionGroups extends Plugin
  14. {
  15.     public const GROUP_BACKOFFICE_ID '42aa169976e34a8cba6181b03c6279e0';
  16.     public const GROUP_SPRINGER_ID '4452ccbabb38462c9aaad8357440b3ed';
  17.     public const GROUP_BZHMA_ID 'b11e1a0e26aa4782ba85c5c6573d306a';
  18.     public const GROUP_FILIALE_ID 'abeade76041142c3912d47c567957d05';
  19.     public const GROUP_ASSETS_CENTER_ID 'a8fa0a9676a242fa97cfdc3c51468030';
  20.     public const GROUP_SUPPORT_POINTS_ID 'de35600091074dd783b5966b4fee8789';
  21.     public const GROUP_AREAS_ID 'c6890e162107402d8d39f73cf68f112d';
  22.     public const GROUP_CLUSTER_ID '5533c9c364f6444692a45c9d4bbb53d7';
  23.     public function activate(ActivateContext $activateContext): void
  24.     {
  25.         parent::activate($activateContext);
  26.         $this->createPermissionGroup(self::GROUP_BACKOFFICE_ID'Backoffice''backoffice');
  27.         $this->createPermissionGroup(self::GROUP_SPRINGER_ID'Springer''springer');
  28.         $this->createPermissionGroup(self::GROUP_BZHMA_ID'BzH-MA''bzhma');
  29.         $this->createPermissionGroup(self::GROUP_FILIALE_ID'Filiale''filiale');
  30.         $this->createPermissionGroup(self::GROUP_ASSETS_CENTER_ID'Vermögens-center (ehem. Investmentcenter)''assets_center');
  31.         $this->createPermissionGroup(self::GROUP_SUPPORT_POINTS_ID'Beratungspunkte''support_points');
  32.         $this->createPermissionGroup(self::GROUP_AREAS_ID'Bereiche''areas');
  33.         $this->createPermissionGroup(self::GROUP_CLUSTER_ID'Cluster''cluster');
  34.     }
  35.     public function uninstall(UninstallContext $context): void
  36.     {
  37.         parent::uninstall($context);
  38.         if ($context->keepUserData()) {
  39.             return;
  40.         }
  41.         $connection $this->container->get(Connection::class);
  42.         //$connection->executeUpdate('DROP TABLE IF EXISTS `customer_aclgroups`');
  43.         //$connection->executeUpdate('ALTER TABLE `customer` DROP COLUMN `customer_aclgroup_ids`');
  44.     }
  45.     public static function arrayUnique(array $array, callable $comparator): array
  46.     {
  47.         $unique_array = [];
  48.         do {
  49.             $element array_shift($array);
  50.             $unique_array[] = $element;
  51.             $array array_udiff(
  52.                 $array,
  53.                 [$element],
  54.                 $comparator
  55.             );
  56.         } while (count($array) > 0);
  57.         return $unique_array;
  58.     }
  59.     public static function getAclIds($array)
  60.     {
  61.         if (!is_array($array)) {
  62.             return [];
  63.         }
  64.         $array self::uniqueACL($array);
  65.         $res = [];
  66.         foreach ($array as $item) {
  67.             $res[] = $item['id'];
  68.         }
  69.         return $res;
  70.     }
  71.     public static function uniqueACL(array $array): array
  72.     {
  73.         foreach ($array as $key => $customAclRole) {
  74.             if (!is_array($customAclRole)) {
  75.                 unset($array[$key]);
  76.             }
  77.         }
  78.         if (count($array)) {
  79.             return self::arrayUnique($array, function ($a$b) {
  80.                 if ($a['id'] == $b['id']) {
  81.                     $b['imported'] = $a['imported'] = true;
  82.                 }
  83.                 return $a['id'] <=> $b['id'];
  84.             });
  85.         }
  86.         return [];
  87.     }
  88.     protected function createPermissionGroup(string $idstring $namestring $technicalName)
  89.     {
  90.         /** @var EntityRepository $aclGroupRepository */
  91.         $aclGroupRepository $this->container->get('customer_aclgroups.repository');
  92.         $aclGroup $aclGroupRepository->search(new Criteria([$id]), Context::createDefaultContext())->first();
  93.         if (!$aclGroup instanceof CustomerAclgroupsEntity) {
  94.             $aclGroupRepository->create([
  95.                 [
  96.                     'id' => $id,
  97.                     'name' => $name,
  98.                     'technicalname' => $technicalName,
  99.                     'roles' => []
  100.                 ]
  101.             ], Context::createDefaultContext());
  102.         }
  103.     }
  104. }