<?php
namespace AdminBundle\Admin\DCAutoSite;
use AdminBundle\Admin\BaseAdmin;
use AdminBundle\Form\Type\ContentType;
use CoreBundle\Entity\Post;
use CoreBundle\Entity\User;
use DateTime;
use DcSiteBundle\Entity\PageContent;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Route\RouteCollectionInterface;
use Symfony\Component\Finder\Exception\AccessDeniedException;
class PagesAdmin extends BaseAdmin
{
/**
* @param RouteCollectionInterface $collection
*/
protected function configureRoutes(RouteCollectionInterface $collection): void
{
$collection->remove('view');
}
public function configureQuery($context = 'list'): ProxyQueryInterface
{
$query = parent::configureQuery($context);
/** @var User $User */
$User = $this->security->getUser();
if (!$User->getDealer()) {
throw new AccessDeniedException('User without dealer');
}
$query->andWhere($query->getRootAliases()[0] . '.dealer = ' . $User->getDealer()->getId());
return $query;
}
/**
* @param FormMapper $formMapper
*/
protected function configureFormFields(FormMapper $formMapper): void
{
$formMapper
->tab('Основная информация')
->with(' ', ['class' => 'col-lg-6 without-box-heder'])
->add('url', null, ['label' => 'URL для поиска страницы(system)'])
->add('content', ContentType::class, ['label' => false], [
'admin_code' => 'admin.dc.page_content',
'edit' => 'inline',
'sortable' => 'position',
])
->end()
->end();
}
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper): void
{
$listMapper->addIdentifier('id')
->add('dealer', null, ['label' => 'Дилер'])
->add('url', null, ['label' => 'Url'])
->add('_action', 'actions', [
'label' => 'Действия',
'actions' => [
'edit' => [],
]
]);
}
/**
* @param Post $object
*/
public function prePersist($object): void
{
parent::prePersist($object);
$User = $this->security->getUser();
$object->setState(1);
$object->setDateCreate(new DateTime());
$object->setDealer($User->getDealer());
/** @var PageContent $content */
foreach ($object->getContent() as $content) {
$content->setDescription('');
$content->setPage($object);
}
}
}