PluginProbe ʕ •ᴥ•ʔ
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress / 4.17.1
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress v4.17.1
4.17.1 4.17.0 4.16.19 4.16.18 4.16.17 4.16.16 trunk 1.0 1.0.1 1.0.2 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5a 1.1.6 1.1.7 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4 1.4.1 1.4.2 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.1.9 2.2.10 2.2.11 2.2.12 2.2.13 2.2.14 2.2.15 2.2.16 2.2.2 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 3.0 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.13.4 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.15.0 4.15.1 4.15.10 4.15.11 4.15.12 4.15.13 4.15.14 4.15.15 4.15.16 4.15.17 4.15.18 4.15.19 4.15.2 4.15.20 4.15.20.1 4.15.21 4.15.22 4.15.23 4.15.24 4.15.25 4.15.3 4.15.4 4.15.5 4.15.6 4.15.7 4.15.8 4.15.9 4.16.0 4.16.1 4.16.10 4.16.11 4.16.12 4.16.13 4.16.14 4.16.15 4.16.2 4.16.3 4.16.4 4.16.5 4.16.6 4.16.7 4.16.8 4.16.9 4.2.0 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.7.0 4.8.0 4.9.0
wp-user-avatar / third-party / vendor / league / csv / src / Writer.php
wp-user-avatar / third-party / vendor / league / csv / src Last commit date
AbstractCsv.php 2 months ago ByteSequence.php 2 months ago CannotInsertRecord.php 2 months ago CharsetConverter.php 2 months ago ColumnConsistency.php 2 months ago EncloseField.php 2 months ago EscapeFormula.php 2 months ago Exception.php 2 months ago HTMLConverter.php 2 months ago Info.php 2 months ago InvalidArgument.php 2 months ago MapIterator.php 2 months ago RFC4180Field.php 2 months ago Reader.php 2 months ago ResultSet.php 2 months ago Statement.php 2 months ago Stream.php 2 months ago SyntaxError.php 2 months ago TabularDataReader.php 2 months ago UnableToProcessCsv.php 2 months ago UnavailableFeature.php 2 months ago UnavailableStream.php 2 months ago Writer.php 2 months ago XMLConverter.php 2 months ago functions.php 2 months ago functions_include.php 2 months ago
Writer.php
193 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 ProfilePressVendor\League\Csv;
13
14 use function array_reduce;
15 use function strlen;
16 use const PHP_VERSION_ID;
17 use const SEEK_CUR;
18 use const STREAM_FILTER_WRITE;
19 /**
20 * A class to insert records into a CSV Document.
21 */
22 class Writer extends AbstractCsv
23 {
24 protected const STREAM_FILTER_MODE = STREAM_FILTER_WRITE;
25 /** @var array<callable> callable collection to format the record before insertion. */
26 protected array $formatters = [];
27 /** @var array<callable> callable collection to validate the record before insertion. */
28 protected array $validators = [];
29 protected string $newline = "\n";
30 protected int $flush_counter = 0;
31 protected ?int $flush_threshold = null;
32 protected function resetProperties(): void
33 {
34 }
35 /**
36 * Returns the current newline sequence characters.
37 */
38 public function getNewline(): string
39 {
40 return $this->newline;
41 }
42 /**
43 * Get the flush threshold.
44 */
45 public function getFlushThreshold(): ?int
46 {
47 return $this->flush_threshold;
48 }
49 /**
50 * Adds multiple records to the CSV document.
51 *
52 * @see Writer::insertOne
53 */
54 public function insertAll(iterable $records): int
55 {
56 $bytes = 0;
57 foreach ($records as $record) {
58 $bytes += $this->insertOne($record);
59 }
60 $this->flush_counter = 0;
61 $this->document->fflush();
62 return $bytes;
63 }
64 /**
65 * Adds a single record to a CSV document.
66 *
67 * A record is an array that can contains scalar types values, NULL values
68 * or objects implementing the __toString method.
69 *
70 * @throws CannotInsertRecord If the record can not be inserted
71 */
72 public function insertOne(array $record): int
73 {
74 $record = array_reduce($this->formatters, fn(array $record, callable $formatter): array => $formatter($record), $record);
75 $this->validateRecord($record);
76 $bytes = $this->addRecord($record);
77 if (\false === $bytes || 0 >= $bytes) {
78 throw CannotInsertRecord::triggerOnInsertion($record);
79 }
80 return $bytes + $this->consolidate();
81 }
82 /**
83 * Adds a single record to a CSV Document using PHP algorithm.
84 *
85 * @see https://php.net/manual/en/function.fputcsv.php
86 *
87 * @return int|false
88 */
89 protected function addRecord(array $record)
90 {
91 if (PHP_VERSION_ID < 80100) {
92 return $this->document->fputcsv($record, $this->delimiter, $this->enclosure, $this->escape);
93 }
94 return $this->document->fputcsv($record, $this->delimiter, $this->enclosure, $this->escape, $this->newline);
95 }
96 /**
97 * DEPRECATION WARNING! This method will be removed in the next major point release.
98 *
99 * @deprecated since version 9.8.0
100 * @codeCoverageIgnore
101 *
102 * Format a record.
103 *
104 * The returned array must contain
105 * - scalar types values,
106 * - NULL values,
107 * - or objects implementing the __toString() method.
108 */
109 protected function formatRecord(array $record, callable $formatter): array
110 {
111 return $formatter($record);
112 }
113 /**
114 * Validate a record.
115 *
116 * @throws CannotInsertRecord If the validation failed
117 */
118 protected function validateRecord(array $record): void
119 {
120 foreach ($this->validators as $name => $validator) {
121 if (\true !== $validator($record)) {
122 throw CannotInsertRecord::triggerOnValidation($name, $record);
123 }
124 }
125 }
126 /**
127 * Apply post insertion actions.
128 */
129 protected function consolidate(): int
130 {
131 $bytes = 0;
132 if (80100 > PHP_VERSION_ID && "\n" !== $this->newline) {
133 $this->document->fseek(-1, SEEK_CUR);
134 /** @var int $newlineBytes */
135 $newlineBytes = $this->document->fwrite($this->newline, strlen($this->newline));
136 $bytes = $newlineBytes - 1;
137 }
138 if (null === $this->flush_threshold) {
139 return $bytes;
140 }
141 ++$this->flush_counter;
142 if (0 === $this->flush_counter % $this->flush_threshold) {
143 $this->flush_counter = 0;
144 $this->document->fflush();
145 }
146 return $bytes;
147 }
148 /**
149 * Adds a record formatter.
150 */
151 public function addFormatter(callable $formatter): self
152 {
153 $this->formatters[] = $formatter;
154 return $this;
155 }
156 /**
157 * Adds a record validator.
158 */
159 public function addValidator(callable $validator, string $validator_name): self
160 {
161 $this->validators[$validator_name] = $validator;
162 return $this;
163 }
164 /**
165 * Sets the newline sequence.
166 */
167 public function setNewline(string $newline): self
168 {
169 $this->newline = $newline;
170 return $this;
171 }
172 /**
173 * Set the flush threshold.
174 *
175 * @param ?int $threshold
176 *
177 * @throws InvalidArgument if the threshold is a integer lesser than 1
178 */
179 public function setFlushThreshold(?int $threshold): self
180 {
181 if ($threshold === $this->flush_threshold) {
182 return $this;
183 }
184 if (null !== $threshold && 1 > $threshold) {
185 throw InvalidArgument::dueToInvalidThreshold($threshold, __METHOD__);
186 }
187 $this->flush_threshold = $threshold;
188 $this->flush_counter = 0;
189 $this->document->fflush();
190 return $this;
191 }
192 }
193