src/Controller/Admin/ProjectCrudController.php line 45

  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Project;
  4. use App\Form\AttachmentType;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  7. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  8. use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
  9. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
  10. use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
  11. use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField;
  12. use EasyCorp\Bundle\EasyAdminBundle\Field\NumberField;
  13. use EasyCorp\Bundle\EasyAdminBundle\Field\TextEditorField;
  14. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  15. use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
  16. use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
  17. use EasyCorp\Bundle\EasyAdminBundle\Filter\TextFilter;
  18. use Symfony\Component\String\Slugger\SluggerInterface;
  19. use Vich\UploaderBundle\Form\Type\VichImageType;
  20. class ProjectCrudController extends AbstractCrudController
  21. {
  22.     protected SluggerInterface $slugger;
  23.     public function __construct(SluggerInterface $slugger)
  24.     {
  25.         $this->slugger $slugger;
  26.     }
  27.     public static function getEntityFqcn(): string
  28.     {
  29.         return Project::class;
  30.     }
  31.     public function configureFields(string $pageName): iterable
  32.     {
  33.         return [
  34.             TextField::new('name''Nom du projet'),
  35.             AssociationField::new('client')
  36.                 ->setFormTypeOptions(['choice_label' => 'name'])
  37.                 ->formatValue(function ($value$entity) {
  38.                     return $entity->getClient()->getName();
  39.                 }),
  40.             AssociationField::new('category''Catégories')
  41.                 ->setFormTypeOptions(['choice_label' => 'name']),
  42.             TextEditorField::new('content''Description')
  43.                 ->setSortable(false)
  44.                 ->hideOnIndex(),
  45.             TextField::new('featuredImageFile''Image à la une')
  46.                 ->setFormType(VichImageType::class)
  47.                 ->hideOnIndex()
  48.                 ->hideOnDetail()
  49.                 ->setHelp("Affichage seulement quand le projet est mis à la une"),
  50.             ImageField::new('featuredImage''Image à la une')
  51.                 ->setBasePath('/uploads/images/projects')
  52.                 ->setUploadDir('public/uploads/images/projects')
  53.                 ->onlyOnIndex()
  54.                 ->setSortable(false),
  55.             ImageField::new('featuredImage','Image à la une')
  56.                 ->setTemplatePath('admin/project/image.html.twig')
  57.                 ->setHelp("Affichage seulement quand le projet est mis à la une")
  58.                 ->onlyOnDetail(),
  59.             TextField::new('gridImageFile''Image mosaïque')
  60.                 ->setFormType(VichImageType::class)
  61.                 ->hideOnIndex()
  62.                 ->hideOnDetail()
  63.                 ->setHelp("Affichage quand le projet n'est pas mis à la une"),
  64.             ImageField::new('gridImage''Image mosaïque')
  65.                 ->setBasePath('/uploads/images/projects')
  66.                 ->setUploadDir('public/uploads/images/projects')
  67.                 ->onlyOnIndex()
  68.                 ->setSortable(false),
  69.             ImageField::new('gridImage','Image mosaïque')
  70.                 ->setTemplatePath('admin/project/image.html.twig')
  71.                 ->setHelp("Affichage quand le projet n'est pas mis à la une")
  72.                 ->onlyOnDetail(),
  73.             TextField::new('imageFile''Image par défaut')
  74.                 ->setFormType(VichImageType::class)
  75.                 ->hideOnIndex()
  76.                 ->hideOnDetail()
  77.                 ->setHelp("Affichage en en-tête de la fiche"),
  78.             ImageField::new('image''Image par défaut')
  79.                 ->setBasePath('/uploads/images/projects')
  80.                 ->setUploadDir('public/uploads/images/projects')
  81.                 ->onlyOnIndex()
  82.                 ->setSortable(false),
  83.             ImageField::new('image','Image par défaut')
  84.                 ->setTemplatePath('admin/project/image.html.twig')
  85.                 ->setHelp("Affichage en en-tête de la fiche")
  86.                 ->onlyOnDetail(),
  87.             CollectionField::new('attachments','Ajouter des images complementaires')
  88.                 ->onlyOnForms()
  89.                 ->setFormTypeOption('by_reference'false)
  90.                 ->setEntryIsComplex(true)
  91.                 ->setEntryType(AttachmentType::class),
  92.             CollectionField::new('attachments''Image Complémentaire')
  93.                ->setTemplatePath('admin/project/attachments/imagesCollection.html.twig')
  94.                ->onlyOnDetail(),
  95.             // AssociationField::new('users')->setFormTypeOptions(['choice_label' => 'email']),
  96.             NumberField::new('displayOrder''Ordre')
  97.                 ->setPermission('ROLE_ADMIN'),
  98.             BooleanField::new('isDisplayed''Affiché ?'),
  99.             BooleanField::new('isFeatured''À la une ?'),
  100.                 // ->setCssClass('mb-5') // fait bugger la modification du toggle button
  101.             TextField::new('slug')
  102.                 ->setHelp("Lien pour l'accès direct (exemple : https://dsides.net/slug)")
  103.                 ->hideOnIndex()
  104.                 ->setPermission('ROLE_ADMIN'),
  105.         ];
  106.     }
  107.     public function configureActionsActions $actions ) : Actions
  108.     {
  109.         return $actions->add(Crud::PAGE_INDEX,'detail');
  110.     }
  111.     public function configureCrud(Crud $crud): Crud
  112.     {
  113.         return $crud
  114.             ->setPageTitle('index''Projets',)
  115.             ->setPageTitle('edit''Modifier le projet',)
  116.             ->setPageTitle('detail''Vue en détail du projet')
  117.             ->setDefaultSort(['displayOrder' => 'ASC'])
  118.             ;
  119.     }
  120.     public function configureFiltersFilters $filters ) : Filters
  121.     {
  122.         return $filters->add(TextFilter::new('content'));
  123.     }
  124.     public function persistEntity(EntityManagerInterface $entityManager$entityInstance): void
  125.     {
  126.         $projects $entityManager->getRepository(Project::class)->findAll();
  127.         // TODO: reorder avant
  128.         $entityInstance
  129.             ->setDisplayOrder(count($projects) + 1)
  130.             ->setSlug($this->slugger->slug($entityInstance->getName()));
  131.         parent::persistEntity($entityManager$entityInstance);
  132.     }
  133. }