[ Index ]

PHP Cross Reference of phpBB-3.1.12-deutsch

title

Body

[close]

/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ -> AcceptHeader.php (source)

   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  
  12  namespace Symfony\Component\HttpFoundation;
  13  
  14  /**
  15   * Represents an Accept-* header.
  16   *
  17   * An accept header is compound with a list of items,
  18   * sorted by descending quality.
  19   *
  20   * @author Jean-François Simon <contact@jfsimon.fr>
  21   */
  22  class AcceptHeader
  23  {
  24      /**
  25       * @var AcceptHeaderItem[]
  26       */
  27      private $items = array();
  28  
  29      /**
  30       * @var bool
  31       */
  32      private $sorted = true;
  33  
  34      /**
  35       * Constructor.
  36       *
  37       * @param AcceptHeaderItem[] $items
  38       */
  39      public function __construct(array $items)
  40      {
  41          foreach ($items as $item) {
  42              $this->add($item);
  43          }
  44      }
  45  
  46      /**
  47       * Builds an AcceptHeader instance from a string.
  48       *
  49       * @param string $headerValue
  50       *
  51       * @return AcceptHeader
  52       */
  53      public static function fromString($headerValue)
  54      {
  55          $index = 0;
  56  
  57          return new self(array_map(function ($itemValue) use (&$index) {
  58              $item = AcceptHeaderItem::fromString($itemValue);
  59              $item->setIndex($index++);
  60  
  61              return $item;
  62          }, preg_split('/\s*(?:,*("[^"]+"),*|,*(\'[^\']+\'),*|,+)\s*/', $headerValue, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE)));
  63      }
  64  
  65      /**
  66       * Returns header value's string representation.
  67       *
  68       * @return string
  69       */
  70      public function __toString()
  71      {
  72          return implode(',', $this->items);
  73      }
  74  
  75      /**
  76       * Tests if header has given value.
  77       *
  78       * @param string $value
  79       *
  80       * @return bool
  81       */
  82      public function has($value)
  83      {
  84          return isset($this->items[$value]);
  85      }
  86  
  87      /**
  88       * Returns given value's item, if exists.
  89       *
  90       * @param string $value
  91       *
  92       * @return AcceptHeaderItem|null
  93       */
  94      public function get($value)
  95      {
  96          return isset($this->items[$value]) ? $this->items[$value] : null;
  97      }
  98  
  99      /**
 100       * Adds an item.
 101       *
 102       * @param AcceptHeaderItem $item
 103       *
 104       * @return AcceptHeader
 105       */
 106      public function add(AcceptHeaderItem $item)
 107      {
 108          $this->items[$item->getValue()] = $item;
 109          $this->sorted = false;
 110  
 111          return $this;
 112      }
 113  
 114      /**
 115       * Returns all items.
 116       *
 117       * @return AcceptHeaderItem[]
 118       */
 119      public function all()
 120      {
 121          $this->sort();
 122  
 123          return $this->items;
 124      }
 125  
 126      /**
 127       * Filters items on their value using given regex.
 128       *
 129       * @param string $pattern
 130       *
 131       * @return AcceptHeader
 132       */
 133      public function filter($pattern)
 134      {
 135          return new self(array_filter($this->items, function (AcceptHeaderItem $item) use ($pattern) {
 136              return preg_match($pattern, $item->getValue());
 137          }));
 138      }
 139  
 140      /**
 141       * Returns first item.
 142       *
 143       * @return AcceptHeaderItem|null
 144       */
 145      public function first()
 146      {
 147          $this->sort();
 148  
 149          return !empty($this->items) ? reset($this->items) : null;
 150      }
 151  
 152      /**
 153       * Sorts items by descending quality.
 154       */
 155      private function sort()
 156      {
 157          if (!$this->sorted) {
 158              uasort($this->items, function ($a, $b) {
 159                  $qA = $a->getQuality();
 160                  $qB = $b->getQuality();
 161  
 162                  if ($qA === $qB) {
 163                      return $a->getIndex() > $b->getIndex() ? 1 : -1;
 164                  }
 165  
 166                  return $qA > $qB ? -1 : 1;
 167              });
 168  
 169              $this->sorted = true;
 170          }
 171      }
 172  }


Generated: Thu Jan 11 00:25:41 2018 Cross-referenced by PHPXref 0.7.1