選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

113 行
4.0KB

  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\CollectifData;
  4. use App\Entity\Configuration;
  5. use App\Type\DreamType;
  6. use App\Type\ProjectBoostType;
  7. use App\Type\ProjectInspiringType;
  8. use App\Type\RevoltType;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Doctrine\ORM\QueryBuilder;
  11. use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection;
  12. use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection;
  13. use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
  14. use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
  15. use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto;
  16. use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
  17. use EasyCorp\Bundle\EasyAdminBundle\Field\HiddenField;
  18. use EasyCorp\Bundle\EasyAdminBundle\Field\IntegerField;
  19. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  20. use Lc\SovBundle\Controller\AbstractAdminController as AbstractCrudController;
  21. use Lc\SovBundle\Doctrine\Extension\TreeInterface;
  22. use Lc\SovBundle\Field\CollectionField;
  23. use Lc\SovBundle\Field\StatusField;
  24. class CollectifDataCrudController extends AbstractCrudController
  25. {
  26. public static function getEntityFqcn(): string
  27. {
  28. return CollectifData::class;
  29. }
  30. public function configureFields(string $pageName): iterable
  31. {
  32. $fields = array();
  33. $fields[] = TextField::new('name');
  34. $fields[] = AssociationField::new('territory')
  35. ->setTemplatePath('crud/field/association.html.twig');
  36. $fields[] = IntegerField::new('nbParticipant');
  37. $fields[] = TextField::new('nbDream')
  38. ->onlyOnIndex();
  39. $fields[] = TextField::new('nbRevolt')
  40. ->onlyOnIndex();
  41. $fields[] = TextField::new('nbProjectBoost')
  42. ->onlyOnIndex();
  43. $fields[] = TextField::new('nbProjectInspiring')
  44. ->onlyOnIndex();
  45. $fields[] = CollectionField::new('revolt')
  46. ->setFormTypeOption('entry_type', RevoltType::class)
  47. ->setFormTypeOption('by_reference', false)
  48. ->setRequired(false)
  49. ->hideOnIndex();
  50. $fields[] = CollectionField::new('dream')
  51. ->setFormTypeOption('entry_type', DreamType::class)
  52. ->setFormTypeOption('by_reference', false)
  53. ->setRequired(false)
  54. ->hideOnIndex();
  55. $fields[] = CollectionField::new('projectBoost')
  56. ->setFormTypeOption('entry_type', ProjectBoostType::class)
  57. ->setFormTypeOption('by_reference', false)
  58. ->setRequired(false)
  59. ->hideOnIndex();
  60. $fields[] = CollectionField::new('projectinspiring')
  61. ->setFormTypeOption('entry_type', ProjectInspiringType::class)
  62. ->setFormTypeOption('by_reference', false)
  63. ->setRequired(false)
  64. ->hideOnIndex();
  65. $hasAccess = $this->isGranted('ROLE_ADMIN');
  66. if ($hasAccess) {
  67. $fields[] = StatusField::new('status')
  68. ->setFormTypeOption('choices', ['Validé' => 1, 'En attente' => 0])
  69. ->setCustomOption('toggle_label', 'Valider')
  70. ->hideOnIndex();
  71. } else {
  72. $fields[] = HiddenField::new('status')
  73. ->setFormTypeOption('data', 0)
  74. ->hideOnIndex();
  75. }
  76. return $fields;
  77. }
  78. public function createIndexQueryBuilder(
  79. SearchDto $searchDto,
  80. EntityDto $entityDto,
  81. FieldCollection $fields,
  82. FilterCollection $filters
  83. ): QueryBuilder {
  84. $queryBuilder = parent::createIndexQueryBuilder(
  85. $searchDto,
  86. $entityDto,
  87. $fields,
  88. $filters
  89. );
  90. $queryBuilder->andWhere('entity.status = ' . $searchDto->getRequest()->get('status'));
  91. return $queryBuilder;
  92. }
  93. public function persistEntity(EntityManagerInterface $entityManager, $entityInstance): void
  94. {
  95. $entityInstance->setUser($this->getUser());
  96. $entityManager->persist($entityInstance);
  97. $entityManager->flush();
  98. parent::persistEntity($entityManager, $entityInstance);
  99. }
  100. }