Failed Conditions
Push — perf-tests ( 50942d...2fc93e )
by Adrien
14:53
created

Writer::closeWriter()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace Box\Spout\Writer\CSV;
4
5
use Box\Spout\Writer\AbstractWriter;
6
use Box\Spout\Common\Exception\IOException;
7
use Box\Spout\Common\Helper\EncodingHelper;
8
9
/**
10
 * Class Writer
11
 * This class provides support to write data to CSV files
12
 *
13
 * @package Box\Spout\Writer\CSV
14
 */
15
class Writer extends AbstractWriter
16
{
17
    /** Number of rows to write before flushing */
18
    const FLUSH_THRESHOLD = 500;
19
20
    /** @var string Content-Type value for the header */
21
    protected static $headerContentType = 'text/csv; charset=UTF-8';
22
23
    /** @var string Defines the character used to delimit fields (one character only) */
24
    protected $fieldDelimiter = ',';
25
26
    /** @var string Defines the character used to enclose fields (one character only) */
27
    protected $fieldEnclosure = '"';
28
29
    /** @var int */
30
    protected $lastWrittenRowIndex = 0;
31
32
    /**
33
     * Sets the field delimiter for the CSV
34
     *
35
     * @api
36
     * @param string $fieldDelimiter Character that delimits fields
37
     * @return Writer
38
     */
39
    public function setFieldDelimiter($fieldDelimiter)
40
    {
41
        $this->fieldDelimiter = $fieldDelimiter;
42
        return $this;
43
    }
44
45
    /**
46
     * Sets the field enclosure for the CSV
47
     *
48
     * @api
49
     * @param string $fieldEnclosure Character that enclose fields
50
     * @return Writer
51
     */
52
    public function setFieldEnclosure($fieldEnclosure)
53
    {
54
        $this->fieldEnclosure = $fieldEnclosure;
55
        return $this;
56
    }
57
58
    /**
59
     * Opens the CSV streamer and makes it ready to accept data.
60
     *
61
     * @return void
62
     */
63
    protected function openWriter()
64
    {
65
        // Adds UTF-8 BOM for Unicode compatibility
66
        $this->globalFunctionsHelper->fputs($this->filePointer, EncodingHelper::BOM_UTF8);
67
    }
68
69
    /**
70
     * Adds data to the currently opened writer.
71
     *
72
     * @param  array $dataRow Array containing data to be written.
73
     *          Example $dataRow = ['data1', 1234, null, '', 'data5'];
74
     * @param \Box\Spout\Writer\Style\Style $style Ignored here since CSV does not support styling.
75
     * @return void
76
     * @throws \Box\Spout\Common\Exception\IOException If unable to write data
77
     */
78
    protected function addRowToWriter(array $dataRow, $style)
79
    {
80
        $wasWriteSuccessful = $this->globalFunctionsHelper->fputcsv($this->filePointer, $dataRow, $this->fieldDelimiter, $this->fieldEnclosure);
81
        if ($wasWriteSuccessful === false) {
82
            throw new IOException('Unable to write data');
83
        }
84
85
        $this->lastWrittenRowIndex++;
86
        if ($this->lastWrittenRowIndex % self::FLUSH_THRESHOLD === 0) {
87
            $this->globalFunctionsHelper->fflush($this->filePointer);
88
        }
89
    }
90
91
    /**
92
     * Closes the CSV streamer, preventing any additional writing.
93
     * If set, sets the headers and redirects output to the browser.
94
     *
95
     * @return void
96
     */
97
    protected function closeWriter()
98
    {
99
        $this->lastWrittenRowIndex = 0;
100
    }
101
}
102