src/WellCommerce/Bundle/AllegroBundle/EventListener/AllegroSubscriber.php line 48

Open in your IDE?
  1. <?php
  2. declare(strict_types=0);
  3. /*
  4.  * WellCommerce Foundation
  5.  *
  6.  * This file is part of the WellCommerce package.
  7.  *
  8.  * (c) Adam Piotrowski <adam@wellcommerce.org>, Adrian Potepa <adrian@wellcommerce.org>
  9.  *
  10.  * For the full copyright and license information,
  11.  * please view the LICENSE file that was distributed with this source code.
  12.  */
  13. namespace WellCommerce\Bundle\AllegroBundle\EventListener;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use WellCommerce\Bundle\AllegroBundle\Entity\AllegroCategory;
  16. use WellCommerce\Bundle\AllegroBundle\Repository\AllegroCategoryRepository;
  17. use WellCommerce\Bundle\AppBundle\Entity\Shop;
  18. use WellCommerce\Bundle\CatalogBundle\Entity\Category;
  19. use WellCommerce\Component\Form\Event\FormEvent;
  20. /**
  21.  * Class AllegroSubscriber
  22.  *
  23.  * @author  Adam Piotrowski <adam@wellcommerce.org>
  24.  */
  25. class AllegroSubscriber implements EventSubscriberInterface
  26. {
  27.     protected $repository;
  28.     public function __construct(AllegroCategoryRepository $repository)
  29.     {
  30.         $this->repository $repository;
  31.     }
  32.     public static function getSubscribedEvents()
  33.     {
  34.         return [
  35.             'admin.category.pre_form_init' => ['onCategoryFormAdminInit'],
  36.             'admin.shop.pre_form_init'     => ['onShopFormAdminInit'],
  37.         ];
  38.     }
  39.     public function onShopFormAdminInit(FormEvent $event)
  40.     {
  41.         $resource $event->getResource();
  42.         if ($resource instanceof Shop) {
  43.             $form    $event->getForm();
  44.             $builder $event->getFormBuilder();
  45.             $allegroData $form->addChild($builder->getElement('nested_fieldset', [
  46.                 'name'  => 'allegro_data',
  47.                 'label' => 'allegro.fieldset.settings',
  48.             ]));
  49.             $allegroData->addChild($builder->getElement('text_field', [
  50.                 'name'  => 'allegroClientId',
  51.                 'label' => 'allegro.label.client_id',
  52.             ]));
  53.             $allegroData->addChild($builder->getElement('text_field', [
  54.                 'name'  => 'allegroClientSecret',
  55.                 'label' => 'allegro.label.client_secret',
  56.             ]));
  57.             $allegroData->addChild($builder->getElement('checkbox', [
  58.                 'name'  => 'allegroSandbox',
  59.                 'label' => 'allegro.label.sandbox',
  60.             ]));
  61.         }
  62.     }
  63.     public function onCategoryFormAdminInit(FormEvent $event)
  64.     {
  65.         /** @var Category $category */
  66.         $category $event->getResource();
  67.         $form     $event->getForm();
  68.         $builder  $event->getFormBuilder();
  69.         $ceneoCategories $form->addChild($builder->getElement('nested_fieldset', [
  70.             'name'  => 'allegro_categories',
  71.             'label' => 'allegro.fieldset.categories',
  72.         ]));
  73.         $ceneoCategories->addChild($builder->getElement('tree', [
  74.             'name'        => 'allegroCategory',
  75.             'label'       => 'allegro.label.category',
  76.             'choosable'   => true,
  77.             'selectable'  => false,
  78.             'sortable'    => false,
  79.             'clickable'   => false,
  80.             'items'       => $this->getItems(),
  81.             'transformer' => $builder->getRepositoryTransformer('entity'AllegroCategory::class),
  82.         ]))->setValue($category->getAllegroCategory() ?? 0);
  83.     }
  84.     private function getItems(): array
  85.     {
  86.         $categories $this->repository->findAll();
  87.         $items      = [];
  88.         /** @var AllegroCategory $ceneoCategory */
  89.         foreach ($categories as $ceneoCategory) {
  90.             $parentCategory                 $ceneoCategory->getParent();
  91.             $items[$ceneoCategory->getId()] = [
  92.                 'id'          => $ceneoCategory->getId(),
  93.                 'name'        => $ceneoCategory->getName(),
  94.                 'hasChildren' => (bool) $ceneoCategory->getChildren()->count() > 0,
  95.                 'parent'      => ($parentCategory instanceof AllegroCategory) ? $parentCategory->getId() : null,
  96.                 'weight'      => 0,
  97.             ];
  98.         }
  99.         return $items;
  100.     }
  101. }