1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Linio\Component\SpreadsheetParser; |
4
|
|
|
|
5
|
|
|
use Doctrine\Common\Inflector\Inflector; |
6
|
|
|
use Linio\Component\SpreadsheetParser\Exception\FileNotFoundException; |
7
|
|
|
use Linio\Component\SpreadsheetParser\Exception\InvalidFileTypeException; |
8
|
|
|
use Linio\Component\SpreadsheetParser\Parser\ParserInterface; |
9
|
|
|
|
10
|
|
|
class Spreadsheet |
11
|
|
|
{ |
12
|
|
|
const TYPE_XLSX = 'xlsx'; |
13
|
|
|
const TYPE_CSV = 'csv'; |
14
|
|
|
|
15
|
|
|
/** |
16
|
|
|
* @var ParserInterface |
17
|
|
|
*/ |
18
|
|
|
protected $parser; |
19
|
|
|
|
20
|
|
|
/** |
21
|
|
|
* @param $filePath |
22
|
|
|
* @param string $fileType |
23
|
|
|
* @param array $options |
24
|
|
|
* |
25
|
|
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength) |
26
|
|
|
* |
27
|
|
|
* @throws FileNotFoundException |
28
|
|
|
* @throws InvalidFileTypeException |
29
|
|
|
*/ |
30
|
|
|
public function __construct($filePath, $fileType = null, array $options = []) |
31
|
|
|
{ |
32
|
|
|
if (!file_exists($filePath)) { |
33
|
|
|
throw new FileNotFoundException('File not found: ' . $filePath); |
34
|
|
|
} |
35
|
|
|
|
36
|
|
|
if (!$fileType) { |
37
|
|
|
$fileType = $this->getFileExtension($filePath); |
38
|
|
|
} |
39
|
|
|
|
40
|
|
|
if (!in_array($fileType, [static::TYPE_CSV, static::TYPE_XLSX])) { |
41
|
|
|
throw new InvalidFileTypeException('Invalid file type: ' . $fileType); |
42
|
|
|
} |
43
|
|
|
|
44
|
|
|
$this->parser = $this->getParser($filePath, $fileType, $options); |
45
|
|
|
} |
46
|
|
|
|
47
|
|
|
/** |
48
|
|
|
* @return bool |
49
|
|
|
*/ |
50
|
|
|
public function open() |
|
|
|
|
51
|
|
|
{ |
52
|
|
|
return $this->parser->open(); |
53
|
|
|
} |
54
|
|
|
|
55
|
|
|
/** |
56
|
|
|
* @return array|false |
57
|
|
|
*/ |
58
|
|
|
public function getColumnNames() |
59
|
|
|
{ |
60
|
|
|
return $this->parser->getColumnNames(); |
61
|
|
|
} |
62
|
|
|
|
63
|
|
|
/** |
64
|
|
|
* @param int $numRows |
65
|
|
|
* |
66
|
|
|
* @return array |
67
|
|
|
*/ |
68
|
|
|
public function getData($numRows = 0) |
69
|
|
|
{ |
70
|
|
|
return $this->parser->getData($numRows); |
71
|
|
|
} |
72
|
|
|
|
73
|
|
|
/** |
74
|
|
|
* @return bool |
75
|
|
|
*/ |
76
|
|
|
public function close() |
|
|
|
|
77
|
|
|
{ |
78
|
|
|
return $this->parser->close(); |
79
|
|
|
} |
80
|
|
|
|
81
|
|
|
/** |
82
|
|
|
* @param string $filePath |
83
|
|
|
* @param string $fileType |
84
|
|
|
* @param array $options |
85
|
|
|
* |
86
|
|
|
* @return ParserInterface |
87
|
|
|
*/ |
88
|
|
|
protected function getParser($filePath, $fileType, array $options = []) |
89
|
|
|
{ |
90
|
|
|
$parserClass = sprintf('%s\\Parser\\%sParser', __NAMESPACE__, Inflector::classify($fileType)); |
91
|
|
|
|
92
|
|
|
return new $parserClass($filePath, $options); |
93
|
|
|
} |
94
|
|
|
|
95
|
|
|
/** |
96
|
|
|
* @param string $filePath |
97
|
|
|
* |
98
|
|
|
* @return string |
99
|
|
|
*/ |
100
|
|
|
protected function getFileExtension($filePath) |
101
|
|
|
{ |
102
|
|
|
return substr(strrchr($filePath, '.'), 1); |
103
|
|
|
} |
104
|
|
|
} |
105
|
|
|
|
This check examines a number of code elements and verifies that they conform to the given naming conventions.
You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods.