src/Controller/Admin/ArticleCrudController.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use Symfony\Contracts\Translation\TranslatorInterface;
  4. use App\Entity\Locale;
  5. use App\Entity\Article\Article;
  6. use App\Entity\Article\ArticleTranslation;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
  9. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  10. use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
  11. use EasyCorp\Bundle\EasyAdminBundle\Filter\ChoiceFilter;
  12. use EasyCorp\Bundle\EasyAdminBundle\Filter\DateTimeFilter;
  13. use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
  14. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  15. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  16. use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
  17. use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
  18. use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;
  19. use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
  20. use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField;
  21. use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
  22. use App\Form\Article\ArticleTranslationType;
  23. use App\Field\VichImageField;
  24. class ArticleCrudController extends AbstractCrudController
  25. {
  26.     /** @var array */
  27.     private $pages = array(
  28.         'admin.page.about' => 'about',
  29.         'admin.page.service' => 'service',
  30.     );
  31.     /** @var TranslatorInterface */
  32.     private $translator;
  33.     /**
  34.      * @param TranslatorInterface $translator
  35.      */
  36.     public function __construct(TranslatorInterface $translator) {
  37.         $this->translator $translator;
  38.     }
  39.     public static function getEntityFqcn(): string
  40.     {
  41.         return Article::class;
  42.     }
  43.     public function configureCrud(Crud $crud): Crud
  44.     {
  45.         return $crud
  46.             ->setEntityLabelInSingular('admin.article.label.singular')
  47.             ->setEntityLabelInPlural('admin.article.label.plural')
  48.             ->setEntityPermission('ROLE_ADMIN')
  49.             ->setPageTitle('index''admin.title.index')
  50.             ->setPageTitle('new''admin.title.new')
  51.             ->setPageTitle('detail''admin.title.detail')
  52.             ->setPageTitle('edit''admin.title.edit')
  53.             ->setHelp('index'$this->translator->trans('admin.article.help.index'))
  54.             ->setHelp('new'$this->translator->trans('admin.article.help.new'))
  55.             ->setHelp('detail'$this->translator->trans('admin.article.help.detail'))
  56.             ->setHelp('edit'$this->translator->trans('admin.article.help.edit'))
  57.             ->setSearchFields(['page''articleTranslations.title''articleTranslations.text''articleTranslations.description'])
  58.             ->setDefaultSort(['id' => 'ASC'])
  59.             ->setPaginatorPageSize(10)
  60.             ->setPaginatorRangeSize(3)
  61.             ->addFormTheme('@FOSCKEditor/Form/ckeditor_widget.html.twig')
  62.         ;
  63.     }
  64.     public function configureActions(Actions $actions): Actions
  65.     {
  66.         return $actions
  67.             // PAGE_INDEX
  68.             ->add(Crud::PAGE_INDEXAction::DETAIL)
  69.             ->update(Crud::PAGE_INDEXAction::NEW, function (Action $action) {
  70.                 return $action->setIcon('fas fa-user-plus')->addCssClass('btn btn-sm btn-primary');
  71.             })
  72.             ->update(Crud::PAGE_INDEXAction::DETAIL, function (Action $action) {
  73.                 return $action->setIcon('far fa-eye')->addCssClass('btn btn-sm btn-warning')->setLabel(false);
  74.             })
  75.             ->update(Crud::PAGE_INDEXAction::EDIT, function (Action $action) {
  76.                 return $action->setIcon('far fa-edit')->addCssClass('btn btn-sm btn-success')->setLabel(false);
  77.             })
  78.             ->update(Crud::PAGE_INDEXAction::DELETE, function (Action $action) {
  79.                 return $action->setIcon('far fa-trash-alt')->setCssClass('btn btn-sm btn-danger font-weight-bolder action-delete ')->setLabel(false);
  80.             })
  81.             // PAGE_NEW
  82.             ->update(Crud::PAGE_NEWAction::SAVE_AND_RETURN, function (Action $action) {
  83.                 return $action->setIcon('fas fa-plus')->addCssClass('btn btn-sm btn-success');
  84.             })
  85.             ->update(Crud::PAGE_NEWAction::SAVE_AND_ADD_ANOTHER, function (Action $action) {
  86.                 return $action->setIcon('fas fa-plus-circle')->setCssClass('btn btn-sm btn-primary');
  87.             })
  88.             ->add(Crud::PAGE_NEWAction::INDEX)->update(Crud::PAGE_NEWAction::INDEX, function (Action $action) {
  89.                 return $action->setIcon('fas fa-list')->setCssClass('btn btn-sm btn-warning');
  90.             })
  91.             // PAGE_EDIT
  92.             ->remove(Crud::PAGE_EDITAction::SAVE_AND_CONTINUE)
  93.             ->update(Crud::PAGE_EDITAction::SAVE_AND_RETURN, function (Action $action) {
  94.                 return $action->setIcon('fas fa-edit')->addCssClass('btn btn-sm btn-success');
  95.             })
  96.             ->add(Crud::PAGE_EDITAction::DETAIL)->update(Crud::PAGE_EDITAction::DETAIL, function (Action $action) {
  97.                 return $action->setIcon('far fa-eye')->setCssClass('btn btn-sm btn-primary font-weight-bolder action-detail ss');
  98.             })
  99.             ->add(Crud::PAGE_EDITAction::INDEX)->update(Crud::PAGE_EDITAction::INDEX, function (Action $action) {
  100.                 return $action->setIcon('fas fa-list')->addCssClass('btn btn-sm btn-warning');
  101.             })
  102.             // PAGE_DETAIL
  103.             ->update(Crud::PAGE_DETAILAction::EDIT, function (Action $action) {
  104.                 return $action->setIcon('fas fa-edit')->addCssClass('btn btn-sm btn-success');
  105.             })
  106.             ->update(Crud::PAGE_DETAILAction::DELETE, function (Action $action) {
  107.                 return $action->setIcon('far fa-trash-alt')->setCssClass('btn btn-sm btn-danger font-weight-bolder action-delete ');
  108.             })
  109.             ->update(Crud::PAGE_DETAILAction::INDEX, function (Action $action) {
  110.                 return $action->setIcon('fas fa-list')->setCssClass('btn btn-sm btn-warning');
  111.             })
  112.             // BATCH ACTIONS
  113.             ->update(Crud::PAGE_INDEXAction::BATCH_DELETE, function (Action $action) {
  114.                 return $action->setIcon('far fa-trash-alt')->setCssClass('btn btn-sm btn-danger font-weight-bolder action-batchDelete ss');
  115.             })
  116.             // Reorder actions
  117.             ->reorder(Crud::PAGE_DETAIL, [Action::INDEXAction::DELETEAction::EDIT])
  118.             ;
  119.     }
  120.     public function configureFields(string $pageName): iterable
  121.     {
  122.         $imagesDirectory $this->getParameter('article_images_directory');
  123.         return [
  124.             IdField::new('id''admin.field.id')->hideOnForm(),
  125.             ChoiceField::new('page''admin.page.title')->setChoices($this->pages),
  126.             DateField::new('date''admin.field.date')->setFormat('dd/MM/yyyy'),
  127.             ImageField::new('image.name')
  128.                 ->setLabel('admin.field.image')
  129.                 ->setBasePath('/' $imagesDirectory)
  130.                 ->hideOnForm(),
  131.             VichImageField::new('imageFile''admin.field.image')
  132.                 ->setDownloadUri('public/' $imagesDirectory)
  133.                 ->setImageUri($imagesDirectory)
  134.                 ->onlyOnForms(),
  135.             CollectionField::new('articleTranslations''admin.field.languages')
  136.                 ->setTemplatePath('fields/article_translations.html.twig')
  137.                 ->onlyOnDetail(),
  138.             CollectionField::new('articleTranslations''admin.field.title')
  139.                 ->onlyOnIndex(),
  140.             CollectionField::new('articleTranslations''admin.field.languages')
  141.                 ->showEntryLabel(false)
  142.                 ->allowAdd(false)
  143.                 ->allowDelete(false)
  144.                 ->setEntryIsComplex(true)
  145.                 ->setEntryType(ArticleTranslationType::class)
  146.                 ->onlyOnForms(),
  147.             DateTimeField::new('createdAt''admin.field.created_at')->setFormat('dd/MM/yyyy HH:mm')->onlyOnDetail(),
  148.             DateTimeField::new('updatedAt''admin.field.updated_at')->setFormat('dd/MM/yyyy HH:mm')->hideOnForm(),
  149.         ];
  150.     }
  151.     public function configureFilters(Filters $filters): Filters
  152.     {
  153.         return $filters
  154.             ->add(DateTimeFilter::new('date''admin.field.date'))
  155.             ->add(ChoiceFilter::new('page''admin.page.title')->setChoices($this->pages))
  156.             ->add(DateTimeFilter::new('createdAt''admin.field.created_at'))
  157.         ;
  158.     }
  159.     public function configureAssets(Assets $assets): Assets
  160.     {
  161.         return $assets->addJsFile('admin/assets/js/enable_locale.js');
  162.     }
  163.     public function createEntity(string $entityFqcn)
  164.     {
  165.         $article = new Article();
  166.         // Set the user who will create this entity
  167.         $article->setUser($this->getUser());
  168.         // Set translation for this entity
  169.         $locales $this->getDoctrine()->getRepository(Locale::class)->findBy([], ['code' => 'ASC']);
  170.         foreach ($locales as $locale) {
  171.             $articleTranslation = new ArticleTranslation();
  172.             $articleTranslation->setLocale($locale);
  173.             $article->addArticleTranslation($articleTranslation);
  174.         }
  175.         return $article;
  176.     }
  177.     public function updateEntity(EntityManagerInterface $entityManager$entityInstance): void
  178.     {
  179.         $entityInstance->setUpdatedAt(new \DateTimeImmutable());
  180.         parent::updateEntity($entityManager$entityInstance);
  181.     }
  182. }