From 7ea7137194b491902684aac8fb98bac7544906e3 Mon Sep 17 00:00:00 2001 From: Marc Ducobu Date: Tue, 19 Apr 2016 17:54:19 +0200 Subject: [PATCH] New formatter : CSVListFormatter --- Export/Formatter/CSVListFormatter.php | 109 ++++++++++++++++++++++++++ Resources/config/services.yml | 8 ++ 2 files changed, 117 insertions(+) create mode 100644 Export/Formatter/CSVListFormatter.php diff --git a/Export/Formatter/CSVListFormatter.php b/Export/Formatter/CSVListFormatter.php new file mode 100644 index 000000000..645007e29 --- /dev/null +++ b/Export/Formatter/CSVListFormatter.php @@ -0,0 +1,109 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +namespace Chill\MainBundle\Export\Formatter; + +use Chill\MainBundle\Export\ExportInterface; +use Symfony\Component\HttpFoundation\Response; +use Chill\MainBundle\Export\FormatterInterface; +use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Component\Form\FormBuilderInterface; +use Chill\MainBundle\Export\ExportManager; +use Symfony\Component\Form\Extension\Core\Type\FormType; + +// command to get the report with curl : curl --user "center a_social:password" "http://localhost:8000/fr/exports/generate/count_person?export[filters][person_gender_filter][enabled]=&export[filters][person_nationality_filter][enabled]=&export[filters][person_nationality_filter][form][nationalities]=&export[aggregators][person_nationality_aggregator][order]=1&export[aggregators][person_nationality_aggregator][form][group_by_level]=country&export[submit]=&export[_token]=RHpjHl389GrK-bd6iY5NsEqrD5UKOTHH40QKE9J1edU" --globoff + +/** + * Create a CSV List for the export + * + * @author Champs-Libres + */ +class CSVListFormatter implements FormatterInterface +{ + public function __construct(TranslatorInterface $translator, ExportManager $manager) + { + $this->translator = $translator; + $this->exportManager = $manager; + } + + public function getType() + { + return FormatterInterface::TYPE_CSV_LIST; + } + + public function getName() + { + return 'CSV List'; + } + + /** + * build a form, which will be used to collect data required for the execution + * of this formatter. + * + * @uses appendAggregatorForm + * @param FormBuilderInterface $builder + * @param type $exportAlias + * @param array $aggregatorAliases + */ + public function buildForm( + FormBuilderInterface $builder, + $exportAlias, + array $aggregatorAliases + ){ + // do nothing + } + + /** + * Generate a response from the data collected on differents ExportElementInterface + * + * @param mixed[] $result The result, as given by the ExportInterface + * @param mixed[] $data collected from the current form + * @param \Chill\MainBundle\Export\ExportInterface $export the export which is executing + * @param \Chill\MainBundle\Export\FilterInterface[] $filters the filters applying on the export. The key will be filters aliases, and the values will be filter's data (from their own form) + * @param \Chill\MainBundle\Export\AggregatorInterface[] $aggregators the aggregators applying on the export. The key will be aggregators aliases, and the values will be aggregator's data (from their own form) + * @return \Symfony\Component\HttpFoundation\Response The response to be shown + */ + public function getResponse( + $result, + $formatterData, + $exportAlias, + array $exportData, + array $filtersData, + array $aggregatorsData + ) { + $output = fopen('php://output', 'w'); + + foreach ($result as $row) { + //var_dump($row); + fputcsv($output, $row); + } + + $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; + } +} diff --git a/Resources/config/services.yml b/Resources/config/services.yml index 26c0157ff..9a64e0144 100644 --- a/Resources/config/services.yml +++ b/Resources/config/services.yml @@ -201,3 +201,11 @@ services: - "@chill.main.export_manager" tags: - { name: chill.export_formatter, alias: 'csv' } + + chill.main.export.list_formatter: + class: Chill\MainBundle\Export\Formatter\CSVListFormatter + arguments: + - "@translator" + - "@chill.main.export_manager" + tags: + - { name: chill.export_formatter, alias: 'csvlist' }