Open Journal Systems  3.3.0
vendor/symfony/http-foundation/AcceptHeader.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 
14 // Help opcache.preload discover always-needed symbols
15 class_exists(AcceptHeaderItem::class);
16 
25 class AcceptHeader
26 {
30  private $items = [];
31 
35  private $sorted = true;
36 
40  public function __construct(array $items)
41  {
42  foreach ($items as $item) {
43  $this->add($item);
44  }
45  }
46 
54  public static function fromString($headerValue)
55  {
56  $index = 0;
57 
58  $parts = HeaderUtils::split((string) $headerValue, ',;=');
59 
60  return new self(array_map(function ($subParts) use (&$index) {
61  $part = array_shift($subParts);
62  $attributes = HeaderUtils::combine($subParts);
63 
64  $item = new AcceptHeaderItem($part[0], $attributes);
65  $item->setIndex($index++);
66 
67  return $item;
68  }, $parts));
69  }
70 
76  public function __toString()
77  {
78  return implode(',', $this->items);
79  }
80 
88  public function has($value)
89  {
90  return isset($this->items[$value]);
91  }
92 
100  public function get($value)
101  {
102  return $this->items[$value] ?? $this->items[explode('/', $value)[0].'/*'] ?? $this->items['*/*'] ?? $this->items['*'] ?? null;
103  }
104 
110  public function add(AcceptHeaderItem $item)
111  {
112  $this->items[$item->getValue()] = $item;
113  $this->sorted = false;
114 
115  return $this;
116  }
117 
123  public function all()
124  {
125  $this->sort();
126 
127  return $this->items;
128  }
129 
137  public function filter($pattern)
138  {
139  return new self(array_filter($this->items, function (AcceptHeaderItem $item) use ($pattern) {
140  return preg_match($pattern, $item->getValue());
141  }));
142  }
143 
149  public function first()
150  {
151  $this->sort();
152 
153  return !empty($this->items) ? reset($this->items) : null;
154  }
155 
159  private function sort(): void
160  {
161  if (!$this->sorted) {
162  uasort($this->items, function (AcceptHeaderItem $a, AcceptHeaderItem $b) {
163  $qA = $a->getQuality();
164  $qB = $b->getQuality();
165 
166  if ($qA === $qB) {
167  return $a->getIndex() > $b->getIndex() ? 1 : -1;
168  }
169 
170  return $qA > $qB ? -1 : 1;
171  });
172 
173  $this->sorted = true;
174  }
175  }
176 }
Symfony\Component\HttpFoundation\AcceptHeaderItem\getIndex
getIndex()
Definition: lib/vendor/symfony/http-foundation/AcceptHeaderItem.php:180
Symfony\Component\HttpFoundation\AcceptHeader\__construct
__construct(array $items)
Definition: vendor/symfony/http-foundation/AcceptHeader.php:46
Symfony\Component\HttpFoundation\HeaderUtils\combine
static combine(array $parts)
Definition: HeaderUtils.php:83
Symfony\Component\HttpFoundation\AcceptHeader\filter
filter($pattern)
Definition: vendor/symfony/http-foundation/AcceptHeader.php:143
Symfony\Component\HttpFoundation\AcceptHeaderItem
Definition: lib/vendor/symfony/http-foundation/AcceptHeaderItem.php:19
Symfony\Component\HttpFoundation\AcceptHeader\__toString
__toString()
Definition: vendor/symfony/http-foundation/AcceptHeader.php:82
Symfony\Component\HttpFoundation\AcceptHeader\has
has($value)
Definition: vendor/symfony/http-foundation/AcceptHeader.php:94
Symfony\Component\HttpFoundation\AcceptHeader\fromString
static fromString($headerValue)
Definition: vendor/symfony/http-foundation/AcceptHeader.php:60
Symfony\Component\HttpFoundation\AcceptHeaderItem\getQuality
getQuality()
Definition: lib/vendor/symfony/http-foundation/AcceptHeaderItem.php:156
Symfony\Component\HttpFoundation\AcceptHeader\all
all()
Definition: vendor/symfony/http-foundation/AcceptHeader.php:129
Symfony\Component\HttpFoundation\AcceptHeader\add
add(AcceptHeaderItem $item)
Definition: lib/vendor/symfony/http-foundation/AcceptHeader.php:112
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\AcceptHeaderItem\getValue
getValue()
Definition: lib/vendor/symfony/http-foundation/AcceptHeaderItem.php:132
Symfony\Component\HttpFoundation\AcceptHeader\first
first()
Definition: vendor/symfony/http-foundation/AcceptHeader.php:155