PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.15.0
Independent Analytics – WordPress Analytics Plugin v2.15.0
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
AbstractCsv.php 4 days ago ByteSequence.php 4 days ago CannotInsertRecord.php 4 days ago CharsetConverter.php 4 days ago ColumnConsistency.php 4 days ago EncloseField.php 4 days ago EscapeFormula.php 4 days ago Exception.php 9 months ago HTMLConverter.php 4 days ago Info.php 4 days ago InvalidArgument.php 9 months ago MapIterator.php 4 days ago RFC4180Field.php 4 days ago Reader.php 4 days ago ResultSet.php 4 days ago Statement.php 4 days ago Stream.php 4 days ago SyntaxError.php 4 days ago TabularDataReader.php 4 days ago UnableToProcessCsv.php 9 months ago UnavailableFeature.php 9 months ago UnavailableStream.php 9 months ago Writer.php 4 days ago XMLConverter.php 4 days ago functions.php 9 months ago functions_include.php 9 months ago
Statement.php
142 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 /** @var array<callable> Callables to filter the iterator. */
26 protected array $where = [];
27 /** @var array<callable> Callables to sort the iterator. */
28 protected array $order_by = [];
29 /** iterator Offset. */
30 protected int $offset = 0;
31 /** iterator maximum length. */
32 protected int $limit = -1;
33 /**
34 * @throws Exception
35 */
36 public static function create(callable $where = null, int $offset = 0, int $limit = -1) : self
37 {
38 $stmt = new self();
39 if (null !== $where) {
40 $stmt = $stmt->where($where);
41 }
42 return $stmt->offset($offset)->limit($limit);
43 }
44 /**
45 * Set the Iterator filter method.
46 */
47 public function where(callable $where) : self
48 {
49 $clone = clone $this;
50 $clone->where[] = $where;
51 return $clone;
52 }
53 /**
54 * Set an Iterator sorting callable function.
55 */
56 public function orderBy(callable $order_by) : self
57 {
58 $clone = clone $this;
59 $clone->order_by[] = $order_by;
60 return $clone;
61 }
62 /**
63 * Set LimitIterator Offset.
64 *
65 * @throws Exception if the offset is lesser than 0
66 */
67 public function offset(int $offset) : self
68 {
69 if (0 > $offset) {
70 throw InvalidArgument::dueToInvalidRecordOffset($offset, __METHOD__);
71 }
72 if ($offset === $this->offset) {
73 return $this;
74 }
75 $clone = clone $this;
76 $clone->offset = $offset;
77 return $clone;
78 }
79 /**
80 * Set LimitIterator Count.
81 *
82 * @throws Exception if the limit is lesser than -1
83 */
84 public function limit(int $limit) : self
85 {
86 if (-1 > $limit) {
87 throw InvalidArgument::dueToInvalidLimit($limit, __METHOD__);
88 }
89 if ($limit === $this->limit) {
90 return $this;
91 }
92 $clone = clone $this;
93 $clone->limit = $limit;
94 return $clone;
95 }
96 /**
97 * Execute the prepared Statement on the {@link Reader} object.
98 *
99 * @param array<string> $header an optional header to use instead of the CSV document header
100 */
101 public function process(TabularDataReader $tabular_data, array $header = []) : TabularDataReader
102 {
103 if ([] === $header) {
104 $header = $tabular_data->getHeader();
105 }
106 $iterator = $tabular_data->getRecords($header);
107 $iterator = array_reduce($this->where, [$this, 'filter'], $iterator);
108 $iterator = $this->buildOrderBy($iterator);
109 return new ResultSet(new LimitIterator($iterator, $this->offset, $this->limit), $header);
110 }
111 /**
112 * Filters elements of an Iterator using a callback function.
113 */
114 protected function filter(Iterator $iterator, callable $callable) : CallbackFilterIterator
115 {
116 return new CallbackFilterIterator($iterator, $callable);
117 }
118 /**
119 * Sort the Iterator.
120 */
121 protected function buildOrderBy(Iterator $iterator) : Iterator
122 {
123 if ([] === $this->order_by) {
124 return $iterator;
125 }
126 $compare = function (array $record_a, array $record_b) : int {
127 foreach ($this->order_by as $callable) {
128 if (0 !== ($cmp = $callable($record_a, $record_b))) {
129 return $cmp;
130 }
131 }
132 return $cmp ?? 0;
133 };
134 $it = new ArrayIterator();
135 foreach ($iterator as $offset => $value) {
136 $it[$offset] = $value;
137 }
138 $it->uasort($compare);
139 return $it;
140 }
141 }
142