~begerega/ihris-chw-sl/trunk

« back to all changes in this revision

Viewing changes to tools/PHPExcel/PHPExcel/Reader/Abstract.php

  • Committer: Ese Egerega
  • Date: 2018-05-03 14:17:04 UTC
  • Revision ID: egerega@gmail.com-20180503141704-3br8dto013rgx65x
Initial import of Sierra Leone  CHW registry

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
 
 
3
/**
 
4
 * PHPExcel_Reader_Abstract
 
5
 *
 
6
 * Copyright (c) 2006 - 2015 PHPExcel
 
7
 *
 
8
 * This library is free software; you can redistribute it and/or
 
9
 * modify it under the terms of the GNU Lesser General Public
 
10
 * License as published by the Free Software Foundation; either
 
11
 * version 2.1 of the License, or (at your option) any later version.
 
12
 *
 
13
 * This library is distributed in the hope that it will be useful,
 
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
16
 * Lesser General Public License for more details.
 
17
 *
 
18
 * You should have received a copy of the GNU Lesser General Public
 
19
 * License along with this library; if not, write to the Free Software
 
20
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
21
 *
 
22
 * @category   PHPExcel
 
23
 * @package    PHPExcel_Reader
 
24
 * @copyright  Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
 
25
 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
 
26
 * @version    ##VERSION##, ##DATE##
 
27
 */
 
28
abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
 
29
{
 
30
    /**
 
31
     * Read data only?
 
32
     * Identifies whether the Reader should only read data values for cells, and ignore any formatting information;
 
33
     *        or whether it should read both data and formatting
 
34
     *
 
35
     * @var    boolean
 
36
     */
 
37
    protected $readDataOnly = false;
 
38
 
 
39
    /**
 
40
     * Read empty cells?
 
41
     * Identifies whether the Reader should read data values for cells all cells, or should ignore cells containing
 
42
     *         null value or empty string
 
43
     *
 
44
     * @var    boolean
 
45
     */
 
46
    protected $readEmptyCells = true;
 
47
 
 
48
    /**
 
49
     * Read charts that are defined in the workbook?
 
50
     * Identifies whether the Reader should read the definitions for any charts that exist in the workbook;
 
51
     *
 
52
     * @var    boolean
 
53
     */
 
54
    protected $includeCharts = false;
 
55
 
 
56
    /**
 
57
     * Restrict which sheets should be loaded?
 
58
     * This property holds an array of worksheet names to be loaded. If null, then all worksheets will be loaded.
 
59
     *
 
60
     * @var array of string
 
61
     */
 
62
    protected $loadSheetsOnly;
 
63
 
 
64
    /**
 
65
     * PHPExcel_Reader_IReadFilter instance
 
66
     *
 
67
     * @var PHPExcel_Reader_IReadFilter
 
68
     */
 
69
    protected $readFilter;
 
70
 
 
71
    protected $fileHandle = null;
 
72
 
 
73
 
 
74
    /**
 
75
     * Read data only?
 
76
     *        If this is true, then the Reader will only read data values for cells, it will not read any formatting information.
 
77
     *        If false (the default) it will read data and formatting.
 
78
     *
 
79
     * @return    boolean
 
80
     */
 
81
    public function getReadDataOnly()
 
82
    {
 
83
        return $this->readDataOnly;
 
84
    }
 
85
 
 
86
    /**
 
87
     * Set read data only
 
88
     *        Set to true, to advise the Reader only to read data values for cells, and to ignore any formatting information.
 
89
     *        Set to false (the default) to advise the Reader to read both data and formatting for cells.
 
90
     *
 
91
     * @param    boolean    $pValue
 
92
     *
 
93
     * @return    PHPExcel_Reader_IReader
 
94
     */
 
95
    public function setReadDataOnly($pValue = false)
 
96
    {
 
97
        $this->readDataOnly = $pValue;
 
98
        return $this;
 
99
    }
 
100
 
 
101
    /**
 
102
     * Read empty cells?
 
103
     *        If this is true (the default), then the Reader will read data values for all cells, irrespective of value.
 
104
     *        If false it will not read data for cells containing a null value or an empty string.
 
105
     *
 
106
     * @return    boolean
 
107
     */
 
108
    public function getReadEmptyCells()
 
109
    {
 
110
        return $this->readEmptyCells;
 
111
    }
 
112
 
 
113
    /**
 
114
     * Set read empty cells
 
115
     *        Set to true (the default) to advise the Reader read data values for all cells, irrespective of value.
 
116
     *        Set to false to advise the Reader to ignore cells containing a null value or an empty string.
 
117
     *
 
118
     * @param    boolean    $pValue
 
119
     *
 
120
     * @return    PHPExcel_Reader_IReader
 
121
     */
 
122
    public function setReadEmptyCells($pValue = true)
 
123
    {
 
124
        $this->readEmptyCells = $pValue;
 
125
        return $this;
 
126
    }
 
127
 
 
128
    /**
 
129
     * Read charts in workbook?
 
130
     *        If this is true, then the Reader will include any charts that exist in the workbook.
 
131
     *      Note that a ReadDataOnly value of false overrides, and charts won't be read regardless of the IncludeCharts value.
 
132
     *        If false (the default) it will ignore any charts defined in the workbook file.
 
133
     *
 
134
     * @return    boolean
 
135
     */
 
136
    public function getIncludeCharts()
 
137
    {
 
138
        return $this->includeCharts;
 
139
    }
 
140
 
 
141
    /**
 
142
     * Set read charts in workbook
 
143
     *        Set to true, to advise the Reader to include any charts that exist in the workbook.
 
144
     *      Note that a ReadDataOnly value of false overrides, and charts won't be read regardless of the IncludeCharts value.
 
145
     *        Set to false (the default) to discard charts.
 
146
     *
 
147
     * @param    boolean    $pValue
 
148
     *
 
149
     * @return    PHPExcel_Reader_IReader
 
150
     */
 
151
    public function setIncludeCharts($pValue = false)
 
152
    {
 
153
        $this->includeCharts = (boolean) $pValue;
 
154
        return $this;
 
155
    }
 
156
 
 
157
    /**
 
158
     * Get which sheets to load
 
159
     * Returns either an array of worksheet names (the list of worksheets that should be loaded), or a null
 
160
     *        indicating that all worksheets in the workbook should be loaded.
 
161
     *
 
162
     * @return mixed
 
163
     */
 
164
    public function getLoadSheetsOnly()
 
165
    {
 
166
        return $this->loadSheetsOnly;
 
167
    }
 
168
 
 
169
    /**
 
170
     * Set which sheets to load
 
171
     *
 
172
     * @param mixed $value
 
173
     *        This should be either an array of worksheet names to be loaded, or a string containing a single worksheet name.
 
174
     *        If NULL, then it tells the Reader to read all worksheets in the workbook
 
175
     *
 
176
     * @return PHPExcel_Reader_IReader
 
177
     */
 
178
    public function setLoadSheetsOnly($value = null)
 
179
    {
 
180
        if ($value === null) {
 
181
            return $this->setLoadAllSheets();
 
182
        }
 
183
 
 
184
        $this->loadSheetsOnly = is_array($value) ? $value : array($value);
 
185
        return $this;
 
186
    }
 
187
 
 
188
    /**
 
189
     * Set all sheets to load
 
190
     *        Tells the Reader to load all worksheets from the workbook.
 
191
     *
 
192
     * @return PHPExcel_Reader_IReader
 
193
     */
 
194
    public function setLoadAllSheets()
 
195
    {
 
196
        $this->loadSheetsOnly = null;
 
197
        return $this;
 
198
    }
 
199
 
 
200
    /**
 
201
     * Read filter
 
202
     *
 
203
     * @return PHPExcel_Reader_IReadFilter
 
204
     */
 
205
    public function getReadFilter()
 
206
    {
 
207
        return $this->readFilter;
 
208
    }
 
209
 
 
210
    /**
 
211
     * Set read filter
 
212
     *
 
213
     * @param PHPExcel_Reader_IReadFilter $pValue
 
214
     * @return PHPExcel_Reader_IReader
 
215
     */
 
216
    public function setReadFilter(PHPExcel_Reader_IReadFilter $pValue)
 
217
    {
 
218
        $this->readFilter = $pValue;
 
219
        return $this;
 
220
    }
 
221
 
 
222
    /**
 
223
     * Open file for reading
 
224
     *
 
225
     * @param string $pFilename
 
226
     * @throws    PHPExcel_Reader_Exception
 
227
     * @return resource
 
228
     */
 
229
    protected function openFile($pFilename)
 
230
    {
 
231
        // Check if file exists
 
232
        if (!file_exists($pFilename) || !is_readable($pFilename)) {
 
233
            throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist.");
 
234
        }
 
235
 
 
236
        // Open file
 
237
        $this->fileHandle = fopen($pFilename, 'r');
 
238
        if ($this->fileHandle === false) {
 
239
            throw new PHPExcel_Reader_Exception("Could not open file " . $pFilename . " for reading.");
 
240
        }
 
241
    }
 
242
 
 
243
    /**
 
244
     * Can the current PHPExcel_Reader_IReader read the file?
 
245
     *
 
246
     * @param     string         $pFilename
 
247
     * @return boolean
 
248
     * @throws PHPExcel_Reader_Exception
 
249
     */
 
250
    public function canRead($pFilename)
 
251
    {
 
252
        // Check if file exists
 
253
        try {
 
254
            $this->openFile($pFilename);
 
255
        } catch (Exception $e) {
 
256
            return false;
 
257
        }
 
258
 
 
259
        $readable = $this->isValidFormat();
 
260
        fclose($this->fileHandle);
 
261
        return $readable;
 
262
    }
 
263
 
 
264
    /**
 
265
     * Scan theXML for use of <!ENTITY to prevent XXE/XEE attacks
 
266
     *
 
267
     * @param     string         $xml
 
268
     * @throws PHPExcel_Reader_Exception
 
269
     */
 
270
    public function securityScan($xml)
 
271
    {
 
272
        $pattern = '/\\0?' . implode('\\0?', str_split('<!DOCTYPE')) . '\\0?/';
 
273
        if (preg_match($pattern, $xml)) {
 
274
            throw new PHPExcel_Reader_Exception('Detected use of ENTITY in XML, spreadsheet file load() aborted to prevent XXE/XEE attacks');
 
275
        }
 
276
        return $xml;
 
277
    }
 
278
 
 
279
    /**
 
280
     * Scan theXML for use of <!ENTITY to prevent XXE/XEE attacks
 
281
     *
 
282
     * @param     string         $filestream
 
283
     * @throws PHPExcel_Reader_Exception
 
284
     */
 
285
    public function securityScanFile($filestream)
 
286
    {
 
287
        return $this->securityScan(file_get_contents($filestream));
 
288
    }
 
289
}