dreamStore = $dreamStore; $this->revoltStore = $revoltStore; $this->projectBoostStore = $projectBoostStore; $this->projectInspiringStore = $projectInspiringStore; } public function createEntity(string $entityFqcn) { return $this->getIndividualDataContainer()->getFactory()->create(); } public function configureFields(string $pageName): iterable { // TextField::new('firstname'), // TextField::new('lastname'), // EmailField::new('email'), // TextField::new('introAnswer'), $fields = array(); $fields[] = AssociationField::new('territory') ->setTemplatePath('crud/field/association.html.twig'); $fields[] = TextField::new('nbDream') ->onlyOnIndex(); $fields[] = TextField::new('nbRevolt') ->onlyOnIndex(); $fields[] = TextField::new('nbProjectBoost') ->onlyOnIndex(); $fields[] = TextField::new('nbProjectInspiring') ->onlyOnIndex(); $fields[] = CollectionField::new('revolt') ->setFormTypeOption('entry_type', RevoltType::class) ->setFormTypeOption('by_reference', false) ->setRequired(false) ->hideOnIndex(); $fields[] = CollectionField::new('dream') ->setFormTypeOption('entry_type', DreamType::class) ->setFormTypeOption('by_reference', false) ->setRequired(false) ->hideOnIndex(); $fields[] = CollectionField::new('projectBoost') ->setFormTypeOption('entry_type', ProjectBoostType::class) ->setFormTypeOption('by_reference', false) ->setRequired(false) ->hideOnIndex(); $fields[] = CollectionField::new('projectinspiring') ->setFormTypeOption('entry_type', ProjectInspiringType::class) ->setFormTypeOption('by_reference', false) ->setRequired(false) ->hideOnIndex(); $hasAccess = $this->isGranted('ROLE_ADMIN'); if ($hasAccess) { $fields[] = StatusField::new('status') ->setFormTypeOption('data', 0) ->setFormTypeOption('choices', ['Validé' => 1, 'En attente' => 0]) ->setCustomOption('toggle_label', 'Valider') ->hideOnIndex(); } else { $fields[] = HiddenField::new('status') ->setFormTypeOption('data', 0) ->hideOnIndex(); } return $fields; } // public function persistEntity(EntityManagerInterface $entityManager, $entityInstance): void // { // $configurationRepository = $this->getDoctrine()->getRepository(Configuration::class); // // $configuration = $configurationRepository->findOneByDevAlias('intro_question'); // $entityInstance->setIntroQuestion($configuration->getValue()); // $entityManager->persist($entityInstance); // $entityManager->flush(); // // parent::persistEntity($entityManager, $entityInstance); // } public function createIndexQueryBuilder( SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters ): QueryBuilder { $queryBuilder = parent::createIndexQueryBuilder( $searchDto, $entityDto, $fields, $filters ); $queryBuilder->andWhere('entity.status = ' . $searchDto->getRequest()->get('status')); return $queryBuilder; } public function configureActions(Actions $actions): Actions { parent::configureActions($actions); $export = Action::new('export', 'actions.export') ->setIcon('fa fa-download') ->linkToCrudAction('exportCsv') ->setCssClass('btn btn-primary') ->createAsGlobalAction(); return $actions->add(Crud::PAGE_INDEX, $export); } public function exportCsv(Request $request) { $csv = new CsvGenerator(); $csv->enableConvertEncoding('ISO-8859-1'); $csv->setTitle('Export_Liste', true); $columns = [ 'category' => 'Catégorie', 'thematic' => 'Thématique', 'subthematic' => 'Contribution', 'territory' => 'Lieu', 'description' => 'Description' ]; $csv->setColumns($columns); $resultArray = $this->generateAllResultArray(); $csv = $this->generateCsvData($csv, $resultArray); return $csv->getReponse(); } private function generateAllResultArray(): array { $dreamArray = $this->dreamStore->get(); $revoltArray = $this->revoltStore->get(); $projectBoostArray = $this->projectBoostStore->get(); $projectInspiringArray = $this->projectInspiringStore->get(); return array_merge($dreamArray, $revoltArray, $projectBoostArray, $projectInspiringArray); } private function generateCsvData($csv, $resultArray) { foreach ($resultArray as $result) { $territory = $subthematic = $thematic = ""; if ($result->getIndividualData()) { $territory = $result->getIndividualData()->getTerritory()->getName(); if ($result->getSubthematic()) { $subthematic = $result->getSubthematic()->getName(); } if ($result->getThematic()) { $thematic = $result->getThematic()->getName(); } $data = [ 'category' => $result->__toString(), 'thematic' => $thematic, 'subthematic' => $subthematic, 'territory' => $territory, 'description' => $result->getDescription() ]; $csv->row($data); } } return $csv; } }