src/AdminBundle/Admin/ServicePageAdmin.php line 23

Open in your IDE?
  1. <?php
  2. namespace AdminBundle\Admin;
  3. use CoreBundle\Entity\User;
  4. use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
  5. use AdminBundle\Form\Type\ContentType;
  6. use CoreBundle\Entity\ServicePage;
  7. use CoreBundle\Entity\ServicePageCategory;
  8. use CoreBundle\Entity\ServicePageContent;
  9. use DcSiteBundle\Entity\Job;
  10. use Doctrine\ORM\QueryBuilder;
  11. use Sonata\AdminBundle\Datagrid\ListMapper;
  12. use Sonata\AdminBundle\Form\FormMapper;
  13. use Sonata\AdminBundle\Form\Type\ModelType;
  14. use Sonata\AdminBundle\Route\RouteCollection;
  15. use Sonata\AdminBundle\Route\RouteCollectionInterface;
  16. use Sonata\MediaBundle\Form\Type\MediaType;
  17. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  18. use Symfony\Component\Finder\Exception\AccessDeniedException;
  19. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  20. class ServicePageAdmin extends BaseAdmin
  21. {
  22.     /**
  23.      * @param RouteCollection $collection
  24.      */
  25.     protected function configureRoutes(RouteCollectionInterface $collection): void
  26.     {
  27.         $collection->remove('view');
  28.         $collection->remove('delete');
  29.     }
  30.     /**
  31.      * @param ServicePage $object
  32.      */
  33.     public function prePersist($object): void
  34.     {
  35.         /** @var User $User */
  36.         $User $this->security->getUser();
  37.         if(!$User->getDealer() && !$object->getDealer()) {
  38.             throw new AccessDeniedException('User without dealer');
  39.         }
  40.         /** @var ServicePageContent $content */
  41.         foreach ($object->getContent() as $content) {
  42.             $content->setPage($object);
  43.         }
  44.         /** @var ServicePageCategory $category */
  45.         foreach ($object->getCategories() as $category) {
  46.             $category->addPage($object);
  47.         }
  48.         $object->setDealer($User->getDealer());
  49.         $object->setState(1);
  50.     }
  51.     /**
  52.      * @param ServicePage $object
  53.      */
  54.     public function preUpdate($object): void
  55.     {
  56.         /** @var ServicePageCategory $category */
  57.         foreach ($object->getCategories() as $category) {
  58.             $category->addPage($object);
  59.         }
  60.     }
  61.     /**
  62.      * @param FormMapper $formMapper
  63.      */
  64.     protected function configureFormFields(FormMapper $formMapper): void
  65.     {
  66.         $User $this->security->getUser();
  67.         if(!$Dealer $User->getDealer()) {
  68.             throw new AccessDeniedException('User without dealer');
  69.         }
  70.         $queryBuilderParentCategory $this->getModelManager()
  71.             ->getEntityManager(ServicePageCategory::class)
  72.             ->createQueryBuilder('spc')
  73.             ->select('spc')
  74.             ->from(ServicePageCategory::class,'spc')
  75.             ->where('spc.parent_category is not null');
  76.         $queryBuilderJobs $this->getModelManager()
  77.             ->getEntityManager(Job::class)
  78.             ->createQueryBuilder('j')
  79.             ->select('j')
  80.             ->from('DcSiteBundle:Job','j')
  81.             ->where('j.dealer = :dealer')
  82.             ->setParameter('dealer'$Dealer);
  83.         $formMapper
  84.             ->with('Контент', ['class' => 'col-lg-6'])
  85.                 ->add('content'ContentType::class, ['label' => false], [
  86.                     'edit' => 'inline',
  87.                     'sortable' => 'position',
  88.                     'admin_code' => 'admin.service.service_page_content',
  89.                 ])
  90.                 ->end()
  91.             ->with('Допю информация', ['class' => 'col-lg-6'])
  92.                 ->add('categories'ModelType::class, [
  93.                     'label' => 'Категории сервиса',
  94.                     'query' => $queryBuilderParentCategory,
  95.                     'btn_add' => false,
  96.                     'required' => true,
  97.                     'multiple' => true,
  98.                 ])
  99.                 ->add('image'MediaType::class, [
  100.                     'provider' => 'sonata.media.provider.image',
  101.                     'context'  => 'dc_site',
  102.                     'label' => 'Изображение'
  103.                 ])
  104.                 ->add('url'null, [
  105.                     'label' => 'URL'
  106.                 ])
  107.                 ->add('state'CheckboxType::class, ['label' => 'Отображать на сайте''required' => false])
  108.                 ->add('position'null, ['label' => 'Позиция'])
  109.                 ->add('jobs'ModelType::class, [
  110.                     'label' => 'Перечень услуг',
  111.                     'query' => $queryBuilderJobs,
  112.                     'btn_add' => false,
  113.                     'required' => false,
  114.                     'multiple' => true,
  115.                 ])
  116.             ->end()
  117.         ;
  118.     }
  119.     /**
  120.      * @param string $context
  121.      * @return ProxyQueryInterface
  122.      */
  123.     public function configureQuery($context 'list'): ProxyQueryInterface
  124.     {
  125.         $user $this->security->getUser();
  126.         /** @var QueryBuilder $query */
  127.         $query parent::configureQuery($context);
  128.         $dealer $user->getDealer();
  129.         if (!$dealer) {
  130.             throw new AccessDeniedException();
  131.         }
  132.         $query->andWhere($query->getRootAliases()[0] . '.dealer = :dealer');
  133.         $query->setParameter('dealer'$dealer->getId());
  134.         return $query;
  135.     }
  136.     /**
  137.      * @param ListMapper $listMapper
  138.      */
  139.     protected function configureListFields(ListMapper $listMapper): void
  140.     {
  141.         $listMapper->addIdentifier('id')
  142.             ->add('title',null, ['label' => 'Заголовок'])
  143.             ->add('categories'EntityType::class, [
  144.                 'class' => ServicePageCategory::class,
  145.                 'label' => 'Категория сервиса',
  146.             ])
  147.             ->add('position'null, ['label' => 'Позиция'])
  148.             ->add('_action''actions', [
  149.                 'label' => 'Действия',
  150.                 'actions' => [
  151.                     'edit' => [],
  152.                 ]
  153.             ])
  154.         ;
  155.     }
  156. }