annotate vendor/symfony/http-foundation/AcceptHeaderItem.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the Symfony package.
Chris@0 5 *
Chris@0 6 * (c) Fabien Potencier <fabien@symfony.com>
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Symfony\Component\HttpFoundation;
Chris@0 13
Chris@0 14 /**
Chris@0 15 * Represents an Accept-* header item.
Chris@0 16 *
Chris@0 17 * @author Jean-François Simon <contact@jfsimon.fr>
Chris@0 18 */
Chris@0 19 class AcceptHeaderItem
Chris@0 20 {
Chris@0 21 private $value;
Chris@0 22 private $quality = 1.0;
Chris@0 23 private $index = 0;
Chris@17 24 private $attributes = [];
Chris@0 25
Chris@0 26 /**
Chris@0 27 * @param string $value
Chris@0 28 * @param array $attributes
Chris@0 29 */
Chris@17 30 public function __construct($value, array $attributes = [])
Chris@0 31 {
Chris@0 32 $this->value = $value;
Chris@0 33 foreach ($attributes as $name => $value) {
Chris@0 34 $this->setAttribute($name, $value);
Chris@0 35 }
Chris@0 36 }
Chris@0 37
Chris@0 38 /**
Chris@0 39 * Builds an AcceptHeaderInstance instance from a string.
Chris@0 40 *
Chris@0 41 * @param string $itemValue
Chris@0 42 *
Chris@0 43 * @return self
Chris@0 44 */
Chris@0 45 public static function fromString($itemValue)
Chris@0 46 {
Chris@0 47 $bits = preg_split('/\s*(?:;*("[^"]+");*|;*(\'[^\']+\');*|;+)\s*/', $itemValue, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
Chris@0 48 $value = array_shift($bits);
Chris@17 49 $attributes = [];
Chris@0 50
Chris@0 51 $lastNullAttribute = null;
Chris@0 52 foreach ($bits as $bit) {
Chris@14 53 if (($start = substr($bit, 0, 1)) === ($end = substr($bit, -1)) && ('"' === $start || '\'' === $start)) {
Chris@0 54 $attributes[$lastNullAttribute] = substr($bit, 1, -1);
Chris@0 55 } elseif ('=' === $end) {
Chris@0 56 $lastNullAttribute = $bit = substr($bit, 0, -1);
Chris@0 57 $attributes[$bit] = null;
Chris@0 58 } else {
Chris@0 59 $parts = explode('=', $bit);
Chris@17 60 $attributes[$parts[0]] = isset($parts[1]) && \strlen($parts[1]) > 0 ? $parts[1] : '';
Chris@0 61 }
Chris@0 62 }
Chris@0 63
Chris@14 64 return new self(($start = substr($value, 0, 1)) === ($end = substr($value, -1)) && ('"' === $start || '\'' === $start) ? substr($value, 1, -1) : $value, $attributes);
Chris@0 65 }
Chris@0 66
Chris@0 67 /**
Chris@17 68 * Returns header value's string representation.
Chris@0 69 *
Chris@0 70 * @return string
Chris@0 71 */
Chris@0 72 public function __toString()
Chris@0 73 {
Chris@0 74 $string = $this->value.($this->quality < 1 ? ';q='.$this->quality : '');
Chris@17 75 if (\count($this->attributes) > 0) {
Chris@0 76 $string .= ';'.implode(';', array_map(function ($name, $value) {
Chris@0 77 return sprintf(preg_match('/[,;=]/', $value) ? '%s="%s"' : '%s=%s', $name, $value);
Chris@0 78 }, array_keys($this->attributes), $this->attributes));
Chris@0 79 }
Chris@0 80
Chris@0 81 return $string;
Chris@0 82 }
Chris@0 83
Chris@0 84 /**
Chris@0 85 * Set the item value.
Chris@0 86 *
Chris@0 87 * @param string $value
Chris@0 88 *
Chris@0 89 * @return $this
Chris@0 90 */
Chris@0 91 public function setValue($value)
Chris@0 92 {
Chris@0 93 $this->value = $value;
Chris@0 94
Chris@0 95 return $this;
Chris@0 96 }
Chris@0 97
Chris@0 98 /**
Chris@0 99 * Returns the item value.
Chris@0 100 *
Chris@0 101 * @return string
Chris@0 102 */
Chris@0 103 public function getValue()
Chris@0 104 {
Chris@0 105 return $this->value;
Chris@0 106 }
Chris@0 107
Chris@0 108 /**
Chris@0 109 * Set the item quality.
Chris@0 110 *
Chris@0 111 * @param float $quality
Chris@0 112 *
Chris@0 113 * @return $this
Chris@0 114 */
Chris@0 115 public function setQuality($quality)
Chris@0 116 {
Chris@0 117 $this->quality = $quality;
Chris@0 118
Chris@0 119 return $this;
Chris@0 120 }
Chris@0 121
Chris@0 122 /**
Chris@0 123 * Returns the item quality.
Chris@0 124 *
Chris@0 125 * @return float
Chris@0 126 */
Chris@0 127 public function getQuality()
Chris@0 128 {
Chris@0 129 return $this->quality;
Chris@0 130 }
Chris@0 131
Chris@0 132 /**
Chris@0 133 * Set the item index.
Chris@0 134 *
Chris@0 135 * @param int $index
Chris@0 136 *
Chris@0 137 * @return $this
Chris@0 138 */
Chris@0 139 public function setIndex($index)
Chris@0 140 {
Chris@0 141 $this->index = $index;
Chris@0 142
Chris@0 143 return $this;
Chris@0 144 }
Chris@0 145
Chris@0 146 /**
Chris@0 147 * Returns the item index.
Chris@0 148 *
Chris@0 149 * @return int
Chris@0 150 */
Chris@0 151 public function getIndex()
Chris@0 152 {
Chris@0 153 return $this->index;
Chris@0 154 }
Chris@0 155
Chris@0 156 /**
Chris@0 157 * Tests if an attribute exists.
Chris@0 158 *
Chris@0 159 * @param string $name
Chris@0 160 *
Chris@0 161 * @return bool
Chris@0 162 */
Chris@0 163 public function hasAttribute($name)
Chris@0 164 {
Chris@0 165 return isset($this->attributes[$name]);
Chris@0 166 }
Chris@0 167
Chris@0 168 /**
Chris@0 169 * Returns an attribute by its name.
Chris@0 170 *
Chris@0 171 * @param string $name
Chris@0 172 * @param mixed $default
Chris@0 173 *
Chris@0 174 * @return mixed
Chris@0 175 */
Chris@0 176 public function getAttribute($name, $default = null)
Chris@0 177 {
Chris@0 178 return isset($this->attributes[$name]) ? $this->attributes[$name] : $default;
Chris@0 179 }
Chris@0 180
Chris@0 181 /**
Chris@0 182 * Returns all attributes.
Chris@0 183 *
Chris@0 184 * @return array
Chris@0 185 */
Chris@0 186 public function getAttributes()
Chris@0 187 {
Chris@0 188 return $this->attributes;
Chris@0 189 }
Chris@0 190
Chris@0 191 /**
Chris@0 192 * Set an attribute.
Chris@0 193 *
Chris@0 194 * @param string $name
Chris@0 195 * @param string $value
Chris@0 196 *
Chris@0 197 * @return $this
Chris@0 198 */
Chris@0 199 public function setAttribute($name, $value)
Chris@0 200 {
Chris@0 201 if ('q' === $name) {
Chris@0 202 $this->quality = (float) $value;
Chris@0 203 } else {
Chris@0 204 $this->attributes[$name] = (string) $value;
Chris@0 205 }
Chris@0 206
Chris@0 207 return $this;
Chris@0 208 }
Chris@0 209 }