From a4884eb3a0abd6e8088b86ee0761cca0f4c67179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Wed, 2 Jul 2025 10:06:44 +0200 Subject: [PATCH] Remove `CSVListFormatter` and `CSVPivotedListFormatter` along with their associated service definitions. --- .../Export/Formatter/CSVListFormatter.php | 241 ------------------ .../Formatter/CSVPivotedListFormatter.php | 229 ----------------- .../config/services/export.yaml | 10 - 3 files changed, 480 deletions(-) delete mode 100644 src/Bundle/ChillMainBundle/Export/Formatter/CSVListFormatter.php delete mode 100644 src/Bundle/ChillMainBundle/Export/Formatter/CSVPivotedListFormatter.php diff --git a/src/Bundle/ChillMainBundle/Export/Formatter/CSVListFormatter.php b/src/Bundle/ChillMainBundle/Export/Formatter/CSVListFormatter.php deleted file mode 100644 index 809e6bf09..000000000 --- a/src/Bundle/ChillMainBundle/Export/Formatter/CSVListFormatter.php +++ /dev/null @@ -1,241 +0,0 @@ -translator = $translatorInterface; - } - - /** - * build a form, which will be used to collect data required for the execution - * of this formatter. - * - * @uses appendAggregatorForm - * - * @param type $exportAlias - */ - public function buildForm( - FormBuilderInterface $builder, - $exportAlias, - array $aggregatorAliases, - ): void { - $builder->add('numerotation', ChoiceType::class, [ - 'choices' => [ - 'yes' => true, - 'no' => false, - ], - 'expanded' => true, - 'multiple' => false, - 'label' => 'Add a number on first column', - ]); - } - - public function getNormalizationVersion(): int - { - return 1; - } - - public function normalizeFormData(array $formData): array - { - return ['numerotation' => $formData['numerotation']]; - } - - public function denormalizeFormData(array $formData, int $fromVersion): array - { - return ['numerotation' => $formData['numerotation']]; - } - - public function getFormDefaultData(array $aggregatorAliases): array - { - return ['numerotation' => true]; - } - - public function getName(): string|TranslatableInterface - { - return 'CSV vertical list'; - } - - /** - * Generate a response from the data collected on differents ExportElementInterface. - * - * @param mixed[] $result The result, as given by the ExportInterface - * @param mixed[] $formatterData collected from the current form - * @param string $exportAlias the id of the current export - * @param array $aggregatorsData an array containing the aggregators data. The key are the filters id, and the value are the data - * @param array $filtersData an array containing the filters data. The key are the filters id, and the value are the data - * - * @return Response The response to be shown - */ - public function getResponse( - $result, - $formatterData, - $exportAlias, - array $exportData, - array $filtersData, - array $aggregatorsData, - ExportGenerationContext $context, - ) { - $this->result = $result; - $this->exportAlias = $exportAlias; - $this->exportData = $exportData; - $this->formatterData = $formatterData; - - $output = fopen('php://output', 'wb'); - - $this->prepareHeaders($output); - - $i = 1; - - foreach ($result as $row) { - $line = []; - - if (true === $this->formatterData['numerotation']) { - $line[] = $i; - } - - foreach ($row as $key => $value) { - $line[] = $this->getLabel($key, $value); - } - - fputcsv($output, $line); - - ++$i; - } - - $csvContent = stream_get_contents($output); - fclose($output); - - $response = new Response(); - $response->setStatusCode(200); - $response->headers->set('Content-Type', 'text/csv; charset=utf-8'); - // $response->headers->set('Content-Disposition','attachment; filename="export.csv"'); - - $response->setContent($csvContent); - - return $response; - } - - public function getType(): string - { - return FormatterInterface::TYPE_LIST; - } - - /** - * Give the label corresponding to the given key and value. - * - * @param string $key - * @param string $value - * - * @throws \LogicException if the label is not found - */ - protected function getLabel($key, $value) - { - if (null === $this->labelsCache) { - $this->prepareCacheLabels(); - } - - if (!\array_key_exists($key, $this->labelsCache)) { - throw new \OutOfBoundsException(sprintf('The key "%s" is not present in the list of keys handled by this query. Check your `getKeys` and `getLabels` methods. Available keys are %s.', $key, \implode(', ', \array_keys($this->labelsCache)))); - } - - return $this->labelsCache[$key]($value); - } - - /** - * Prepare the label cache which will be used by getLabel. This function - * should be called only once in the generation lifecycle. - */ - protected function prepareCacheLabels() - { - $export = $this->getExportManager()->getExport($this->exportAlias); - $keys = $export->getQueryKeys($this->exportData); - - foreach ($keys as $key) { - // get an array with all values for this key if possible - $values = \array_map(static fn ($v) => $v[$key], $this->result); - // store the label in the labelsCache property - $this->labelsCache[$key] = $export->getLabels($key, $values, $this->exportData); - } - } - - /** - * add the headers to the csv file. - * - * @param resource $output - */ - protected function prepareHeaders($output) - { - $keys = $this->getExportManager()->getExport($this->exportAlias)->getQueryKeys($this->exportData); - // we want to keep the order of the first row. So we will iterate on the first row of the results - $first_row = \count($this->result) > 0 ? $this->result[0] : []; - $header_line = []; - - if (true === $this->formatterData['numerotation']) { - $header_line[] = $this->translator->trans('Number'); - } - - foreach ($first_row as $key => $value) { - $content = $this->getLabel($key, '_header'); - if ($content instanceof TranslatableInterface) { - $header_line[] = $content->trans($this->translator, $this->translator->getLocale()); - } else { - $header_line[] = $this->translator->trans($this->getLabel($key, '_header')); - } - } - - if (\count($header_line) > 0) { - fputcsv($output, $header_line); - } - } -} diff --git a/src/Bundle/ChillMainBundle/Export/Formatter/CSVPivotedListFormatter.php b/src/Bundle/ChillMainBundle/Export/Formatter/CSVPivotedListFormatter.php deleted file mode 100644 index 8a02dd48c..000000000 --- a/src/Bundle/ChillMainBundle/Export/Formatter/CSVPivotedListFormatter.php +++ /dev/null @@ -1,229 +0,0 @@ -translator = $translatorInterface; - } - - /** - * build a form, which will be used to collect data required for the execution - * of this formatter. - * - * @uses appendAggregatorForm - * - * @param type $exportAlias - */ - public function buildForm( - FormBuilderInterface $builder, - $exportAlias, - array $aggregatorAliases, - ): void { - $builder->add('numerotation', ChoiceType::class, [ - 'choices' => [ - 'yes' => true, - 'no' => false, - ], - 'expanded' => true, - 'multiple' => false, - 'label' => 'Add a number on first column', - 'data' => true, - ]); - } - - public function getNormalizationVersion(): int - { - return 1; - } - - public function normalizeFormData(array $formData): array - { - return ['numerotation' => $formData['numerotation']]; - } - - public function denormalizeFormData(array $formData, int $fromVersion): array - { - return ['numerotation' => $formData['numerotation']]; - } - - public function getFormDefaultData(array $aggregatorAliases): array - { - return ['numerotation' => true]; - } - - public function getName(): string|\Symfony\Contracts\Translation\TranslatableInterface - { - return 'CSV horizontal list'; - } - - /** - * Generate a response from the data collected on differents ExportElementInterface. - * - * @param mixed[] $result The result, as given by the ExportInterface - * @param mixed[] $formatterData collected from the current form - * @param string $exportAlias the id of the current export - * @param array $aggregatorsData an array containing the aggregators data. The key are the filters id, and the value are the data - * @param array $filtersData an array containing the filters data. The key are the filters id, and the value are the data - * - * @return Response The response to be shown - */ - public function getResponse( - $result, - $formatterData, - $exportAlias, - array $exportData, - array $filtersData, - array $aggregatorsData, - ExportGenerationContext $context, - ) { - $this->result = $result; - $this->exportAlias = $exportAlias; - $this->exportData = $exportData; - $this->formatterData = $formatterData; - - $output = fopen('php://output', 'wb'); - - $i = 1; - $lines = []; - $this->prepareHeaders($lines); - - foreach ($result as $row) { - $j = 0; - - if (true === $this->formatterData['numerotation']) { - $lines[$j][] = $i; - ++$j; - } - - foreach ($row as $key => $value) { - $lines[$j][] = $this->getLabel($key, $value); - ++$j; - } - ++$i; - } - - // adding the lines to the csv output - foreach ($lines as $line) { - fputcsv($output, $line); - } - - $csvContent = stream_get_contents($output); - fclose($output); - - $response = new Response(); - $response->setStatusCode(200); - $response->headers->set('Content-Type', 'text/csv; charset=utf-8'); - $response->headers->set('Content-Disposition', 'attachment; filename="export.csv"'); - - $response->setContent($csvContent); - - return $response; - } - - public function getType(): string - { - return FormatterInterface::TYPE_LIST; - } - - /** - * Give the label corresponding to the given key and value. - * - * @param string $key - * @param string $value - * - * @throws \LogicException if the label is not found - */ - protected function getLabel($key, $value) - { - if (null === $this->labelsCache) { - $this->prepareCacheLabels(); - } - - return $this->labelsCache[$key]($value); - } - - /** - * Prepare the label cache which will be used by getLabel. This function - * should be called only once in the generation lifecycle. - */ - protected function prepareCacheLabels() - { - $export = $this->getExportManager()->getExport($this->exportAlias); - $keys = $export->getQueryKeys($this->exportData); - - foreach ($keys as $key) { - // get an array with all values for this key if possible - $values = \array_map(static fn ($v) => $v[$key], $this->result); - // store the label in the labelsCache property - $this->labelsCache[$key] = $export->getLabels($key, $values, $this->exportData); - } - } - - /** - * add the headers to lines array. - * - * @param array $lines the lines where the header will be added - */ - protected function prepareHeaders(array &$lines) - { - $keys = $this->exportManager->getExport($this->exportAlias)->getQueryKeys($this->exportData); - // we want to keep the order of the first row. So we will iterate on the first row of the results - $first_row = \count($this->result) > 0 ? $this->result[0] : []; - $header_line = []; - - if (true === $this->formatterData['numerotation']) { - $lines[] = [$this->translator->trans('Number')]; - } - - foreach ($first_row as $key => $value) { - $lines[] = [$this->getLabel($key, '_header')]; - } - } -} diff --git a/src/Bundle/ChillMainBundle/config/services/export.yaml b/src/Bundle/ChillMainBundle/config/services/export.yaml index d6a15b6d2..72d862bf7 100644 --- a/src/Bundle/ChillMainBundle/config/services/export.yaml +++ b/src/Bundle/ChillMainBundle/config/services/export.yaml @@ -43,21 +43,11 @@ services: tags: - { name: chill.export_formatter, alias: 'spreadsheet' } - chill.main.export.list_formatter: - class: Chill\MainBundle\Export\Formatter\CSVListFormatter - tags: - - { name: chill.export_formatter, alias: 'csvlist' } - chill.main.export.list_spreadsheet_formatter: class: Chill\MainBundle\Export\Formatter\SpreadsheetListFormatter tags: - { name: chill.export_formatter, alias: 'spreadlist' } - chill.main.export.pivoted_list_formatter: - class: Chill\MainBundle\Export\Formatter\CSVPivotedListFormatter - tags: - - { name: chill.export_formatter, alias: 'csv_pivoted_list' } - Chill\MainBundle\Export\AccompanyingCourseExportHelper: ~ Chill\MainBundle\Export\SortExportElement: ~