Passed
Push — master ( 595fcf...04cbf0 )
by Julito
13:01
created

Exporter::getResponse()   A

Complexity

Conditions 5
Paths 5

Size

Total Lines 31
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 25
nc 5
nop 3
dl 0
loc 31
rs 9.2088
c 0
b 0
f 0
1
<?php
2
/* For licensing terms, see /license.txt */
3
4
namespace Chamilo\CoreBundle\Framework;
5
6
use Exporter\Source\SourceIteratorInterface;
7
use Exporter\Writer\CsvWriter;
8
use Exporter\Writer\JsonWriter;
9
use Exporter\Writer\XlsWriter;
10
use Exporter\Writer\XmlWriter;
11
use Symfony\Component\HttpFoundation\StreamedResponse;
12
13
/**
14
 * Class Exporter
15
 * @package Chamilo\CoreBundle\Framework\Exporter
16
 */
17
class Exporter
18
{
19
    /**
20
     * @param string                  $format
21
     * @param string                  $filename
22
     * @param SourceIteratorInterface $source
23
     *
24
     * @throws \RuntimeException
25
     *
26
     * @return StreamedResponse
27
     */
28
    public function getResponse($format, $filename, SourceIteratorInterface $source)
29
    {
30
        switch ($format) {
31
            case 'xls':
32
                $writer = new XlsWriter('php://output');
33
                $contentType = 'application/vnd.ms-excel';
34
                break;
35
            case 'xml':
36
                $writer = new XmlWriter('php://output');
37
                $contentType = 'text/xml';
38
                break;
39
            case 'json':
40
                $writer = new JsonWriter('php://output');
41
                $contentType = 'application/json';
42
                break;
43
            case 'csv':
44
                $writer = new CsvWriter('php://output', ',', '"', "", true, true);
45
                $contentType = 'text/csv';
46
                break;
47
            default:
48
                throw new \RuntimeException('Invalid format');
49
        }
50
51
        $callback = function () use ($source, $writer) {
52
            $handler = \Exporter\Handler::create($source, $writer);
53
            $handler->export();
54
        };
55
56
        return new StreamedResponse($callback, 200, [
57
            'Content-Type' => $contentType,
58
            'Content-Disposition' => sprintf('attachment; filename=%s', $filename),
59
        ]);
60
    }
61
}
62