|
- <?php
-
- namespace Lc\PietroBundle\Controller\IndividualData;
-
- use App\Entity\Configuration;
- use App\Entity\IndividualData;
- use Lc\PietroBundle\Container\IndividualData\IndividualDataContainer;
- use Lc\PietroBundle\Form\Dream\DreamType;
- use Lc\PietroBundle\Form\ProjectBoost\ProjectBoostType;
- use Lc\PietroBundle\Form\ProjectInspiring\ProjectInspiringType;
- use Lc\PietroBundle\Form\Revolt\RevoltType;
- 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\Crud;
- use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
- use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto;
- use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
- use EasyCorp\Bundle\EasyAdminBundle\Field\HiddenField;
- use EasyCorp\Bundle\EasyAdminBundle\Field\IntegerField;
- use Lc\PietroBundle\Repository\Dream\DreamStore;
- use Lc\PietroBundle\Repository\ProjectBoost\ProjectBoostStore;
- use Lc\PietroBundle\Repository\ProjectInspiring\ProjectInspiringStore;
- use Lc\PietroBundle\Repository\Revolt\RevoltStore;
- use Lc\PietroBundle\Controller\AbstractAdminController;
- use Symfony\Component\HttpFoundation\Request;
- use EasyCorp\Bundle\EasyAdminBundle\Field\EmailField;
- use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
- use Lc\SovBundle\Field\CollectionField;
- use Lc\SovBundle\Field\StatusField;
- use Lc\SovBundle\Generator\CsvGenerator;
-
- abstract class IndividualDataAdminController extends AbstractAdminController
- {
- protected DreamStore $dreamStore;
- protected RevoltStore $revoltStore;
- protected ProjectBoostStore $projectBoostStore;
- protected ProjectInspiringStore $projectInspiringStore;
-
- public function __construct(
- DreamStore $dreamStore,
- RevoltStore $revoltStore,
- ProjectBoostStore $projectBoostStore,
- ProjectInspiringStore $projectInspiringStore
- ) {
- $this->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;
- }
- }
|