PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.15.5
Independent Analytics – WordPress Analytics Plugin v2.15.5
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
AbstractCsv.php 1 month ago ByteSequence.php 1 month ago CannotInsertRecord.php 1 month ago CharsetConverter.php 1 month ago ColumnConsistency.php 1 month ago EncloseField.php 1 month ago EscapeFormula.php 1 month ago Exception.php 10 months ago HTMLConverter.php 1 month ago Info.php 1 month ago InvalidArgument.php 10 months ago MapIterator.php 1 month ago RFC4180Field.php 1 month ago Reader.php 1 month ago ResultSet.php 1 month ago Statement.php 1 month ago Stream.php 1 month ago SyntaxError.php 1 month ago TabularDataReader.php 1 month ago UnableToProcessCsv.php 10 months ago UnavailableFeature.php 10 months ago UnavailableStream.php 10 months ago Writer.php 1 month ago XMLConverter.php 1 month ago functions.php 10 months ago functions_include.php 10 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