src/Controller/DefaultController.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Event;
  4. use Doctrine\ORM\Internal\Hydration\ArrayHydrator;
  5. use Doctrine\ORM\Internal\Hydration\ObjectHydrator;
  6. use Doctrine\ORM\Query\ResultSetMappingBuilder;
  7. use Exporter\Handler;
  8. use App\Entity\Result;
  9. use App\Entity\Survey;
  10. use Exporter\Writer\CsvWriter;
  11. use Doctrine\ORM\Query\ResultSetMapping;
  12. use Exporter\Source\ArraySourceIterator;
  13. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  14. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  15. use Symfony\Component\Serializer\Serializer;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Serializer\Encoder\CsvEncoder;
  19. use Symfony\Component\HttpFoundation\StreamedResponse;
  20. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  21. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  22. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  23. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  24. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  25. class DefaultController extends AbstractController
  26. {
  27.     /**
  28.      * @Route("/", name="homepage")
  29.      */
  30.     public function indexAction()
  31.     {
  32.         return $this->render('default/index.html.twig');
  33.     }
  34.     /**
  35.      * @Route("/keolis", name="keolis")
  36.      */
  37.     public function keolisAction(Request $request)
  38.     {
  39.         if ($request->get('start')) {
  40.             $start $request->get('start') . " 00:00:00";
  41.         } else {
  42.             $start date('Y-m-01'time());
  43.         }
  44.         if ($request->get('end')) {
  45.             $end $request->get('end') . " 23:59:59";
  46.         } else {
  47.             $end date('Y-m-t'time());
  48.         }
  49.         $datas $this->queries('DIVIA'$start$endnull);
  50.         return $this->render('dashboard/keolis.html.twig', [
  51.             'codes' => $datas['codes'],
  52.             'ages' => $datas['ages'],
  53.             'genders' => $datas['genders'],
  54.             'actions' => $datas['actions'],
  55.             'durations' => $datas['durations'],
  56.             'travels' => $datas['travels'],
  57.             'start' => $start,
  58.             'end' => $end
  59.         ]);
  60.     }
  61.     /**
  62.      * @Route("/sncf", name="sncf")
  63.      */
  64.     public function sncfAction(Request $request)
  65.     {
  66.         if ($request->get('start')) {
  67.             $start $request->get('start') . " 00:00:00";
  68.         } else {
  69.             $start date('Y-m-01'time());
  70.         }
  71.         if ($request->get('end')) {
  72.             $end $request->get('end') . " 23:59:59";
  73.         } else {
  74.             $end date('Y-m-t'time());
  75.         }
  76.         $datas $this->queries('TER'$start$end);
  77.         return $this->render('dashboard/sncf.html.twig', [
  78.             'codes' => $datas['codes'],
  79.             'ages' => $datas['ages'],
  80.             'genders' => $datas['genders'],
  81.             'actions' => $datas['actions'],
  82.             'durations' => $datas['durations'],
  83.             'moods' => $datas['moods'],
  84.             'categories' => $datas['categories'],
  85.             'start' => $start,
  86.             'end' => $end
  87.         ]);
  88.     }
  89.     /**
  90.      * @Route("/download/{network}/{start}/{end}/{raw}", name="download")
  91.      */
  92.     public function downloadAction($network$start$end$raw false)
  93.     {
  94.         $start = new \DateTime($start);
  95.         $start->setTime(0000);
  96.         $end = new \DateTime($end);
  97.         $end->setTime(2359);
  98.         // create a new spreadsheet object
  99.         $spreadsheet = new Spreadsheet();
  100.         $spreadsheet->getProperties()
  101.             ->setCreator("PIMMS")
  102.             ->setLastModifiedBy("PIMMS")
  103.             ->setTitle("Export données " $network);
  104.         $spreadsheet = ($raw) ?
  105.             $this->getRawDatas($spreadsheet$network$start$end)
  106.             : $this->getNiceDatas($spreadsheet$network$start$end);
  107.         $spreadsheet->getActiveSheet()->setTitle(($raw) ? 'Données' 'Stats');
  108.         // Set active sheet index to the first sheet, so Excel opens this as the first sheet
  109.         $spreadsheet->setActiveSheetIndex(0);
  110.         // create the writer
  111.         $writer = new Xlsx($spreadsheet);
  112.         // create the response
  113.         $response = new StreamedResponse(
  114.             function () use ($writer) {
  115.                 $writer->save('php://output');
  116.             }
  117.         );
  118.         // adding headers
  119.         $response->headers->set('Content-Type''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8');
  120.         $response->headers->set('Content-Disposition''attachment; filename="pimms_' . (($raw) ? 'donnees_' 'stats_') . $network '_' $start->format('d-m-Y') . '-' $end->format('d-m-Y') . '.xlsx"');
  121.         return $response;
  122.     }
  123.     private function getNiceDatas($spreadsheet$network$start$end)
  124.     {
  125.         $datas $this->queries($network$start$end);
  126.         if ($datas['genders']) {
  127.             $spreadsheet->getActiveSheet()
  128.                 ->setCellValue('A1''Sexe')
  129.                 ->setCellValue('B1''Effectifs');
  130.             foreach ($datas['genders'] as $k => $g) {
  131.                 $spreadsheet->getActiveSheet()
  132.                     ->setCellValue('A' . ($k 2), $g['gender'])
  133.                     ->setCellValue('B' . ($k 2), $g['genderCount']);
  134.             }
  135.         }
  136.         if ($datas['ages']) {
  137.             $spreadsheet->getActiveSheet()
  138.                 ->setCellValue('D1''Age')
  139.                 ->setCellValue('E1''Effectifs');
  140.             foreach ($datas['ages'] as $k => $g) {
  141.                 $spreadsheet->getActiveSheet()
  142.                     ->setCellValue('D' . ($k 2), $g['age'])
  143.                     ->setCellValue('E' . ($k 2), $g['ageCount']);
  144.             }
  145.         }
  146.         if ($datas['durations']) {
  147.             $spreadsheet->getActiveSheet()
  148.                 ->setCellValue('G1''Durée')
  149.                 ->setCellValue('H1''Effectifs');
  150.             foreach ($datas['durations'] as $k => $g) {
  151.                 $spreadsheet->getActiveSheet()
  152.                     ->setCellValue('G' . ($k 2), $g['duration'])
  153.                     ->setCellValue('H' . ($k 2), $g['durationCount']);
  154.             }
  155.         }
  156.         if ($datas['actions']) {
  157.             $spreadsheet->getActiveSheet()
  158.                 ->setCellValue('A10''Type d\'action')
  159.                 ->setCellValue('B10''Effectifs');
  160.             foreach ($datas['actions'] as $k => $g) {
  161.                 $spreadsheet->getActiveSheet()
  162.                     ->setCellValue('A' . ($k 11), $g['action'])
  163.                     ->setCellValue('B' . ($k 11), $g['actionCount']);
  164.             }
  165.         }
  166.         if ($datas['moods']) {
  167.             $spreadsheet->getActiveSheet()
  168.                 ->setCellValue('D10''Ambiance')
  169.                 ->setCellValue('E10''Effectifs');
  170.             foreach ($datas['moods'] as $k => $g) {
  171.                 $spreadsheet->getActiveSheet()
  172.                     ->setCellValue('D' . ($k 11), $g['mood'])
  173.                     ->setCellValue('E' . ($k 11), $g['moodCount']);
  174.             }
  175.         }
  176.         if ($datas['categories']) {
  177.             $spreadsheet->getActiveSheet()
  178.                 ->setCellValue('G10''Catégorie d\'action')
  179.                 ->setCellValue('H10''Effectifs');
  180.             foreach ($datas['categories'] as $k => $g) {
  181.                 if (isset($g['category'][0])) {
  182.                     $spreadsheet->getActiveSheet()
  183.                         ->setCellValue('G' . ($k 11), implode(' > '$g['category']))
  184.                         ->setCellValue('H' . ($k 11), $g['categoryCount']);
  185.                 }
  186.             }
  187.         }
  188.         if ($datas['travels']) {
  189.             $spreadsheet->getActiveSheet()
  190.                 ->setCellValue('J10''Ligne')
  191.                 ->setCellValue('K10''Trajets');
  192.             $index 0;
  193.             foreach ($datas['travels'] as $k => $g) {
  194.                 $spreadsheet->getActiveSheet()
  195.                     ->setCellValue('J' . ($index 11), $k)
  196.                     ->setCellValue('K' . ($index 11), $g);
  197.                 $index++;
  198.             }
  199.         }
  200.         return $spreadsheet;
  201.     }
  202.     public function getRawDatas($spreadsheet$network$start$end)
  203.     {
  204.         $em $this->getDoctrine()->getManager();
  205.         $events $this->getDoctrine()
  206.             ->getManager()
  207.             ->createQueryBuilder()
  208.             ->select('MAX(e.id) AS id''e.user''e.network''e.age''e.gender''e.mood''e.duration''e.comment''e.action''e.creation''e.altercation''e.line''e.code''e.codename''e.vehicule''e.stop''e.category')
  209.             ->from('App\Entity\Event''e')
  210.                         ->where('e.network = :network')
  211.             ->andWhere('e.codename != :null')
  212.             ->andWhere('e.creation <= :end')
  213.             ->andWhere('e.creation >= :start')
  214.             ->groupBy('e.user''e.network''e.age''e.gender''e.mood''e.duration''e.comment''e.action''e.creation''e.altercation''e.line''e.code''e.codename''e.vehicule''e.stop''e.category')
  215.             ->setParameters([
  216.                 'network' => $network,
  217.                 'null' => '',
  218.                 'start' => $start,
  219.                 'end' => $end,
  220.             ])
  221.             ->getQuery()
  222.             ->execute();
  223.         $datas = array();
  224.         foreach ($events as $e) {
  225.             $datas[] = [
  226.                 'Ligne' => $e['line'],
  227.                 'Arrêt' => $e['stop'],
  228.                 'Véhicule' => $e['vehicule'],
  229.                 'Code' => $e['code'],
  230.                 'Nom du code' => $e['codename'],
  231.                 'Catégorie' => implode(' / ', (array)$e['category']),
  232.                 'Agent' => $e['user'],
  233.                 'Age' => $e['age'],
  234.                 'Genre' => $e['gender'],
  235.                 'Humeur' => $e['mood'],
  236.                 'Durée' => $e['duration'],
  237.                 'Commentaire' => $e['comment'],
  238.                 'Action' => $e['action'],
  239.                 'Date' => $e['creation']->format('Y-m-d'),
  240.                 'Heure' => $e['creation']->format('H:i'),
  241.                 'Altercation' => $e['altercation']
  242.             ];
  243.         }
  244.         $letters = ['A''B''C''D''E''F''G''H''I''J''H''K''L''M''N''O'];
  245.         $col 1;
  246.         // Set headers
  247.         foreach ($datas[0] as $key => $value) {
  248.             $spreadsheet->getActiveSheet()->setCellValueByColumnAndRow($col1$key);
  249.             $col++;
  250.         }
  251.         // Set datas
  252.         $row 2;
  253.         foreach ($datas as $data) {
  254.             $col 1;
  255.             foreach ($data as $value) {
  256.                 $spreadsheet->getActiveSheet()->setCellValueByColumnAndRow($col$row$value);
  257.                 $col++;
  258.             }
  259.             $row++;
  260.         }
  261.         return $spreadsheet;
  262.     }
  263.     private function queries($network$start$end$raw false)
  264.     {
  265.         $rp $this->getDoctrine()->getRepository(Event::class);
  266.         $parameters = array(
  267.             'network' => $network,
  268.             'null' => '',
  269.             'start' => $start,
  270.             'end' => $end,
  271.             'descente' => 'descente'
  272.         );
  273.         $codes $rp->createQueryBuilder('e')
  274.             ->select('COUNT(e.codename) AS codeCount, e.codename')
  275.             ->where('e.network = :network')
  276.             ->andWhere('e.codename != :null')
  277.             ->andWhere('e.codename != :descente')
  278.             ->andWhere('e.creation <= :end')
  279.             ->andWhere('e.creation >= :start')
  280.             ->setParameters($parameters)
  281.             ->groupBy('e.codename')
  282.             ->getQuery()
  283.             ->getResult();
  284.         $ages $rp->createQueryBuilder('e')
  285.             ->select('COUNT(e.age) AS ageCount, e.age')
  286.             ->where('e.network = :network')
  287.             ->andWhere('e.age != :null')
  288.             ->andWhere('e.creation <= :end')
  289.             ->andWhere('e.creation >= :start')
  290.             ->andWhere('e.codename != :descente')
  291.             ->setParameters($parameters)
  292.             ->groupBy('e.age')
  293.             ->getQuery()
  294.             ->getResult();
  295.         $genders $rp->createQueryBuilder('e')
  296.             ->select('COUNT(e.gender) AS genderCount, e.gender')
  297.             ->where('e.network = :network')
  298.             ->andWhere('e.gender != :null')
  299.             ->andWhere('e.creation <= :end')
  300.             ->andWhere('e.creation >= :start')
  301.             ->andWhere('e.codename != :descente')
  302.             ->setParameters($parameters)
  303.             ->groupBy('e.gender')
  304.             ->getQuery()
  305.             ->getResult();
  306.         $actions $rp->createQueryBuilder('e')
  307.             ->select('COUNT(e.action) AS actionCount, e.action')
  308.             ->where('e.network = :network')
  309.             ->andWhere('e.action != :null')
  310.             ->andWhere('e.creation <= :end')
  311.             ->andWhere('e.creation >= :start')
  312.             ->andWhere('e.codename != :descente')
  313.             ->setParameters($parameters)
  314.             ->groupBy('e.action')
  315.             ->getQuery()
  316.             ->getResult();
  317.         $durations $rp->createQueryBuilder('e')
  318.             ->select('COUNT(e.duration) AS durationCount, e.duration')
  319.             ->where('e.network = :network')
  320.             ->andWhere('e.duration != :null')
  321.             ->andWhere('e.creation <= :end')
  322.             ->andWhere('e.creation >= :start')
  323.             ->andWhere('e.codename != :descente')
  324.             ->setParameters($parameters)
  325.             ->groupBy('e.duration')
  326.             ->getQuery()
  327.             ->getResult();
  328.         $moods $rp->createQueryBuilder('e')
  329.             ->select('COUNT(e.mood) AS moodCount, e.mood')
  330.             ->where('e.network = :network')
  331.             ->andWhere('e.mood != :null')
  332.             ->andWhere('e.creation <= :end')
  333.             ->andWhere('e.creation >= :start')
  334.             ->andWhere('e.codename != :descente')
  335.             ->setParameters($parameters)
  336.             ->groupBy('e.mood')
  337.             ->getQuery()
  338.             ->getResult();
  339.         $categories $rp->createQueryBuilder('e')
  340.             ->select('COUNT(e.category) AS categoryCount, e.category')
  341.             ->where('e.network = :network')
  342.             ->andWhere('e.category != :null')
  343.             ->andWhere('e.creation <= :end')
  344.             ->andWhere('e.creation >= :start')
  345.             ->andWhere('e.codename != :descente')
  346.             ->setParameters($parameters)
  347.             ->groupBy('e.category')
  348.             ->getQuery()
  349.             ->getResult();
  350.         $tResults $rp->createQueryBuilder('e')
  351.             ->where('e.network = :network')
  352.             ->andWhere('e.creation <= :end')
  353.             ->andWhere('e.creation >= :start')
  354.             ->setParameters([
  355.                 'network' => $network,
  356.                 'start' => $start,
  357.                 'end' => $end,
  358.             ])
  359.             ->orderBy('e.line''ASC')
  360.             ->addOrderBy('e.creation''ASC')
  361.             ->getQuery()
  362.             ->getResult();
  363.         $travels = [];
  364.         $lastDate 0;
  365.         foreach ($tResults as $r) {
  366.             if (isset($travels[$r->getLine()])) {
  367.                 if ($r->getCreation()->getTimestamp() - $lastDate 900) {
  368.                     $travels[$r->getLine()]++;
  369.                     $lastDate $r->getCreation()->getTimestamp();
  370.                 }
  371.             } else {
  372.                 $travels[$r->getLine()] = 1;
  373.                 $lastDate $r->getCreation()->getTimestamp();
  374.             }
  375.         }
  376.         return [
  377.             'codes' => $codes,
  378.             'ages' => $ages,
  379.             'genders' => $genders,
  380.             'actions' => $actions,
  381.             'durations' => $durations,
  382.             'moods' => $moods,
  383.             'categories' => $categories,
  384.             'travels' => $travels
  385.         ];
  386.     }
  387.     /**
  388.      * @Route("/export/{network}/{start}/{end}", name="export")
  389.      */
  390.     public function exportAction($network$start$end)
  391.     {
  392.         $q $this->getDoctrine()
  393.             ->getRepository(Event::class)
  394.             ->createQueryBuilder('e')
  395.             ->where('e.codename != :null')
  396.             ->andWhere('e.creation <= :end')
  397.             ->andWhere('e.creation >= :start')
  398.             ->setParameters(['null' => null'end' => $end'start' => $start]);
  399.         if ($network) {
  400.             $q $q->andWhere('e.network = :network')
  401.                 ->setParameter('network'$network);
  402.         }
  403.         $events $q->getQuery()
  404.             ->getResult();
  405.         $datas = array();
  406.         foreach ($events as $e) {
  407.             $datas[] = [
  408.                 'id' => $e->getId(),
  409.                 'user' => ($e->getUser() ?: '-'),
  410.                 'network' => ($e->getNetwork() ?: '-'),
  411.                 'line' => ($e->getLine() ?: '-'),
  412.                 'stop' => ($e->getStop() ?: '-'),
  413.                 'code' => ($e->getCode() ?: '-'),
  414.                 'codename' => ($e->getCodename() ?: '-'),
  415.                 'vehicule' => ($e->getVehicule() ?: '-'),
  416.                 'age' => ($e->getAge() ?: '-'),
  417.                 'gender' => ($e->getGender() ?: '-'),
  418.                 'mood' => ($e->getMood() ?: '-'),
  419.                 'duration' => ($e->getDuration() ?: '-'),
  420.                 'comment' => ($e->getComment() ?: '-'),
  421.                 'action' => ($e->getAction() ?: '-'),
  422.                 'creation' => ($e->getCreation()->format('d/m/Y h:i:s') ?: '-'),
  423.                 'altercation' => ($e->getAltercation() ?: '-'),
  424.                 'category' => (($e->getCategory() ? implode(', '$e->getCategory()) : '-'))
  425.             ];
  426.         }
  427.         $encoders = array(new CsvEncoder());
  428.         $normalizers = array(new ObjectNormalizer());
  429.         $serializer = new Serializer($normalizers$encoders);
  430.         $content $serializer->serialize($datas'csv');
  431.         $this->showExportAction($content);
  432.     }
  433.     /**
  434.      * @Route("/export_ccas/{ids}", name="export_ccas")
  435.      */
  436.     public function exportCCASAction($ids)
  437.     {
  438.         $ids explode(', '$ids);
  439.         $q $this->getDoctrine()
  440.             ->getRepository('App:SurveyCCAS')
  441.             ->createQueryBuilder('s')
  442.             ->where('s.id IN (:ids)')
  443.             ->setParameter('ids'array_values($ids))
  444.             ->getQuery()
  445.             ->getResult();
  446.         $header = [];
  447.         foreach ($q as $result) {
  448.             foreach ($result->getAnswers() as $answer) {
  449.                 foreach ($answer as $question) {
  450.                     if (!in_array($question['e'], $header)) {
  451.                         $header[] = $question['e'];
  452.                     }
  453.                 }
  454.             }
  455.         }
  456.         foreach ($header as $questionHeader) {
  457.             $headerFormat[$questionHeader] = "";
  458.         }
  459.         $datas = [];
  460.         foreach ($q as $i => $result) {
  461.             $tmp = [
  462.                 'Médiateur' => ((string)$result->getUser() ?: '-'),
  463.                 'Foyer' => ((string)$result->getHouse() ?: '-'),
  464.                 'Date' => ($result->getDate()->format('d/m/Y h:i:s') ?: '-'),
  465.                 'Nombre de visite' => ($result->getNumber() ?: '-')
  466.             ];
  467.             $datas[$i] = $headerFormat;
  468.             foreach ($result->getAnswers() as $answer) {
  469.                 foreach ($answer as $question) {
  470.                     if (is_array($question['a'])) {
  471.                         $datas[$i][$question['e']] = join('; '$question['a']) . '.';
  472.                     } else {
  473.                         $datas[$i][$question['e']] = $question['a'];
  474.                     }
  475.                 }
  476.             }
  477.             $datas[$i] = array_merge($tmp$datas[$i]);
  478.         }
  479.         $phpExcelObject $this->get('phpexcel')->createPHPExcelObject();
  480.         $phpExcelObject->getProperties()
  481.             ->setCreator("PIMMS")
  482.             ->setLastModifiedBy("PIMMS")
  483.             ->setTitle("Export données " time());
  484.         $letters = [];
  485.         $letter 'A';
  486.         $col 0;
  487.         while ($letter !== 'AAA') {
  488.             $letters[] = $letter++;
  489.         }
  490.         foreach ($datas[0] as $key => $value) {
  491.             $phpExcelObject->setActiveSheetIndex(0)->setCellValue($letters[$col] . '1'$key);
  492.             $col++;
  493.         }
  494.         foreach ($datas as $r => $row) {
  495.             $col 0;
  496.             foreach ($row as $key => $value) {
  497.                 $phpExcelObject->setActiveSheetIndex(0)->setCellValue($letters[$col] . ($r 2), $value);
  498.                 $col++;
  499.             }
  500.         }
  501.         $writer $this->get('phpexcel')->createWriter($phpExcelObject'Excel5');
  502.         $response $this->get('phpexcel')->createStreamedResponse($writer);
  503.         $dispositionHeader $response->headers->makeDisposition(
  504.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  505.             time() . '.xls'
  506.         );
  507.         $response->headers->set('Content-Type''text/vnd.ms-excel; charset=utf-8');
  508.         $response->headers->set('Pragma''public');
  509.         $response->headers->set('Cache-Control''maxage=1');
  510.         $response->headers->set('Content-Disposition'$dispositionHeader);
  511.         return $response;
  512.     }
  513.     /**
  514.      * @Route("/export_result/{id}", name="export_result")
  515.      */
  516.     public function exportResultAction($id)
  517.     {
  518.         $survey $this->getDoctrine()->getRepository(Survey::class)->find($id);
  519.         $questionList $survey->getQuestions()->getValues();
  520.         foreach ($questionList as $question) {
  521.             $exportSample[$question->getExportName()] = '';
  522.         }
  523.         $results $survey->getResults();
  524.         $datas = array();
  525.         foreach ($results as $result) {
  526.             $tmp = [
  527.                 'Médiateur' => ((string)$result->getUser() ?: '-'),
  528.                 'Date' => ($result->getDate()->format('Y-m-d H:i:s') ?: '-'),
  529.                 'Nombre de visite' => ($result->getVisits() ?: '-'),
  530.                 'Statut' => (Result::STATUS[$result->getStatus()] ?: '-'),
  531.             ];
  532.             foreach ($result->getAnswers() as $answer) {
  533.                 if (in_array($answer->getQuestion(), $questionList)) {
  534.                     $exportSample[$answer->getQuestion()->getExportName()] = $answer->getValue();
  535.                 }
  536.             }
  537.             foreach ($exportSample as $header => $line) {
  538.                 $tmp[$header] = $line;
  539.             }
  540.             $datas[] = $tmp;
  541.         }
  542.         $today = new \DateTime('now', new \DateTimeZone('Europe/Paris'));
  543.         $fileName $survey->getName() . ' ' $today->format('d/m/Y h:i:s');
  544.         $encoders = array(new CsvEncoder(';'));
  545.         $normalizers = array(new ObjectNormalizer());
  546.         $serializer = new Serializer($normalizers$encoders);
  547.         $content $serializer->serialize($datas'csv');
  548.         $response = new Response($content);
  549.         $response->headers->set('Content-Type''text/csv');
  550.         $response->headers->set('Content-Disposition''attachment; filename="' $fileName '.csv";');
  551.         return $response;
  552.     }
  553.     public function showExportAction($content)
  554.     {
  555.         $response = new Response();
  556.         $response->setContent($content);
  557.         $response->headers->set('Content-Type''text/plain');
  558.         return $response;
  559.     }
  560. }