PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.3.1
GiveWP – Donation Plugin and Fundraising Platform v3.3.1
4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / vendor / vendor-prefixed / symfony / http-foundation / HeaderBag.php
give / vendor / vendor-prefixed / symfony / http-foundation Last commit date
Exception 2 years ago File 2 years ago Session 2 years ago Tests 2 years ago AcceptHeader.php 2 years ago AcceptHeaderItem.php 2 years ago ApacheRequest.php 2 years ago BinaryFileResponse.php 2 years ago Cookie.php 2 years ago ExpressionRequestMatcher.php 2 years ago FileBag.php 2 years ago HeaderBag.php 2 years ago IpUtils.php 2 years ago JsonResponse.php 2 years ago LICENSE 2 years ago ParameterBag.php 2 years ago RedirectResponse.php 2 years ago Request.php 2 years ago RequestMatcher.php 2 years ago RequestMatcherInterface.php 2 years ago RequestStack.php 2 years ago Response.php 2 years ago ResponseHeaderBag.php 2 years ago ServerBag.php 2 years ago StreamedResponse.php 2 years ago
HeaderBag.php
343 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.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 * Modified by impress-org on 23-January-2024 using Strauss.
12 * @see https://github.com/BrianHenryIE/strauss
13 */
14
15 namespace Give\Vendors\Symfony\Component\HttpFoundation;
16
17 /**
18 * HeaderBag is a container for HTTP headers.
19 *
20 * @author Fabien Potencier <fabien@symfony.com>
21 */
22 class HeaderBag implements \IteratorAggregate, \Countable
23 {
24 protected $headers = [];
25 protected $cacheControl = [];
26
27 /**
28 * @param array $headers An array of HTTP headers
29 */
30 public function __construct(array $headers = [])
31 {
32 foreach ($headers as $key => $values) {
33 $this->set($key, $values);
34 }
35 }
36
37 /**
38 * Returns the headers as a string.
39 *
40 * @return string The headers
41 */
42 public function __toString()
43 {
44 if (!$headers = $this->all()) {
45 return '';
46 }
47
48 ksort($headers);
49 $max = max(array_map('strlen', array_keys($headers))) + 1;
50 $content = '';
51 foreach ($headers as $name => $values) {
52 $name = implode('-', array_map('ucfirst', explode('-', $name)));
53 foreach ($values as $value) {
54 $content .= sprintf("%-{$max}s %s\r\n", $name.':', $value);
55 }
56 }
57
58 return $content;
59 }
60
61 /**
62 * Returns the headers.
63 *
64 * @return array An array of headers
65 */
66 public function all()
67 {
68 return $this->headers;
69 }
70
71 /**
72 * Returns the parameter keys.
73 *
74 * @return array An array of parameter keys
75 */
76 public function keys()
77 {
78 return array_keys($this->all());
79 }
80
81 /**
82 * Replaces the current HTTP headers by a new set.
83 *
84 * @param array $headers An array of HTTP headers
85 */
86 public function replace(array $headers = [])
87 {
88 $this->headers = [];
89 $this->add($headers);
90 }
91
92 /**
93 * Adds new headers the current HTTP headers set.
94 *
95 * @param array $headers An array of HTTP headers
96 */
97 public function add(array $headers)
98 {
99 foreach ($headers as $key => $values) {
100 $this->set($key, $values);
101 }
102 }
103
104 /**
105 * Returns a header value by name.
106 *
107 * @param string $key The header name
108 * @param string|null $default The default value
109 * @param bool $first Whether to return the first value or all header values
110 *
111 * @return string|string[]|null The first header value or default value if $first is true, an array of values otherwise
112 */
113 public function get($key, $default = null, $first = true)
114 {
115 $key = str_replace('_', '-', strtolower($key));
116 $headers = $this->all();
117
118 if (!\array_key_exists($key, $headers)) {
119 if (null === $default) {
120 return $first ? null : [];
121 }
122
123 return $first ? $default : [$default];
124 }
125
126 if ($first) {
127 if (!$headers[$key]) {
128 return $default;
129 }
130
131 if (null === $headers[$key][0]) {
132 return null;
133 }
134
135 return (string) $headers[$key][0];
136 }
137
138 return $headers[$key];
139 }
140
141 /**
142 * Sets a header by name.
143 *
144 * @param string $key The key
145 * @param string|string[] $values The value or an array of values
146 * @param bool $replace Whether to replace the actual value or not (true by default)
147 */
148 public function set($key, $values, $replace = true)
149 {
150 $key = str_replace('_', '-', strtolower($key));
151
152 if (\is_array($values)) {
153 $values = array_values($values);
154
155 if (true === $replace || !isset($this->headers[$key])) {
156 $this->headers[$key] = $values;
157 } else {
158 $this->headers[$key] = array_merge($this->headers[$key], $values);
159 }
160 } else {
161 if (true === $replace || !isset($this->headers[$key])) {
162 $this->headers[$key] = [$values];
163 } else {
164 $this->headers[$key][] = $values;
165 }
166 }
167
168 if ('cache-control' === $key) {
169 $this->cacheControl = $this->parseCacheControl(implode(', ', $this->headers[$key]));
170 }
171 }
172
173 /**
174 * Returns true if the HTTP header is defined.
175 *
176 * @param string $key The HTTP header
177 *
178 * @return bool true if the parameter exists, false otherwise
179 */
180 public function has($key)
181 {
182 return \array_key_exists(str_replace('_', '-', strtolower($key)), $this->all());
183 }
184
185 /**
186 * Returns true if the given HTTP header contains the given value.
187 *
188 * @param string $key The HTTP header name
189 * @param string $value The HTTP value
190 *
191 * @return bool true if the value is contained in the header, false otherwise
192 */
193 public function contains($key, $value)
194 {
195 return \in_array($value, $this->get($key, null, false));
196 }
197
198 /**
199 * Removes a header.
200 *
201 * @param string $key The HTTP header name
202 */
203 public function remove($key)
204 {
205 $key = str_replace('_', '-', strtolower($key));
206
207 unset($this->headers[$key]);
208
209 if ('cache-control' === $key) {
210 $this->cacheControl = [];
211 }
212 }
213
214 /**
215 * Returns the HTTP header value converted to a date.
216 *
217 * @param string $key The parameter key
218 * @param \DateTime $default The default value
219 *
220 * @return \DateTime|null The parsed DateTime or the default value if the header does not exist
221 *
222 * @throws \RuntimeException When the HTTP header is not parseable
223 */
224 public function getDate($key, \DateTime $default = null)
225 {
226 if (null === $value = $this->get($key)) {
227 return $default;
228 }
229
230 if (false === $date = \DateTime::createFromFormat(\DATE_RFC2822, $value)) {
231 throw new \RuntimeException(sprintf('The "%s" HTTP header is not parseable (%s).', $key, $value));
232 }
233
234 return $date;
235 }
236
237 /**
238 * Adds a custom Cache-Control directive.
239 *
240 * @param string $key The Cache-Control directive name
241 * @param mixed $value The Cache-Control directive value
242 */
243 public function addCacheControlDirective($key, $value = true)
244 {
245 $this->cacheControl[$key] = $value;
246
247 $this->set('Cache-Control', $this->getCacheControlHeader());
248 }
249
250 /**
251 * Returns true if the Cache-Control directive is defined.
252 *
253 * @param string $key The Cache-Control directive
254 *
255 * @return bool true if the directive exists, false otherwise
256 */
257 public function hasCacheControlDirective($key)
258 {
259 return \array_key_exists($key, $this->cacheControl);
260 }
261
262 /**
263 * Returns a Cache-Control directive value by name.
264 *
265 * @param string $key The directive name
266 *
267 * @return mixed|null The directive value if defined, null otherwise
268 */
269 public function getCacheControlDirective($key)
270 {
271 return \array_key_exists($key, $this->cacheControl) ? $this->cacheControl[$key] : null;
272 }
273
274 /**
275 * Removes a Cache-Control directive.
276 *
277 * @param string $key The Cache-Control directive
278 */
279 public function removeCacheControlDirective($key)
280 {
281 unset($this->cacheControl[$key]);
282
283 $this->set('Cache-Control', $this->getCacheControlHeader());
284 }
285
286 /**
287 * Returns an iterator for headers.
288 *
289 * @return \ArrayIterator An \ArrayIterator instance
290 */
291 public function getIterator()
292 {
293 return new \ArrayIterator($this->headers);
294 }
295
296 /**
297 * Returns the number of headers.
298 *
299 * @return int The number of headers
300 */
301 public function count()
302 {
303 return \count($this->headers);
304 }
305
306 protected function getCacheControlHeader()
307 {
308 $parts = [];
309 ksort($this->cacheControl);
310 foreach ($this->cacheControl as $key => $value) {
311 if (true === $value) {
312 $parts[] = $key;
313 } else {
314 if (preg_match('#[^a-zA-Z0-9._-]#', $value)) {
315 $value = '"'.$value.'"';
316 }
317
318 $parts[] = "$key=$value";
319 }
320 }
321
322 return implode(', ', $parts);
323 }
324
325 /**
326 * Parses a Cache-Control HTTP header.
327 *
328 * @param string $header The value of the Cache-Control HTTP header
329 *
330 * @return array An array representing the attribute values
331 */
332 protected function parseCacheControl($header)
333 {
334 $cacheControl = [];
335 preg_match_all('#([a-zA-Z][a-zA-Z_-]*)\s*(?:=(?:"([^"]*)"|([^ \t",;]*)))?#', $header, $matches, \PREG_SET_ORDER);
336 foreach ($matches as $match) {
337 $cacheControl[strtolower($match[1])] = isset($match[3]) ? $match[3] : (isset($match[2]) ? $match[2] : true);
338 }
339
340 return $cacheControl;
341 }
342 }
343