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

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace LoyxxRichBreadcrumb;
  3. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  5. use Shopware\Core\Framework\Plugin;
  6. use Shopware\Core\Framework\Plugin\Context\InstallContext;
  7. use Shopware\Core\Framework\Plugin\Context\UninstallContext;
  8. use Shopware\Core\Framework\Plugin\Context\UpdateContext;
  9. use Shopware\Core\System\CustomField\Aggregate\CustomFieldSet\CustomFieldSetEntity;
  10. use Shopware\Core\System\CustomField\CustomFieldEntity;
  11. use Shopware\Core\System\CustomField\CustomFieldTypes;
  12. class LoyxxRichBreadcrumb extends Plugin
  13. {
  14.     public const CUSTOM_FIELD_PREFIX 'loyxx_rich_breadcrumb';
  15.     public function install(InstallContext $installContext): void
  16.     {
  17.         parent::install($installContext);
  18.         $this->createCustomFieldSystem($installContext);
  19.     }
  20.     public function update(UpdateContext $updateContext): void
  21.     {
  22.         parent::update($updateContext);
  23.         $this->updateCustomFieldSystem($updateContext);
  24.     }
  25.     public function uninstall(UninstallContext $uninstallContext): void
  26.     {
  27.         parent::uninstall($uninstallContext);
  28.         if ($uninstallContext->keepUserData()) {
  29.             return;
  30.         }
  31.         $this->removeCustomFieldSystem($uninstallContext);
  32.     }
  33.     private function createCustomFieldSystem(InstallContext $installContext)
  34.     {
  35.         $customFieldSetRepository $this->container->get('custom_field_set.repository');
  36.         $context $installContext->getContext();
  37.         //check if the custom field set is defined
  38.         $criteria = new Criteria();
  39.         $criteria->addFilter(new EqualsFilter('name', static::CUSTOM_FIELD_PREFIX));
  40.         $customFieldSetEntity $customFieldSetRepository->searchIds($criteria$context);
  41.         if (!$customFieldSetEntity->getTotal()) {
  42.             $customFieldSetRepository->create(
  43.                 [
  44.                     [
  45.                         'name' => static::CUSTOM_FIELD_PREFIX,
  46.                         'customFields' => $this->_getCustomFields(),
  47.                         'relations' => [
  48.                             ['entityName' => 'category']
  49.                         ],
  50.                         'config' => [
  51.                             'description' => [
  52.                                 'en-GB' => 'Rich Breadcrumb Configuration',
  53.                                 'de-DE' => 'Rich-Breadcrumb-Konfiguration'
  54.                             ],
  55.                             'label' => [
  56.                                 'en-GB' => 'Rich Breadcrumb Configuration',
  57.                                 'de-DE' => 'Rich-Breadcrumb-Konfiguration'
  58.                             ],
  59.                             'translated' => true
  60.                         ]
  61.                     ]
  62.                 ],
  63.                 $context
  64.             );
  65.         }
  66.     }
  67.     private function updateCustomFieldSystem(UpdateContext $updateContext)
  68.     {
  69.         $customFieldSetRepository $this->container->get('custom_field_set.repository');
  70.         $context $updateContext->getContext();
  71.         //check if the custom field set is defined
  72.         $criteria = new Criteria();
  73.         $criteria->addFilter(new EqualsFilter('name', static::CUSTOM_FIELD_PREFIX));
  74.         $criteria->addAssociation('customFields');
  75.         /** @var CustomFieldSetEntity $customFieldSetEntity */
  76.         $customFieldSetEntity $customFieldSetRepository->search($criteria$context)->first();
  77.         $customFields $this->_getCustomFields();
  78.         $relation = [];
  79.         if ($customFieldSetEntity) {
  80.             /** @var CustomFieldEntity $item */
  81.             foreach ($customFieldSetEntity->getCustomFields() as $item) {
  82.                 $key array_search($item->getName(), array_column($customFields'name'));
  83.                 if ($key !== FALSE) {
  84.                     $customFields[$key]['id'] = $item->getId();
  85.                 }
  86.             }
  87.         } else {
  88.             $relation = [
  89.                 'relations' => [
  90.                     ['entityName' => 'category']
  91.                 ],
  92.                 'config' => [
  93.                     'description' => [
  94.                         'en-GB' => 'Rich Breadcrumb Configuration',
  95.                         'de-DE' => 'Rich-Breadcrumb-Konfiguration'
  96.                     ],
  97.                     'label' => [
  98.                         'en-GB' => 'Rich Breadcrumb Configuration',
  99.                         'de-DE' => 'Rich-Breadcrumb-Konfiguration'
  100.                     ],
  101.                     'translated' => true
  102.                 ]
  103.             ];
  104.         }
  105.         $customFieldSetRepository->upsert(
  106.             [
  107.                 array_merge([
  108.                     'id' => $customFieldSetEntity $customFieldSetEntity->getId() : NULL,
  109.                     'name' => static::CUSTOM_FIELD_PREFIX,
  110.                     'customFields' => $customFields
  111.                 ], $relation)
  112.             ],
  113.             $context
  114.         );
  115.     }
  116.     private function removeCustomFieldSystem(UninstallContext $uninstallContext)
  117.     {
  118.         $customFieldSetRepository $this->container->get('custom_field_set.repository');
  119.         $context $uninstallContext->getContext();
  120.         //check if the custom field set is defined
  121.         $criteria = new Criteria();
  122.         $criteria->addFilter(new EqualsFilter('name', static::CUSTOM_FIELD_PREFIX));
  123.         $customFieldSetEntity $customFieldSetRepository->searchIds($criteria$context);
  124.         if ($customFieldSetEntity->getTotal()) {
  125.             $customFieldSetRepository->delete(array_values($customFieldSetEntity->getData()), $context);
  126.         }
  127.     }
  128.     private function _getCustomFields()
  129.     {
  130.         return [
  131.             [
  132.                 'name' => static::CUSTOM_FIELD_PREFIX '_disabled',
  133.                 'type' => CustomFieldTypes::BOOL,
  134.                 'config' => [
  135.                     'type' => 'switch',
  136.                     'label' => [
  137.                         'en-GB' => 'Hide breadcrumb for this category',
  138.                         'de-DE' => 'Breadcrumb für diese Kategorie ausblenden'
  139.                     ],
  140.                     'componentName' => 'sw-field',
  141.                     'customFieldType' => 'switch',
  142.                     'customFieldPosition' => 1,
  143.                     'helpText' => [
  144.                         'en-GB' => 'After enabling this option, the breadcrumb will no longer shown inside this category page',
  145.                         'de-DE' => 'Nachdem Sie diese Option aktiviert haben, wird die Breadcrumb innerhalb dieser Kategorieseite nicht mehr angezeigt.'
  146.                     ],
  147.                     'translated' => true
  148.                 ]
  149.             ]
  150.         ];
  151.     }
  152. }