src/AdminBundle/Admin/DCAutoSite/TourRoutesAdmin.php line 18

Open in your IDE?
  1. <?php
  2. namespace AdminBundle\Admin\DCAutoSite;
  3. use AdminBundle\Admin\BaseAdmin;
  4. use AdminBundle\Form\Type\ContentType;
  5. use CoreBundle\Entity\Dealer;
  6. use DcSiteBundle\Entity\TourRouteContent;
  7. use DcSiteBundle\Entity\TourRouteParams;
  8. use DcSiteBundle\Entity\TourRoutes;
  9. use Sonata\AdminBundle\Datagrid\ListMapper;
  10. use Sonata\AdminBundle\Form\FormMapper;
  11. use Sonata\Form\Type\CollectionType;
  12. use Sonata\MediaBundle\Form\Type\MediaType;
  13. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  14. use Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException;
  15. class TourRoutesAdmin extends BaseAdmin
  16. {
  17.     protected $baseRouteName 'tour-routes';
  18.     /**
  19.      * @var string
  20.      */
  21.     protected $baseRoutePattern 'dcsite/tour-routes';
  22.     private function getDealer()
  23.     {
  24.         $dealer $this->getUser()->getDealer();
  25.         if (!$dealer) {
  26.             throw new AccessDeniedException();
  27.         }
  28.         return $dealer;
  29.     }
  30.     public function prePersist($object): void
  31.     {
  32.         $dealer $this->getDealer();
  33.         /** @var TourRoutes $object */
  34.         $object->setDealer($dealer);
  35.         $object->setState((int) $object->getState());
  36.         /** @var TourRouteContent $content */
  37.         foreach ($object->getContent() as $content) {
  38.             $content->setTourRout($object);
  39.         }
  40.         /** @var TourRouteParams $params */
  41.         foreach ($object->getParams() as $params) {
  42.             $params->setTourRout($object);
  43.             $params->setState((int) $params->getState());
  44.         }
  45.         $url $object->getUrl() ?: $object->getContent()->first()->getTitle();
  46.         $object->setUrl($this->slugify($url));
  47.         parent::prePersist($object);
  48.     }
  49.     public function preUpdate($object): void
  50.     {
  51.         $dealer $this->getDealer();
  52.         $object->setDealer($dealer);
  53.         $object->setState((int) $object->getState());
  54.         /** @var TourRouteParams $params */
  55.         foreach ($object->getParams() as $params) {
  56.             $params->setTourRout($object);
  57.             $params->setState((int) $params->getState());
  58.         }
  59.         $url $object->getUrl() ?: $object->getContent()->first()->getTitle();
  60.         $object->setUrl($this->slugify($url));
  61.         parent::preUpdate($object);
  62.     }
  63.     /**
  64.      * @param FormMapper $formMapper
  65.      */
  66.     protected function configureFormFields(FormMapper $formMapper): void
  67.     {
  68.         /** @var Dealer $dealer */
  69.         $dealer $this->getDealer();
  70.         $formMapper->tab('Опис')
  71.             ->with('Контент', ['class' => 'col-sm-6'])
  72.                 ->add('content'ContentType::class, ['label' => false], [
  73.                     'edit' => 'inline',
  74.                     'sortable' => 'position',
  75.                     'admin_code' => 'admin.dc.tour_route_content',
  76.                 ])
  77.             ->end()
  78.             ->with('Додатково', ['class' => 'col-sm-6'])
  79.                 ->add('price'null, ['label' => 'Ціна''required' => false])
  80.                 ->add('state'CheckboxType::class, ['label' => 'Відображати на сайті''required' => false])
  81.                 ->add('image'MediaType::class, [
  82.                     'label' => 'Зображення',
  83.                     'provider' => 'sonata.media.provider.image',
  84.                     'context' => 'dc_site'
  85.                 ])
  86.                 ->add('url'null, ['label' => 'URL''required' => false])
  87.             ->end()
  88.             ->end()
  89.             ->tab('Параметри туру')
  90.             ->with('', ['class' => 'col'])
  91.             ->add('params'CollectionType::class, [
  92.                 'label' => 'параметри',
  93.                 'by_reference' => false,
  94.                 'required' => false,
  95.             ], [
  96.                 'edit' => 'inline',
  97.                 'inline' => 'table',
  98.             ])
  99.             ->end()
  100.             ->end();
  101.     }
  102.     /**
  103.      * @param ListMapper $listMapper
  104.      */
  105.     protected function configureListFields(ListMapper $listMapper): void
  106.     {
  107.         $listMapper
  108.             ->add('id'null, ['label' => 'ID'])
  109.             ->add('title'null, ['label' => 'Назва (укр.)'])
  110.             ->add('state','choice', ['label' => 'Відображати на сайті''editable' => true'choices' => [
  111.                 => 'Так',
  112.                 => 'Ні',
  113.             ]])
  114.             ->add('_action','actions', [
  115.                 'label' => 'Действия',
  116.                 'actions' => [
  117.                     'edit' => [],
  118.                 ]
  119.             ])
  120.         ;
  121.     }
  122. }