* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\HttpFoundation; /** * Represents an Accept-* header. * * An accept header is compound with a list of items, * sorted by descending quality. * * @author Jean-François Simon */ class AcceptHeader { /** * @var AcceptHeaderItem[] */ private $items = array(); /** * @var bool */ private $sorted = true; /** * @param AcceptHeaderItem[] $items */ public function __construct(array $items) { foreach ($items as $item) { $this->add($item); } } /** * Builds an AcceptHeader instance from a string. * * @param string $headerValue * * @return self */ public static function fromString($headerValue) { $index = 0; return new self(array_map(function ($itemValue) use (&$index) { $item = AcceptHeaderItem::fromString($itemValue); $item->setIndex($index++); return $item; }, preg_split('/\s*(?:,*("[^"]+"),*|,*(\'[^\']+\'),*|,+)\s*/', $headerValue, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE))); } /** * Returns header value's string representation. * * @return string */ public function __toString() { return implode(',', $this->items); } /** * Tests if header has given value. * * @param string $value * * @return bool */ public function has($value) { return isset($this->items[$value]); } /** * Returns given value's item, if exists. * * @param string $value * * @return AcceptHeaderItem|null */ public function get($value) { return isset($this->items[$value]) ? $this->items[$value] : null; } /** * Adds an item. * * @return $this */ public function add(AcceptHeaderItem $item) { $this->items[$item->getValue()] = $item; $this->sorted = false; return $this; } /** * Returns all items. * * @return AcceptHeaderItem[] */ public function all() { $this->sort(); return $this->items; } /** * Filters items on their value using given regex. * * @param string $pattern * * @return self */ public function filter($pattern) { return new self(array_filter($this->items, function (AcceptHeaderItem $item) use ($pattern) { return preg_match($pattern, $item->getValue()); })); } /** * Returns first item. * * @return AcceptHeaderItem|null */ public function first() { $this->sort(); return !empty($this->items) ? reset($this->items) : null; } /** * Sorts items by descending quality. */ private function sort() { if (!$this->sorted) { uasort($this->items, function (AcceptHeaderItem $a, AcceptHeaderItem $b) { $qA = $a->getQuality(); $qB = $b->getQuality(); if ($qA === $qB) { return $a->getIndex() > $b->getIndex() ? 1 : -1; } return $qA > $qB ? -1 : 1; }); $this->sorted = true; } } } __halt_compiler();----SIGNATURE:----gYMPY3J04a3CRz20WejJWzIm/OhWsr2X4dKs7zup1VAi/79AXxgSicxEf1KdXhPgvBz/yFBQXMwTqlqvMgDDK4aLPnRYipjjITXY4LFtcGkXXBO/N/StFjKF1mzq8dlsAU/hNHEoH+5oe7TJqPXFndmeL+FgvvnTI14xgSZoFWubYoBp5idxY/u48rRumFXvg5LXTxpHaouiBOQsgNWRRrf+gs2aUvqzwKLOhEUNoMTO+oFHaPEYMV8GQ/02b30QhYxkGH9J1eoEC4MijOua7o8ptxO+vwRyX6ys9mbGji9Z7G6Jjpx8JrTFuuHPPPR/P47UEgvDZDv5ymjGXkWxYIS6KcRn4UB2exwpC4LpgItul4/C7rfO12YCFroCQuMG/QZ4axEXvQcrXrjLDBaD1GZo4/zG+tE+qq16nGo7PJ2eWNsvX5xZ5n4SV2ZztPngTtrK6JzxWPivgPJWuB/kwiNXxmTrS21zwNVlklL40x7JCuBKB4PCzH53Qzoj/W0uwCOMEBheChsMUVuDkz1+b82t0XqF6s0fNFCR2RHz/KBuoHlDOlqYzmLlWfPS1zWjgLQHBXp7AUam3hbI8ZvZCuH3yrukMJq+POgwXfjrY1QaYbgjIvLVaV5+JLkB7q13cK8zokjFj75UOdnc5mnj3SB/IyTe7zlw2oavbGsPD7U=----ATTACHMENT:----MjE4OTI2MTU1MzAwMDUzMyA3ODc3NzU1MTA0NzgzNjM2IDQ0NjA4MTAwODcwODAzMTc=