[ Index ] |
PHP Cross Reference of phpBB-3.1.12-deutsch |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Jan 11 00:25:41 2018 | Cross-referenced by PHPXref 0.7.1 |