<?php
declare(strict_types=0);
/*
* WellCommerce Foundation
*
* This file is part of the WellCommerce package.
*
* (c) Adam Piotrowski <adam@wellcommerce.org>, Adrian Potepa <adrian@wellcommerce.org>
*
* For the full copyright and license information,
* please view the LICENSE file that was distributed with this source code.
*/
namespace WellCommerce\Bundle\AllegroBundle\EventListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use WellCommerce\Bundle\AllegroBundle\Entity\AllegroCategory;
use WellCommerce\Bundle\AllegroBundle\Repository\AllegroCategoryRepository;
use WellCommerce\Bundle\AppBundle\Entity\Shop;
use WellCommerce\Bundle\CatalogBundle\Entity\Category;
use WellCommerce\Component\Form\Event\FormEvent;
/**
* Class AllegroSubscriber
*
* @author Adam Piotrowski <adam@wellcommerce.org>
*/
class AllegroSubscriber implements EventSubscriberInterface
{
protected $repository;
public function __construct(AllegroCategoryRepository $repository)
{
$this->repository = $repository;
}
public static function getSubscribedEvents()
{
return [
'admin.category.pre_form_init' => ['onCategoryFormAdminInit'],
'admin.shop.pre_form_init' => ['onShopFormAdminInit'],
];
}
public function onShopFormAdminInit(FormEvent $event)
{
$resource = $event->getResource();
if ($resource instanceof Shop) {
$form = $event->getForm();
$builder = $event->getFormBuilder();
$allegroData = $form->addChild($builder->getElement('nested_fieldset', [
'name' => 'allegro_data',
'label' => 'allegro.fieldset.settings',
]));
$allegroData->addChild($builder->getElement('text_field', [
'name' => 'allegroClientId',
'label' => 'allegro.label.client_id',
]));
$allegroData->addChild($builder->getElement('text_field', [
'name' => 'allegroClientSecret',
'label' => 'allegro.label.client_secret',
]));
$allegroData->addChild($builder->getElement('checkbox', [
'name' => 'allegroSandbox',
'label' => 'allegro.label.sandbox',
]));
}
}
public function onCategoryFormAdminInit(FormEvent $event)
{
/** @var Category $category */
$category = $event->getResource();
$form = $event->getForm();
$builder = $event->getFormBuilder();
$ceneoCategories = $form->addChild($builder->getElement('nested_fieldset', [
'name' => 'allegro_categories',
'label' => 'allegro.fieldset.categories',
]));
$ceneoCategories->addChild($builder->getElement('tree', [
'name' => 'allegroCategory',
'label' => 'allegro.label.category',
'choosable' => true,
'selectable' => false,
'sortable' => false,
'clickable' => false,
'items' => $this->getItems(),
'transformer' => $builder->getRepositoryTransformer('entity', AllegroCategory::class),
]))->setValue($category->getAllegroCategory() ?? 0);
}
private function getItems(): array
{
$categories = $this->repository->findAll();
$items = [];
/** @var AllegroCategory $ceneoCategory */
foreach ($categories as $ceneoCategory) {
$parentCategory = $ceneoCategory->getParent();
$items[$ceneoCategory->getId()] = [
'id' => $ceneoCategory->getId(),
'name' => $ceneoCategory->getName(),
'hasChildren' => (bool) $ceneoCategory->getChildren()->count() > 0,
'parent' => ($parentCategory instanceof AllegroCategory) ? $parentCategory->getId() : null,
'weight' => 0,
];
}
return $items;
}
}