src/Controller/Admin/EcoleCrudController.php line 82
<?phpnamespace App\Controller\Admin;use App\Entity\ContactMember;use App\Entity\Ecole;use App\Entity\EcoleThematique;use App\Entity\FormatEcole;use App\Entity\Membre;use App\Entity\Orateur;use App\Entity\Subvention;use App\Entity\User;use App\Field\DateEcoleIndexField;use App\Field\TitreEcoleIndexField;use App\Filter\EcoleInscriptionOuvertFilter;use App\Form\EcoleFileType;use App\Repository\UserRepository;use Doctrine\ORM\EntityManagerInterface;use Doctrine\ORM\QueryBuilder;use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection;use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection;use EasyCorp\Bundle\EasyAdminBundle\Config\Action;use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;use EasyCorp\Bundle\EasyAdminBundle\Config\KeyValueStore;use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto;use EasyCorp\Bundle\EasyAdminBundle\Field\ArrayField;use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField;use EasyCorp\Bundle\EasyAdminBundle\Field\CountryField;use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;use EasyCorp\Bundle\EasyAdminBundle\Field\EmailField;use EasyCorp\Bundle\EasyAdminBundle\Field\FormField;use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;use EasyCorp\Bundle\EasyAdminBundle\Field\IntegerField;use EasyCorp\Bundle\EasyAdminBundle\Field\NumberField;use EasyCorp\Bundle\EasyAdminBundle\Field\TelephoneField;use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;use EasyCorp\Bundle\EasyAdminBundle\Field\TextEditorField;use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;use EasyCorp\Bundle\EasyAdminBundle\Field\UrlField;use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;use PhpOffice\PhpSpreadsheet\Spreadsheet;use PhpOffice\PhpSpreadsheet\Writer\Xlsx;use Symfony\Bridge\Twig\Mime\TemplatedEmail;use Symfony\Bundle\SecurityBundle\Security;use Symfony\Component\Form\Event\PreSubmitEvent;use Symfony\Component\Form\FormBuilderInterface;use Symfony\Component\Form\FormEvents;use Symfony\Component\Form\FormInterface;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\HttpFoundation\StreamedResponse;use Symfony\Component\Mailer\MailerInterface;use Symfony\Component\Mime\Email;use Symfony\Contracts\Translation\TranslatorInterface;use function Symfony\Component\Translation\t;class EcoleCrudController extends AbstractCrudController{public function __construct(private TranslatorInterface $translator,private AdminUrlGenerator $adminUrlGenerator,private Security $security,private MailerInterface $mailer,private UserRepository $userRepository){}public static function getEntityFqcn(): string{return Ecole::class;}public function index(AdminContext $context){/** @var User|null $user */$user = $this->getUser();if ($user && ($user->isAdmin() || $user->isGestionnaireEcole())) {return parent::index($context); // TODO: Change the autogenerated stub} else {return $this->redirect($this->adminUrlGenerator->setController(EcoleCrudController::class)->setAction('listEcole')->generateUrl());}}public function listEcole(AdminContext $context){$user = $this->getUser();if ($user && $user->isAdmin()) {return $this->redirect($this->adminUrlGenerator->setController(EcoleCrudController::class)->setAction(Action::INDEX)->generateUrl());} else {return $this->render('ecole/listEcole.html.twig');}}public function configureActions(Actions $actions): Actions{/** @var User|null $user */$user = $this->getUser();$vuProgramme = Action::new('vuProgramme', 'Vu programme', 'fa fa-calendar')->linkToCrudAction('listEcole')->displayIf(static function (Ecole $entity) use ($user) {return $user && ($user->isGestionnaireEcole());})->createAsGlobalAction();$downloadExcel = Action::new('downloadExcel', $this->translator->trans('ecole.action.download_excel', [], 'admin'), 'fa fa-file')->linkToCrudAction('downloadExcel')->displayIf(static function (Ecole $entity) use ($user) {return $user && ($user->isAdmin() || $entity->isGestionnaires($user)) ;});$addRegister = Action::new('newInscription', $this->translator->trans('ecole.action.inscription', [], 'admin'), 'fa fa-register')->linkToCrudAction('newInscription')->displayIf(static function (Ecole $entity) use ($user) {return$entity->isValider()&& $user&& $user->isOnlyUser()&& $entity->getModeInscription() !== null;//&& !$user->hasAlreadyInscription($entity);})->setTemplatePath('admin/action/ecoleNewInscription.html.twig');$showModal = Action::new('showModal', '', 'fa-solid fa-magnifying-glass')->linkToCrudAction('showModal')->addCssClass('show-ecole-modal')->setHtmlAttributes(['data-bs-toggle' => 'modal','data-bs-target' => '#modal-info-ecole',]);$urlVoirInscrit = $this->adminUrlGenerator->setController(InscriptionCrudController::class)//->set('filters[ecole]', '2')->generateUrl();$voirInscrit = Action::new('voirInscription', 'voir inscrit', 'fa-solid fa-calendar-circle-plus')->linkToUrl($urlVoirInscrit)->setTemplatePath('admin/action/voirInscrit.html.twig')->displayIf(static function (Ecole $entity) use ($user) {return $user && ($entity->isGestionnaires($user) || $user->isAdmin());});if (!$user || $user->isGestionnaireEcole() || $user->isOnlyUser()) {$actions->remove(Crud::PAGE_INDEX, Action::NEW);}$actions->remove(Crud::PAGE_NEW, Action::SAVE_AND_ADD_ANOTHER);$actions->remove(Crud::PAGE_EDIT, Action::SAVE_AND_CONTINUE);// bouton pour que le gestionnaire d'école puisse soumettre son école pour validation$actions->add(Crud::PAGE_EDIT, Action::new('submitToValidation', 'Soumettre pour validation')->linkToCrudAction(Action::EDIT)->displayAsButton()->setHtmlAttributes(['type' => 'submit','name' => 'ea[newForm][btn]','value' => 'saveAndSubmitToValidation'])->addCssClass('btn btn-success')->displayIf(static function (Ecole $entity) use ($user) {return $entity->getStatut() === Ecole::STATUS_BROUILLON && !$user->isAdmin();}));$actions->add(Crud::PAGE_INDEX, $showModal)->add(Crud::PAGE_INDEX, $voirInscrit);$actions->update(Crud::PAGE_INDEX, Action::EDIT, function (Action $action) use ($user) {return $action->displayIf(static function (Ecole $entity) use ($user) {return $user && ((in_array($entity->getStatut(), [Ecole::STATUS_BROUILLON]) && $user->isGestionnaireEcole()) || $user->isAdmin()) ;});});$actions->add(Crud::PAGE_INDEX, Action::DETAIL);$actions->update(Crud::PAGE_DETAIL, Action::DELETE, function (Action $action) use ($user) {return $action->displayIf(static function (Ecole $ecole) use ($user) {return $user->isAdmin();});});$actions->update(Crud::PAGE_DETAIL, Action::EDIT, function (Action $action) use ($user) {return $action->displayIf(static function (Ecole $ecole) use ($user) {return $user->isAdmin();});});$actions->update(Crud::PAGE_EDIT, Action::SAVE_AND_RETURN, function (Action $action) use ($user) {return $action->displayIf(static function (Ecole $entity) use ($user) {return ((in_array($entity->getStatut(), [Ecole::STATUS_BROUILLON]) && $user->isGestionnaireEcole())) || $user->isAdmin() ;});});// bouton pour que l'admin puisse valider une ecole$actions->add(Crud::PAGE_EDIT, Action::new('submitAndValidate', 'Valider l\'école')->linkToCrudAction(Action::EDIT)->displayAsButton()->setHtmlAttributes(['id' => 'submitAndValidate','type' => 'submit','name' => 'ea[newForm][btn]','value' => 'submitAndValidate',])->addCssClass('btn btn-success')->displayIf(static function (Ecole $entity) use ($user) {return $user->isAdmin();}));$actions->add(Crud::PAGE_EDIT, Action::new('submitAndValidateNoEmail', 'Valider l\'école sans envoi de l\'email')->linkToCrudAction(Action::EDIT)->displayAsButton()->setHtmlAttributes(['id' => 'submitAndValidateNoEmail','type' => 'submit','name' => 'ea[newForm][btn]','value' => 'submitAndValidateNoEmail',])->addCssClass('btn btn-success')->displayIf(static function (Ecole $entity) use ($user) {return $user->isAdmin();}));// bouton pour que l'admin puisse abandonner une ecole$actions->add(Crud::PAGE_EDIT, Action::new('submitAndReject', 'Abandonner l\'école')->linkToCrudAction(Action::EDIT)->displayAsButton()->setHtmlAttributes(['id' => 'submitAndReject','type' => 'submit','name' => 'ea[newForm][btn]','value' => 'submitAndReject',])->addCssClass('btn btn-danger')->displayIf(static function (Ecole $entity) use ($user) {return $user->isAdmin();}));// bouton pour que l'admin puisse renvoyer une ecole en brouillon$actions->add(Crud::PAGE_EDIT, Action::new('submitAndDraft', 'Renvoyer en brouillon l\'école')->linkToCrudAction(Action::EDIT)->displayAsButton()->setHtmlAttributes(['id' => 'submitAndDraft','type' => 'submit','name' => 'ea[newForm][btn]','value' => 'submitAndDraft',])->addCssClass('btn btn-primary')->displayIf(static function (Ecole $entity) use ($user) {return $user->isAdmin() && $entity->getStatut() === Ecole::STATUS_SOUMIS;}));$actions->add(Crud::PAGE_EDIT, Action::new('backToList', 'Retour à la liste')->linkToCrudAction(Action::INDEX));$actions->update(Crud::PAGE_INDEX, Action::DELETE, function(Action $action) use ($user) {return $action->displayIf(static function (Ecole $entity) use ($user) {return $entity->getStatut() === Ecole::STATUS_BROUILLON && $user->isGestionnaireEcole();});});return $actions->add(Crud::PAGE_INDEX, $downloadExcel)->add(Crud::PAGE_INDEX, $addRegister)->add(Crud::PAGE_INDEX, $vuProgramme)->remove(Crud::PAGE_INDEX, Action::BATCH_DELETE);}public function configureCrud(Crud $crud): Crud{return $crud->showEntityActionsInlined()->setEntityLabelInSingular('ecole')->setEntityLabelInPlural('écoles')->setDateFormat('d MMMM Y')->setTimeFormat('H:i:s')->setPageTitle('index', 'Liste des %entity_label_plural%')// you can pass a PHP closure as the value of the title->setPageTitle('new', 'Ajouter un projet d\'%entity_label_singular%')// in DETAIL and EDIT pages, the closure receives the current entity// as the first argument->setPageTitle('detail', 'Détail de l\'%entity_label_singular%')->setPageTitle('edit', 'Edition de l\'%entity_label_singular%')// the help message displayed to end users (it can contain HTML tags)->setHelp('edit', 'Vous pouvez ici modifier les informations de l\'école.')//->overrideTemplate('');}public function configureFilters(Filters|\EasyCorp\Bundle\EasyAdminBundle\Config\Filters $filters): \EasyCorp\Bundle\EasyAdminBundle\Config\Filters{return $filters->add(EcoleInscriptionOuvertFilter::new('Recherche', $this->security))//->add('libelle')//->add('published');}public function configureFields(string $pageName): iterable{if ($pageName === Crud::PAGE_INDEX) {return [IdField::new('id')->hideOnIndex(),DateEcoleIndexField::new('dateEcoleText', ''),TitreEcoleIndexField::new('libelle', '')->setSortable(false),//TextField::new('libelle', 'form.ecole.libele'),//TextField::new('PorteurProjetFullName', 'form.ecole.panel.porteurProjet'),//TextField::new('dateEcoleText', 'Date'),TextField::new('statut', 'form.ecole.statut'),IntegerField::new('nbInscrit', 'form.ecole.nbInscrit')->setSortable(false),];}$config = [// panels usually display only a titleFormField::addTab('Informations générales'),IdField::new('id')->hideOnForm(),TextField::new('libelle', 'form.ecole.libele')->setColumns('col-md-12'),];if ($this->getUser() && $this->getUser()->isAdmin()) {$config[] = AssociationField::new('gestionnaires', 'form.ecole.creator')//->setFormTypeOption('choice_label',// $this->translator->getLocale() === 'fr' ? 'labelFr' : 'labelEn'//)->setQueryBuilder(static function (QueryBuilder $qb) {return $qb->andWhere($qb->expr()->orX($qb->getAllAliases()[0].'.roles LIKE :roleInclude',$qb->getAllAliases()[0].'.roles LIKE :roleStart',$qb->getAllAliases()[0].'.roles LIKE :roleEnd',))->setParameter('roleInclude', '%ROLE_GESTIONNAIRE_ECOLE%')->setParameter('roleStart', 'ROLE_GESTIONNAIRE_ECOLE%')->setParameter('roleEnd', '%ROLE_GESTIONNAIRE_ECOLE');})->setColumns('col-md-6');}$config[] = TextField::new('statut', 'statut')->setDisabled(true)->setColumns($this->getUser() && $this->getUser()->isAdmin() ? 'col-md-6' : 'col-md-12');;$config = [...$config,FormField::addPanel('form.ecole.panel.dateDefinitive'),DateField::new('dateDefinitiveValideDebut', 'form.ecole.dateFinitiveEcoleDebut')->setColumns('col-md-6')->setDisabled($this->getUser() && $this->getUser()->isAdmin() ? false : true),DateField::new('dateDefinitiveValideFin', 'form.ecole.dateFinitiveEcoleFin')->setColumns('col-md-6')->setDisabled($this->getUser() && $this->getUser()->isAdmin() ? false : true),FormField::addTab('form.ecole.tab.details'),AssociationField::new('taillePrevue', 'form.ecole.taillePrevue')->setFormTypeOption('choice_label',$this->translator->getLocale() === 'fr' ? 'labelFr' : 'labelEn')->setColumns('col-md-3'),AssociationField::new('formatPropose', 'form.ecole.formatPropose')->setFormTypeOption('choice_label',$this->translator->getLocale() === 'fr' ? 'labelFr' : 'labelEn')->setColumns('col-md-3'),AssociationField::new('frequencePropose', 'form.ecole.frequencePropose')->setFormTypeOption('choice_label',$this->translator->getLocale() === 'fr' ? 'labelFr' : 'labelEn')->setColumns('col-md-3'),NumberField::new('nbJours', 'form.ecole.nbJours')->setColumns('col-md-3'),FormField::addPanel('form.ecole.panel.calendar'),FormField::addPanel('form.ecole.panel.marsToMay'),DateField::new('marsAMaiDateDebut', 'form.ecole.marsAMaiDateDebut')->setColumns('col-md-6'),DateField::new('marsAMaiDateFin', 'form.ecole.marsAMaiDateFin')->setColumns('col-md-6'),FormField::addPanel('form.ecole.panel.juneToAugust'),DateField::new('juinAAoutDateDebut', 'form.ecole.juinAAoutDateDebut')->setColumns('col-md-6'),DateField::new('juinAAoutDateFin', 'form.ecole.juinAAoutDateFin')->setColumns('col-md-6'),FormField::addPanel('form.ecole.panel.septemberToNovember'),DateField::new('septembreANovembreDateDebut', 'form.ecole.septembreANovembreDateDebut')->setColumns('col-md-6'),DateField::new('septembreANovembreDateFin', 'form.ecole.septembreANovembreDateFin')->setColumns('col-md-6'),FormField::addTab('form.ecole.panel.porteurProjet'),TextField::new('porteurProjetPrenom', 'form.ecole.porteurProjetPrenom')->setColumns('col-md-4'),TextField::new('porteurProjetNom', 'form.ecole.porteurProjetNom')->setColumns('col-md-4'),TextField::new('porteurProjetLaboratoire', 'form.ecole.porteurProjetLaboratoire')->setColumns('col-md-4'),TextField::new('porterProjetAdressePostale', 'form.ecole.porterProjetAdressePostale')->setColumns('col-md-12'),TextField::new('porteurProjetCodePostal', 'form.ecole.porteurProjetCodePostal')->setColumns('col-md-4'),TextField::new('porteurProjetVille', 'form.ecole.porteurProjetVille')->setColumns('col-md-4'),CountryField::new('porterProjetPays', 'form.ecole.porterProjetPays')->setColumns('col-md-4'),TelephoneField::new('porteurProjetTel', 'form.ecole.porteurProjetTel')->setColumns('col-md-4'),TelephoneField::new('porterProjetPortable', 'form.ecole.porterProjetPortable')->setColumns('col-md-4'),EmailField::new('porteurProjetEmail', 'form.ecole.porteurProjetEmail')->setColumns('col-md-4'),TextareaField::new('descriptionActivite', 'form.ecole.descriptionActivite')->setColumns('col-md-12')->setMaxLength(3000),CollectionField::new('membres', 'form.ecole.membres')->allowAdd()->allowDelete()->renderExpanded()->setEntryIsComplex()->useEntryCrudForm()->setColumns('col-md-12'),FormField::addTab('form.ecole.panel.domaine_sujet'),TextareaField::new('breveDescription', 'form.ecole.breveDescription')->setColumns('col-md-12')->setMaxLength(3000),UrlField::new('siteWeb', 'form.ecole.siteWeb')->setColumns('col-md-6'),EmailField::new('emailGenerique', 'form.ecole.emailGenerique')->setColumns('col-md-6'),CollectionField::new('thematiques', 'form.ecole.thematiques')->allowAdd()->allowDelete()->renderExpanded()->setEntryIsComplex()->useEntryCrudForm()->setColumns('col-md-12'),ArrayField::new('motsCles', 'form.ecole.motsCles'),FormField::addTab('form.ecole.panel.comiteScientifique'),CollectionField::new('membresComiteScientifique', 'form.ecole.membresComiteScientifique')->allowAdd()->allowDelete()->renderExpanded()->setEntryIsComplex()->useEntryCrudForm()->setColumns('col-md-12'),FormField::addTab('form.ecole.panel.comiteOrganisation'),CollectionField::new('membresComiteOrganisation', 'form.ecole.membresComiteOrganisation')->allowAdd()->allowDelete()->renderExpanded()->setEntryIsComplex()->useEntryCrudForm()->setColumns('col-md-12'),FormField::addTab('form.ecole.panel.public'),ChoiceField::new('public', 'form.ecole.public')->allowMultipleChoices()->renderExpanded()->setTranslatableChoices(['MASTER' => t('form.ecole.public.master', [], 'admin'),'POST_DOCS' => t('form.ecole.public.post_docs', [], 'admin'),'JEUNE_CHERCHEUR' => t('form.ecole.public.jeune_chercheur', [], 'admin'),'CHERCHEUR_CONFIRME' => t('form.ecole.public.chercheur_confirme', [], 'admin'),'INDUSTRIEL' => t('form.ecole.public.industriel', [], 'admin'),'AUTRES' => t('form.ecole.public.autre', [], 'admin'),]),FormField::addTab('form.ecole.panel.programme'),TextareaField::new('programme', 'form.ecole.programme')->setColumns('col-md-12')->setMaxLength(3000),BooleanField::new('grandPublic', 'form.ecole.grandPublic'),CollectionField::new('orateurs', 'form.ecole.orateurs')->allowAdd()->allowDelete()->renderExpanded()->setEntryIsComplex()->useEntryCrudForm()->setColumns('col-md-12'),FormField::addTab('form.ecole.panel.subvention_financement'),CollectionField::new('subventions', 'form.ecole.subventions')->allowAdd()->allowDelete()->renderExpanded()->setEntryIsComplex()->useEntryCrudForm()->setColumns('col-md-12')->setCustomOption('allowHtml', true)->setCustomOption('escape', false)/*->formatValue(function ($value, $entity) {return is_string($value) ? nl2br($value) : $value;})*/,FormField::addTab('form.ecole.panel.commentaire'),TextEditorField::new('commentaire', 'form.ecole.commentaire')->setColumns('col-md-12'),CollectionField::new('files', 'form.ecole.files')->setEntryType(EcoleFileType::class),FormField::addTab('form.ecole.panel.inscription'),ChoiceField::new('modeInscription', 'form.ecole.inscription')->renderExpanded()->setFormTypeOptionIfNotSet('placeholder', t('form.ecole.inscription.no_inscription', [], 'admin'))->setTranslatableChoices(['ONE_STEP' => t('form.ecole.inscription.une_etape', [], 'admin'),'TWO_STEPS' => t('form.ecole.inscription.deux_etapes', [], 'admin'),]),ChoiceField::new('single', 'form.ecole.inscription.single')->renderExpanded()->setFormTypeOptionIfNotSet('placeholder', t('form.ecole.inscription.single.empty', [], 'admin'))->setTranslatableChoices(['1' => t('form.ecole.inscription.single.autoriser', [], 'admin'),'0' => t('form.ecole.inscription.single.interdire', [], 'admin'),]),ChoiceField::new('accompagnants', 'form.ecole.inscription.accompagnants')->renderExpanded()->setFormTypeOptionIfNotSet('placeholder', t('form.ecole.inscription.accompagnants.empty', [], 'admin'))->setTranslatableChoices(['1' => t('form.ecole.inscription.accompagnants.autoriser', [], 'admin'),'0' => t('form.ecole.inscription.accompagnants.interdire', [], 'admin'),]),ChoiceField::new('documentsInscription', 'form.ecole.documentsInscription')->renderExpanded()->allowMultipleChoices()->setFormTypeOptionIfNotSet('placeholder', t('form.ecole.inscription.no_documentInscription', [], 'admin'))->setTranslatableChoices(['ABSTRACT' => t('form.ecole.inscription.document_abstract', [], 'admin'),'CV' => t('form.ecole.inscription.document_cv', [], 'admin'),'LETTRE_MOTIVATION' => t('form.ecole.inscription.document_lettre_motivation', [], 'admin'),'AUTRE' => t('form.ecole.inscription.document_autre', [], 'admin'),]),FormField::addPanel('form.ecole.panel.date_pre_inscription')->setColumns('col-md-6'),DateField::new('datePreInscriptionDebut', 'form.ecole.dateInscriptionDebut')->setColumns('col-md-6')->setCssClass('full-width'),DateField::new('datePreInscriptionFin', 'form.ecole.dateInscriptionFin')->setColumns('col-md-6')->setCssClass('full-width'),FormField::addPanel('form.ecole.panel.date_inscription')->setColumns('col-md-6'),DateField::new('dateInscriptionDebut', 'form.ecole.dateInscriptionDebut')->setColumns('col-md-6')->setCssClass('full-width'),DateField::new('dateInscriptionFin', 'form.ecole.dateInscriptionFin')->setColumns('col-md-6')->setCssClass('full-width'),TextEditorField::new('informationComplementaire', 'form.ecole.informationComplementaire')->setColumns('col-md-12'),//DateTimeField::new('createdAt')->onlyOnDetail(),// panels can also define their icon, CSS class and help message//FormField::addPanel('Contact information')// ->setIcon('phone')->addCssClass('optional')// ->setHelp('Phone number is preferred'),//TextField::new('phone'),//TextField::new('email')->hideOnIndex(),// panels can be collapsible too (useful if your forms are long)// this makes the panel collapsible but renders it expanded by default//FormField::addPanel('Contact information')->collapsible(),// this makes the panel collapsible and renders it collapsed by default//FormField::addPanel('Contact information')->renderCollapsed(),];return $config;}public function downloadExcel(AdminContext $context){/** @var Ecole $ecole */$ecole = $context->getEntity()->getInstance();$spreadsheet = new Spreadsheet();$activeWorksheet = $spreadsheet->getActiveSheet();$data = ['#' => $ecole->getId(),'libelle' => $ecole->getLibelle(),'taillePrevue' => $ecole->getTaillePrevue()?->getCodeExport(),'formatPropose' => $ecole->getFormatPropose()?->getCodeExport(),'frequencePropose' => $ecole->getFrequencePropose()?->getCodeExport(),'nbJours' => $ecole->getNbJours(),'marsAMaiDateDebut' => $ecole->getMarsAMaiDateDebut()?->format('d/m/Y'),'marsAMaiDateFin' => $ecole->getMarsAMaiDateFin()?->format('d/m/Y'),'juinAAoutDateDebut' => $ecole->getJuinAAoutDateDebut()?->format('d/m/Y'),'juinAAoutDateFin' => $ecole->getJuinAAoutDateFin()?->format('d/m/Y'),'septembreANovembreDateDebut' => $ecole->getSeptembreANovembreDateDebut()?->format('d/m/Y'),'septembreANovembreDateFin' => $ecole->getSeptembreANovembreDateFin()?->format('d/m/Y'),'porteurProjetPrenom' => $ecole->getPorteurProjetPrenom(),'porteurProjetNom' => $ecole->getPorteurProjetNom(),'porteurProjetLaboratoire' => $ecole->getPorteurProjetLaboratoire(),'porterProjetAdressePostale' => $ecole->getPorterProjetAdressePostale(),'porteurProjetCodePostal' => $ecole->getPorteurProjetCodePostal(),'porteurProjetVille' => $ecole->getPorteurProjetVille(),'porterProjetPays' => $ecole->getPorterProjetPays(),'porteurProjetTel' => $ecole->getPorteurProjetTel(),'porterProjetPortable' => $ecole->getPorterProjetPortable(),'porteurProjetEmail' => $ecole->getPorteurProjetEmail(),//'breveDescription' => $ecole->getBreveDescription(),'siteWeb' => $ecole->getSiteWeb(),'emailGenerique' => $ecole->getEmailGenerique(),'informationComplementaire' => $ecole->getInformationComplementaire(),];foreach ($ecole->getMembres() as $index => $membre) {$data[ 'Prénom membre' . $index + 1] = $membre->getPrenom();$data[ 'Nom membre' . $index + 1] = $membre->getNom();$data[ 'Laboratoire membre' . $index + 1] = $membre->getLaboratoire();$data['Adresse Postale membre' . $index + 1] = $membre->getAdressePostale();$data['Code Postal membre' . $index + 1] = $membre->getCodePostal();$data['Ville membre' . $index + 1] = $membre->getVille();$data['Tel membre' . $index + 1] = $membre->getTel();$data['Portable membre' . $index + 1] = $membre->getPortable();$data['Email membre' . $index + 1] = $membre->getEmail();}/*** @var int $index* @var EcoleThematique $thematique*/foreach ($ecole->getThematiques() as $index => $thematique) {$data['Thématique' . $index + 1] = $thematique->getThematique()?->getCodeExport();$data['Institut' . $index + 1] = $thematique->getInstitut()?->getCodeExport();}$data['descriptionActivite'] = $ecole->getDescriptionActivite();$data['motsCles'] = implode(',', $ecole->getMotsCles());/*** @var int $index* @var Membre $membre*/foreach ($ecole->getMembresComiteScientifique() as $index => $membre) {$data[ 'Prénom membre CS' . $index + 1] = $membre->getPrenom();$data[ 'Nom membre CS' . $index + 1] = $membre->getNom();$data[ 'Laboratoire membre CS' . $index + 1] = $membre->getLaboratoire();$data['Ville membre CS' . $index + 1] = $membre->getVille();$data['Pays membre CS' . $index + 1] = $membre->getCountry();$data['Email membre CS' . $index + 1] = $membre->getEmail();}/*** @var int $index* @var Membre $membre*/foreach ($ecole->getMembresComiteOrganisation() as $index => $membre) {$data[ 'Prénom membre CO' . $index + 1] = $membre->getPrenom();$data[ 'Nom membre CO' . $index + 1] = $membre->getNom();$data[ 'Laboratoire membre CO' . $index + 1] = $membre->getLaboratoire();$data['Ville membre CO' . $index + 1] = $membre->getVille();$data['Pays membre CO' . $index + 1] = $membre->getCountry();$data['Email membre CO' . $index + 1] = $membre->getEmail();}$data['public'] = implode(',', $ecole->getPublic());$data['programme'] = $ecole->getProgramme();if ($ecole->isGrandPublic()) {$data['grandPublic'] = 'Oui';} else if ($ecole->isGrandPublic() === false) {$data['grandPublic'] = 'Non';} else {$data['grandPublic'] = '';}/*** @var int $index* @var Orateur $orateur*/foreach ($ecole->getOrateurs() as $index => $orateur) {$data[ 'Prénom Orateur' . $index + 1] = $orateur->getPrenom();$data[ 'Nom Orateur' . $index + 1] = $orateur->getNom();$data['Email Orateur' . $index + 1] = $orateur->getEmail();$data[ 'Theme Orateur' . $index + 1] = $orateur->getTheme();}/*** @var int $index* @var Subvention $subvention*/foreach ($ecole->getSubventions() as $index => $subvention) {$data[ 'Organisme Subvention' . $index + 1] = $subvention->getOrganisme()?->getCodeExport();$data[ 'Statut Subvention' . $index + 1] = $subvention->getStatut();$data[ 'Montant Subvention' . $index + 1] = $subvention->getMontant();$data[ 'Observation Subvention' . $index + 1] = $subvention->getObservation();}$data['Commentaire'] = $ecole->getCommentaire();$data['Mode inscription'] = $ecole->getModeInscription();$data['Date inscription début'] = $ecole->getDateInscriptionDebut()?->format('d/m/Y');$data['Date inscription fin'] = $ecole->getDateInscriptionFin()?->format('d/m/Y');$data['Statut'] = $ecole->getStatut();$data['Date pré inscription début'] = $ecole->getDatePreInscriptionDebut()?->format('d/m/Y');$data['Date pré inscription fin'] = $ecole->getDatePreInscriptionFin()?->format('d/m/Y');$activeWorksheet->fromArray([array_keys($data),array_values($data)]);$filename = sprintf('export_ecole_%s.xlsx', $ecole->getLibelle());$writer = new Xlsx($spreadsheet);$response = new StreamedResponse();$response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');$response->headers->set('Content-Disposition', 'attachment;filename="'.$filename.'"');$response->setPrivate();$response->headers->addCacheControlDirective('no-cache', true);$response->headers->addCacheControlDirective('must-revalidate', true);$response->setCallback(function() use ($writer) {$writer->save('php://output');});return $response;}public function showModal(AdminContext $context){}public function newInscription(AdminContext $context){$ecole = $context->getEntity()->getInstance();$url = $this->adminUrlGenerator->setController(InscriptionCrudController::class)->setAction('newInscription')->set('ecoleId', $ecole->getId())->unset('entityId')->generateUrl();return $this->redirect($url);}public function configureAssets(Assets $assets): Assets{return $assets->addJsFile('https://kit.fontawesome.com/d47a3ede5e.js')->addJsFile('/static/admin/scripts/modalEcoleInformation.js')->addWebpackEncoreEntry('listEcole');}public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder{$qb = parent::createIndexQueryBuilder($searchDto, $entityDto, $fields, $filters); // TODO: Change the autogenerated stubif ($this->getUser()) {// utilisateur connectéif (in_array(User::ROLE_GESTIONNAIRE_ECOLE, $this->getUser()->getRoles())) {$qb->innerJoin('entity.gestionnaires', 'gestionnaires')->andWhere('gestionnaires = :user')->setParameter('user', $this->getUser());return $qb;}if (in_array(User::ROLE_ADMIN, $this->getUser()->getRoles())) {return $qb;}if (in_array(User::ROLE_USER, $this->getUser()->getRoles())) {$qb->andWhere('entity.statut = :statut')->setParameter('statut', Ecole::STATUS_VALIDEE);return $qb;}} else {// utilisateur non connecté$qb->andWhere('entity.statut = :statut')->setParameter('statut', Ecole::STATUS_VALIDEE);return $qb;}}public function edit(AdminContext $context){return parent::edit($context); // TODO: Change the autogenerated stub}public function createEditFormBuilder(EntityDto $entityDto, KeyValueStore $formOptions, AdminContext $context): FormBuilderInterface{$mailer = $this->mailer;$userRepository = $this->userRepository;$form = parent::createEditFormBuilder($entityDto, $formOptions, $context); // TODO: Change the autogenerated stub$form->addEventListener(FormEvents::PRE_SUBMIT, function (PreSubmitEvent $event) use ($context, $mailer, $userRepository) {$data = $event->getForm()->getData();$gestionnaires = $data->getGestionnaires();$ecole = $data;$btnSubmitValue = $context->getRequest()->request->all()['ea']['newForm']['btn'];if ($btnSubmitValue === 'saveAndSubmitToValidation') {/** @var Ecole $data */$data->setStatut(Ecole::STATUS_SOUMIS);$event->getForm()->setData($data);$admins = $userRepository->getAdmins();$emails = [];foreach ($admins as $admin) {$emails[] = $admin->getEmail();}$email = (new TemplatedEmail())->to(...$emails)->subject(sprintf("L'ecole %s a été soumis à la validation", $data->getLibelle()))->htmlTemplate('email/to_admin_ecole_soumission.html.twig')->context(['ecole' => $data,]);$mailer->send($email);}if ($btnSubmitValue === 'saveAndReject') {$data->setStatut(Ecole::STATUS_REJETEE);$event->getForm()->setData($data);}if ($btnSubmitValue === 'submitAndValidate') {// email gestionnaireforeach ($gestionnaires as $gestionnaire) {$email = (new TemplatedEmail())->to($gestionnaire->getEmail())->subject(sprintf("Votre école \"%s\" a été validée", $ecole->getLibelle()))->htmlTemplate('email/to_gestionnaire_valider_ecole.html.twig')->context(['ecole' => $ecole,]);$mailer->send($email);}$data->setStatut(Ecole::STATUS_VALIDEE);$event->getForm()->setData($data);}if ($btnSubmitValue === 'submitAndValidateNoEmail') {$data->setStatut(Ecole::STATUS_VALIDEE);$event->getForm()->setData($data);}if ($btnSubmitValue === 'submitAndDraft') {// email gestionnaireforeach ($gestionnaires as $gestionnaire) {$email = (new TemplatedEmail())->to($gestionnaire->getEmail())->subject(sprintf("Votre école \"%s\" est à nouveau éditable pour correction", $ecole->getLibelle()))->htmlTemplate('email/to_gestionnaire_retour_brouillon_ecole.html.twig')->context(['ecole' => $ecole,]);$mailer->send($email);}$data->setStatut(Ecole::STATUS_BROUILLON);$event->getForm()->setData($data);}});return $form;}public function updateEntity(EntityManagerInterface $entityManager, $entityInstance): void{parent::updateEntity($entityManager, $entityInstance); // TODO: Change the autogenerated stubif ($this->getUser()->isAdmin()) {return;}$admins = $this->userRepository->getAdmins();$emails = [];foreach ($admins as $admin) {$emails[] = $admin->getEmail();}$email = (new TemplatedEmail())->to(...$emails)->subject(sprintf("L'ecole %s a été modifié", $entityInstance->getLibelle()))->htmlTemplate('email/to_admin_ecole_modification.html.twig')->context(['ecole' => $entityInstance,'modifyBy' => $this->getUser()->getEmail()]);$this->mailer->send($email);}}