<?php
namespace AdminBundle\Admin;
use AdminBundle\Form\Type\ContentType;
use CoreBundle\Entity\ServicePageCategory;
use CoreBundle\Entity\ServicePageCategoryContent;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Form\Type\ModelType;
use Sonata\AdminBundle\Route\RouteCollectionInterface;
use Sonata\MediaBundle\Form\Type\MediaType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
class ServicePageCategoryAdmin extends BaseAdmin
{
protected function configureRoutes(RouteCollectionInterface $collection): void
{
$collection->remove('view');
$collection->remove('delete');
}
/**
* @param ServicePageCategory $object
*/
public function prePersist($object): void
{
/** @var ServicePageCategoryContent $content */
foreach ($object->getContent() as $content) {
$content->setCategory($object);
}
$object->setState(1);
}
public function preUpdate($object): void
{
parent::preUpdate($object);
}
protected function configureFormFields(FormMapper $formMapper): void
{
$queryBuilder = $this->getModelManager()
->getEntityManager(ServicePageCategory::class)
->createQueryBuilder('spc')
->select('spc')
->from(ServicePageCategory::class,'spc')
->where('spc.parent_category is null');
$formMapper
->with('Контент', ['class' => 'col-lg-6'])
->add('content', ContentType::class, ['label' => false], [
'edit' => 'inline',
'sortable' => 'position',
'admin_code' => 'admin.service.service_page_category_content',
])
->end()
->with('Доп. информация', ['class' => 'col-lg-6'])
->add('parent_category', ModelType::class, [
'label' => 'Родительская категория',
'query' => $queryBuilder,
'btn_add' => false,
'required' => false,
])
->add('image', MediaType::class, [
'provider' => 'sonata.media.provider.image',
'context' => 'dc_site',
'label' => 'Изображение'
])
->add('url', null, [
'label' => 'URL'
])
->add('state', CheckboxType::class, ['label' => 'Отображать на сайте', 'required' => false])
->add('position', null, ['label' => 'Позиция'])
->end()
;
}
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper): void
{
$queryBuilder = $this->getModelManager()
->getEntityManager(ServicePageCategory::class)
->createQueryBuilder('spc')
->select('spc')
->from(ServicePageCategory::class,'spc')
->where('spc.parent_category is null');
$models = [];
$models[null] = '';
/** @var ServicePageCategory $item */
foreach ($queryBuilder->getQuery()->getResult() as $item) {
$models[$item->getId()] = $item->getContentByLocale()->getTitle();
}
$listMapper->addIdentifier('id')
->add('title',null, ['label' => 'Категории сервиса'])
->add('parent_category',null, ['label' => 'Родительская категория'])
->add('position', null, ['label' => 'Позиция'])
->add('_action', 'actions', [
'label' => 'Действия',
'actions' => [
'edit' => [],
]
])
;
}
}