You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

IndividualDataAdminController.php 5.0KB

3 anni fa
3 anni fa
3 anni fa
3 anni fa
3 anni fa
3 anni fa
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. namespace Lc\PietroBundle\Controller\IndividualData;
  3. use Doctrine\ORM\QueryBuilder;
  4. use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection;
  5. use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection;
  6. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  7. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  8. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  9. use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
  10. use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto;
  11. use Lc\PietroBundle\Repository\Dream\DreamStore;
  12. use Lc\PietroBundle\Repository\ProjectBoost\ProjectBoostStore;
  13. use Lc\PietroBundle\Repository\ProjectInspiring\ProjectInspiringStore;
  14. use Lc\PietroBundle\Repository\Revolt\RevoltStore;
  15. use Lc\PietroBundle\Controller\AbstractAdminController;
  16. use Lc\SovBundle\Repository\RepositoryQueryInterface;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Lc\SovBundle\Generator\CsvGenerator;
  19. abstract class IndividualDataAdminController extends AbstractAdminController
  20. {
  21. protected DreamStore $dreamStore;
  22. protected RevoltStore $revoltStore;
  23. protected ProjectBoostStore $projectBoostStore;
  24. protected ProjectInspiringStore $projectInspiringStore;
  25. public function __construct(
  26. DreamStore $dreamStore,
  27. RevoltStore $revoltStore,
  28. ProjectBoostStore $projectBoostStore,
  29. ProjectInspiringStore $projectInspiringStore
  30. ) {
  31. $this->dreamStore = $dreamStore;
  32. $this->revoltStore = $revoltStore;
  33. $this->projectBoostStore = $projectBoostStore;
  34. $this->projectInspiringStore = $projectInspiringStore;
  35. }
  36. public function createEntity(string $entityFqcn)
  37. {
  38. return $this->getIndividualDataContainer()->getFactory()->create();
  39. }
  40. public function configureFields(string $pageName): iterable
  41. {
  42. return $this->getIndividualDataContainer()
  43. ->getFieldDefinition()
  44. ->getFields($pageName);
  45. }
  46. public function getRepositoryQuery(): RepositoryQueryInterface
  47. {
  48. return $this->getIndividualDataContainer()->getRepositoryQuery();
  49. }
  50. public function createIndexRepositoryQuery(
  51. SearchDto $searchDto,
  52. EntityDto $entityDto,
  53. FieldCollection $fields,
  54. FilterCollection $filters
  55. ): RepositoryQueryInterface {
  56. return parent::createIndexRepositoryQuery(
  57. $searchDto,
  58. $entityDto,
  59. $fields,
  60. $filters
  61. );
  62. $repositoryQuery = parent::createIndexRepositoryQuery($searchDto, $entityDto, $fields, $filters);
  63. if ($searchDto->getRequest()->get('status')) {
  64. $repositoryQuery->filterByStatus($searchDto->getRequest()->get('status'));
  65. }
  66. return $repositoryQuery;
  67. }
  68. public function configureActions(Actions $actions): Actions
  69. {
  70. parent::configureActions($actions);
  71. $export = Action::new('export', 'actions.export')
  72. ->setIcon('fa fa-download')
  73. ->linkToCrudAction('exportCsv')
  74. ->setCssClass('btn btn-primary export-csv')
  75. ->createAsGlobalAction();
  76. return $actions->add(Crud::PAGE_INDEX, $export);
  77. }
  78. public function exportCsv(Request $request)
  79. {
  80. $csv = new CsvGenerator();
  81. $csv->enableConvertEncoding('ISO-8859-1');
  82. $csv->setTitle('Export_Liste', true);
  83. $columns = [
  84. 'category' => 'Catégorie',
  85. 'thematic' => 'Thématique',
  86. 'subthematic' => 'Contribution',
  87. 'territory' => 'Lieu',
  88. 'description' => 'Description'
  89. ];
  90. $csv->setColumns($columns);
  91. $resultArray = $this->generateAllResultArray();
  92. $csv = $this->generateCsvData($csv, $resultArray);
  93. return $csv->getReponse();
  94. }
  95. private function generateAllResultArray(): array
  96. {
  97. $dreamArray = $this->dreamStore->get();
  98. $revoltArray = $this->revoltStore->get();
  99. $projectBoostArray = $this->projectBoostStore->get();
  100. $projectInspiringArray = $this->projectInspiringStore->get();
  101. return array_merge($dreamArray, $revoltArray, $projectBoostArray, $projectInspiringArray);
  102. }
  103. private function generateCsvData($csv, $resultArray)
  104. {
  105. foreach ($resultArray as $result) {
  106. $territory = $subthematic = $thematic = "";
  107. if ($result->getIndividualData()) {
  108. $territory = $result->getIndividualData()->getTerritory()->getName();
  109. if ($result->getSubthematic()) {
  110. $subthematic = $result->getSubthematic()->getName();
  111. }
  112. if ($result->getThematic()) {
  113. $thematic = $result->getThematic()->getName();
  114. }
  115. $data = [
  116. 'category' => $result->__toString(),
  117. 'thematic' => $thematic,
  118. 'subthematic' => $subthematic,
  119. 'territory' => $territory,
  120. 'description' => $result->getDescription()
  121. ];
  122. $csv->row($data);
  123. }
  124. }
  125. return $csv;
  126. }
  127. }