Open Journal Systems  3.3.0
vendor/symfony/http-foundation/HeaderBag.php
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 
13 
19 class HeaderBag implements \IteratorAggregate, \Countable
20 {
21  protected const UPPER = '_ABCDEFGHIJKLMNOPQRSTUVWXYZ';
22  protected const LOWER = '-abcdefghijklmnopqrstuvwxyz';
23 
24  protected $headers = [];
25  protected $cacheControl = [];
26 
27  public function __construct(array $headers = [])
28  {
29  foreach ($headers as $key => $values) {
30  $this->set($key, $values);
31  }
32  }
33 
39  public function __toString()
40  {
41  if (!$headers = $this->all()) {
42  return '';
43  }
44 
45  ksort($headers);
46  $max = max(array_map('strlen', array_keys($headers))) + 1;
47  $content = '';
48  foreach ($headers as $name => $values) {
49  $name = ucwords($name, '-');
50  foreach ($values as $value) {
51  $content .= sprintf("%-{$max}s %s\r\n", $name.':', $value);
52  }
53  }
54 
55  return $content;
56  }
57 
65  public function all(/*string $key = null*/)
66  {
67  if (1 <= \func_num_args() && null !== $key = func_get_arg(0)) {
68  return $this->headers[strtr($key, self::UPPER, self::LOWER)] ?? [];
69  }
70 
71  return $this->headers;
72  }
73 
79  public function keys()
80  {
81  return array_keys($this->all());
82  }
83 
87  public function replace(array $headers = [])
88  {
89  $this->headers = [];
90  $this->add($headers);
91  }
92 
96  public function add(array $headers)
97  {
98  foreach ($headers as $key => $values) {
99  $this->set($key, $values);
100  }
101  }
102 
111  public function get($key, $default = null)
112  {
113  $headers = $this->all((string) $key);
114  if (2 < \func_num_args()) {
115  @trigger_error(sprintf('Passing a third argument to "%s()" is deprecated since Symfony 4.4, use method "all()" instead', __METHOD__), E_USER_DEPRECATED);
116 
117  if (!func_get_arg(2)) {
118  return $headers;
119  }
120  }
121 
122  if (!$headers) {
123  return $default;
124  }
125 
126  if (null === $headers[0]) {
127  return null;
128  }
129 
130  return (string) $headers[0];
131  }
132 
140  public function set($key, $values, $replace = true)
141  {
142  $key = strtr($key, self::UPPER, self::LOWER);
143 
144  if (\is_array($values)) {
145  $values = array_values($values);
146 
147  if (true === $replace || !isset($this->headers[$key])) {
148  $this->headers[$key] = $values;
149  } else {
150  $this->headers[$key] = array_merge($this->headers[$key], $values);
151  }
152  } else {
153  if (true === $replace || !isset($this->headers[$key])) {
154  $this->headers[$key] = [$values];
155  } else {
156  $this->headers[$key][] = $values;
157  }
158  }
159 
160  if ('cache-control' === $key) {
161  $this->cacheControl = $this->parseCacheControl(implode(', ', $this->headers[$key]));
162  }
163  }
164 
172  public function has($key)
173  {
174  return \array_key_exists(strtr($key, self::UPPER, self::LOWER), $this->all());
175  }
176 
185  public function contains($key, $value)
186  {
187  return \in_array($value, $this->all((string) $key));
188  }
189 
195  public function remove($key)
196  {
197  $key = strtr($key, self::UPPER, self::LOWER);
198 
199  unset($this->headers[$key]);
200 
201  if ('cache-control' === $key) {
202  $this->cacheControl = [];
203  }
204  }
205 
215  public function getDate($key, \DateTime $default = null)
216  {
217  if (null === $value = $this->get($key)) {
218  return $default;
219  }
220 
221  if (false === $date = \DateTime::createFromFormat(DATE_RFC2822, $value)) {
222  throw new \RuntimeException(sprintf('The "%s" HTTP header is not parseable (%s).', $key, $value));
223  }
224 
225  return $date;
226  }
227 
234  public function addCacheControlDirective($key, $value = true)
235  {
236  $this->cacheControl[$key] = $value;
237 
238  $this->set('Cache-Control', $this->getCacheControlHeader());
239  }
240 
248  public function hasCacheControlDirective($key)
249  {
250  return \array_key_exists($key, $this->cacheControl);
251  }
252 
260  public function getCacheControlDirective($key)
261  {
262  return \array_key_exists($key, $this->cacheControl) ? $this->cacheControl[$key] : null;
263  }
264 
270  public function removeCacheControlDirective($key)
271  {
272  unset($this->cacheControl[$key]);
273 
274  $this->set('Cache-Control', $this->getCacheControlHeader());
275  }
276 
282  public function getIterator()
283  {
284  return new \ArrayIterator($this->headers);
285  }
286 
292  public function count()
293  {
294  return \count($this->headers);
295  }
296 
297  protected function getCacheControlHeader()
298  {
299  ksort($this->cacheControl);
300 
301  return HeaderUtils::toString($this->cacheControl, ',');
302  }
303 
311  protected function parseCacheControl($header)
312  {
313  $parts = HeaderUtils::split($header, ',=');
314 
315  return HeaderUtils::combine($parts);
316  }
317 }
Symfony\Component\HttpFoundation\HeaderBag\getIterator
getIterator()
Definition: vendor/symfony/http-foundation/HeaderBag.php:282
Symfony\Component\HttpFoundation\HeaderBag\getCacheControlHeader
getCacheControlHeader()
Definition: lib/vendor/symfony/http-foundation/HeaderBag.php:289
Symfony\Component\HttpFoundation\HeaderBag\addCacheControlDirective
addCacheControlDirective($key, $value=true)
Definition: vendor/symfony/http-foundation/HeaderBag.php:234
Symfony\Component\HttpFoundation\HeaderUtils\toString
static toString(array $assoc, string $separator)
Definition: HeaderUtils.php:107
Symfony\Component\HttpFoundation\HeaderBag\__construct
__construct(array $headers=[])
Definition: vendor/symfony/http-foundation/HeaderBag.php:27
Symfony\Component\HttpFoundation\HeaderUtils\combine
static combine(array $parts)
Definition: HeaderUtils.php:83
Symfony\Component\HttpFoundation\HeaderBag\removeCacheControlDirective
removeCacheControlDirective($key)
Definition: vendor/symfony/http-foundation/HeaderBag.php:270
Symfony\Component\HttpFoundation\HeaderBag\getDate
getDate($key, \DateTime $default=null)
Definition: vendor/symfony/http-foundation/HeaderBag.php:215
Symfony\Component\HttpFoundation\HeaderBag\add
add(array $headers)
Definition: lib/vendor/symfony/http-foundation/HeaderBag.php:96
Symfony\Component\HttpFoundation\HeaderBag\__toString
__toString()
Definition: vendor/symfony/http-foundation/HeaderBag.php:39
Symfony\Component\HttpFoundation\HeaderBag\LOWER
const LOWER
Definition: vendor/symfony/http-foundation/HeaderBag.php:22
Symfony\Component\HttpFoundation\HeaderBag\contains
contains($key, $value)
Definition: vendor/symfony/http-foundation/HeaderBag.php:185
Symfony\Component\HttpFoundation\HeaderBag\$headers
$headers
Definition: lib/vendor/symfony/http-foundation/HeaderBag.php:21
Symfony\Component\HttpFoundation\HeaderBag\all
all()
Definition: lib/vendor/symfony/http-foundation/HeaderBag.php:65
Symfony\Component\HttpFoundation\HeaderBag\$cacheControl
$cacheControl
Definition: lib/vendor/symfony/http-foundation/HeaderBag.php:22
Symfony\Component\HttpFoundation\HeaderBag\replace
replace(array $headers=[])
Definition: vendor/symfony/http-foundation/HeaderBag.php:87
Symfony\Component\HttpFoundation\HeaderBag\UPPER
const UPPER
Definition: vendor/symfony/http-foundation/HeaderBag.php:21
Symfony\Component\HttpFoundation\HeaderBag\parseCacheControl
parseCacheControl($header)
Definition: lib/vendor/symfony/http-foundation/HeaderBag.php:315
Symfony\Component\HttpFoundation
Definition: lib/vendor/symfony/http-foundation/AcceptHeader.php:12
Symfony\Component\HttpFoundation\HeaderUtils\split
static split(string $header, string $separators)
Definition: HeaderUtils.php:45
Symfony\Component\HttpFoundation\HeaderBag\getCacheControlDirective
getCacheControlDirective($key)
Definition: vendor/symfony/http-foundation/HeaderBag.php:260
Symfony\Component\HttpFoundation\HeaderBag\count
count()
Definition: vendor/symfony/http-foundation/HeaderBag.php:292
Symfony\Component\HttpFoundation\HeaderBag\has
has($key)
Definition: vendor/symfony/http-foundation/HeaderBag.php:172
Symfony\Component\HttpFoundation\HeaderBag\hasCacheControlDirective
hasCacheControlDirective($key)
Definition: vendor/symfony/http-foundation/HeaderBag.php:248
Symfony\Component\HttpFoundation\HeaderBag\keys
keys()
Definition: vendor/symfony/http-foundation/HeaderBag.php:79