PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.14.6
Independent Analytics – WordPress Analytics Plugin v2.14.6
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / vendor / league / csv / src / Statement.php
independent-analytics / vendor / league / csv / src Last commit date
Polyfill 10 months ago AbstractCsv.php 10 months ago ByteSequence.php 10 months ago CannotInsertRecord.php 10 months ago CharsetConverter.php 10 months ago ColumnConsistency.php 10 months ago EncloseField.php 10 months ago EscapeFormula.php 10 months ago Exception.php 10 months ago HTMLConverter.php 10 months ago Info.php 10 months ago InvalidArgument.php 10 months ago MapIterator.php 10 months ago RFC4180Field.php 10 months ago Reader.php 10 months ago ResultSet.php 10 months ago Statement.php 10 months ago Stream.php 10 months ago SyntaxError.php 10 months ago TabularDataReader.php 10 months ago UnableToProcessCsv.php 10 months ago UnavailableFeature.php 10 months ago UnavailableStream.php 10 months ago Writer.php 10 months ago XMLConverter.php 10 months ago functions.php 10 months ago functions_include.php 10 months ago
Statement.php
160 lines
1 <?php
2
3 /**
4 * League.Csv (https://csv.thephpleague.com)
5 *
6 * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11 declare (strict_types=1);
12 namespace IAWPSCOPED\League\Csv;
13
14 use ArrayIterator;
15 use CallbackFilterIterator;
16 use Iterator;
17 use LimitIterator;
18 use function array_reduce;
19 /**
20 * Criteria to filter a {@link Reader} object.
21 * @internal
22 */
23 class Statement
24 {
25 /**
26 * Callables to filter the iterator.
27 *
28 * @var array<callable>
29 */
30 protected $where = [];
31 /**
32 * Callables to sort the iterator.
33 *
34 * @var array<callable>
35 */
36 protected $order_by = [];
37 /**
38 * iterator Offset.
39 *
40 * @var int
41 */
42 protected $offset = 0;
43 /**
44 * iterator maximum length.
45 *
46 * @var int
47 */
48 protected $limit = -1;
49 /**
50 * Named Constructor to ease Statement instantiation.
51 *
52 * @throws Exception
53 */
54 public static function create(callable $where = null, int $offset = 0, int $limit = -1) : self
55 {
56 $stmt = new self();
57 if (null !== $where) {
58 $stmt = $stmt->where($where);
59 }
60 return $stmt->offset($offset)->limit($limit);
61 }
62 /**
63 * Set the Iterator filter method.
64 */
65 public function where(callable $where) : self
66 {
67 $clone = clone $this;
68 $clone->where[] = $where;
69 return $clone;
70 }
71 /**
72 * Set an Iterator sorting callable function.
73 */
74 public function orderBy(callable $order_by) : self
75 {
76 $clone = clone $this;
77 $clone->order_by[] = $order_by;
78 return $clone;
79 }
80 /**
81 * Set LimitIterator Offset.
82 *
83 * @throws Exception if the offset is lesser than 0
84 */
85 public function offset(int $offset) : self
86 {
87 if (0 > $offset) {
88 throw InvalidArgument::dueToInvalidRecordOffset($offset, __METHOD__);
89 }
90 if ($offset === $this->offset) {
91 return $this;
92 }
93 $clone = clone $this;
94 $clone->offset = $offset;
95 return $clone;
96 }
97 /**
98 * Set LimitIterator Count.
99 *
100 * @throws Exception if the limit is lesser than -1
101 */
102 public function limit(int $limit) : self
103 {
104 if (-1 > $limit) {
105 throw InvalidArgument::dueToInvalidLimit($limit, __METHOD__);
106 }
107 if ($limit === $this->limit) {
108 return $this;
109 }
110 $clone = clone $this;
111 $clone->limit = $limit;
112 return $clone;
113 }
114 /**
115 * Execute the prepared Statement on the {@link Reader} object.
116 *
117 * @param array<string> $header an optional header to use instead of the CSV document header
118 */
119 public function process(TabularDataReader $tabular_data, array $header = []) : TabularDataReader
120 {
121 if ([] === $header) {
122 $header = $tabular_data->getHeader();
123 }
124 $iterator = $tabular_data->getRecords($header);
125 $iterator = array_reduce($this->where, [$this, 'filter'], $iterator);
126 $iterator = $this->buildOrderBy($iterator);
127 return new ResultSet(new LimitIterator($iterator, $this->offset, $this->limit), $header);
128 }
129 /**
130 * Filters elements of an Iterator using a callback function.
131 */
132 protected function filter(Iterator $iterator, callable $callable) : CallbackFilterIterator
133 {
134 return new CallbackFilterIterator($iterator, $callable);
135 }
136 /**
137 * Sort the Iterator.
138 */
139 protected function buildOrderBy(Iterator $iterator) : Iterator
140 {
141 if ([] === $this->order_by) {
142 return $iterator;
143 }
144 $compare = function (array $record_a, array $record_b) : int {
145 foreach ($this->order_by as $callable) {
146 if (0 !== ($cmp = $callable($record_a, $record_b))) {
147 return $cmp;
148 }
149 }
150 return $cmp ?? 0;
151 };
152 $it = new ArrayIterator();
153 foreach ($iterator as $offset => $value) {
154 $it[$offset] = $value;
155 }
156 $it->uasort($compare);
157 return $it;
158 }
159 }
160