annotate vendor/symfony/http-foundation/AcceptHeaderItem.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
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 /**
Chris@0 22 * @var string
Chris@0 23 */
Chris@0 24 private $value;
Chris@0 25
Chris@0 26 /**
Chris@0 27 * @var float
Chris@0 28 */
Chris@0 29 private $quality = 1.0;
Chris@0 30
Chris@0 31 /**
Chris@0 32 * @var int
Chris@0 33 */
Chris@0 34 private $index = 0;
Chris@0 35
Chris@0 36 /**
Chris@0 37 * @var array
Chris@0 38 */
Chris@0 39 private $attributes = array();
Chris@0 40
Chris@0 41 /**
Chris@0 42 * Constructor.
Chris@0 43 *
Chris@0 44 * @param string $value
Chris@0 45 * @param array $attributes
Chris@0 46 */
Chris@0 47 public function __construct($value, array $attributes = array())
Chris@0 48 {
Chris@0 49 $this->value = $value;
Chris@0 50 foreach ($attributes as $name => $value) {
Chris@0 51 $this->setAttribute($name, $value);
Chris@0 52 }
Chris@0 53 }
Chris@0 54
Chris@0 55 /**
Chris@0 56 * Builds an AcceptHeaderInstance instance from a string.
Chris@0 57 *
Chris@0 58 * @param string $itemValue
Chris@0 59 *
Chris@0 60 * @return self
Chris@0 61 */
Chris@0 62 public static function fromString($itemValue)
Chris@0 63 {
Chris@0 64 $bits = preg_split('/\s*(?:;*("[^"]+");*|;*(\'[^\']+\');*|;+)\s*/', $itemValue, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
Chris@0 65 $value = array_shift($bits);
Chris@0 66 $attributes = array();
Chris@0 67
Chris@0 68 $lastNullAttribute = null;
Chris@0 69 foreach ($bits as $bit) {
Chris@0 70 if (($start = substr($bit, 0, 1)) === ($end = substr($bit, -1)) && ($start === '"' || $start === '\'')) {
Chris@0 71 $attributes[$lastNullAttribute] = substr($bit, 1, -1);
Chris@0 72 } elseif ('=' === $end) {
Chris@0 73 $lastNullAttribute = $bit = substr($bit, 0, -1);
Chris@0 74 $attributes[$bit] = null;
Chris@0 75 } else {
Chris@0 76 $parts = explode('=', $bit);
Chris@0 77 $attributes[$parts[0]] = isset($parts[1]) && strlen($parts[1]) > 0 ? $parts[1] : '';
Chris@0 78 }
Chris@0 79 }
Chris@0 80
Chris@0 81 return new self(($start = substr($value, 0, 1)) === ($end = substr($value, -1)) && ($start === '"' || $start === '\'') ? substr($value, 1, -1) : $value, $attributes);
Chris@0 82 }
Chris@0 83
Chris@0 84 /**
Chris@0 85 * Returns header value's string representation.
Chris@0 86 *
Chris@0 87 * @return string
Chris@0 88 */
Chris@0 89 public function __toString()
Chris@0 90 {
Chris@0 91 $string = $this->value.($this->quality < 1 ? ';q='.$this->quality : '');
Chris@0 92 if (count($this->attributes) > 0) {
Chris@0 93 $string .= ';'.implode(';', array_map(function ($name, $value) {
Chris@0 94 return sprintf(preg_match('/[,;=]/', $value) ? '%s="%s"' : '%s=%s', $name, $value);
Chris@0 95 }, array_keys($this->attributes), $this->attributes));
Chris@0 96 }
Chris@0 97
Chris@0 98 return $string;
Chris@0 99 }
Chris@0 100
Chris@0 101 /**
Chris@0 102 * Set the item value.
Chris@0 103 *
Chris@0 104 * @param string $value
Chris@0 105 *
Chris@0 106 * @return $this
Chris@0 107 */
Chris@0 108 public function setValue($value)
Chris@0 109 {
Chris@0 110 $this->value = $value;
Chris@0 111
Chris@0 112 return $this;
Chris@0 113 }
Chris@0 114
Chris@0 115 /**
Chris@0 116 * Returns the item value.
Chris@0 117 *
Chris@0 118 * @return string
Chris@0 119 */
Chris@0 120 public function getValue()
Chris@0 121 {
Chris@0 122 return $this->value;
Chris@0 123 }
Chris@0 124
Chris@0 125 /**
Chris@0 126 * Set the item quality.
Chris@0 127 *
Chris@0 128 * @param float $quality
Chris@0 129 *
Chris@0 130 * @return $this
Chris@0 131 */
Chris@0 132 public function setQuality($quality)
Chris@0 133 {
Chris@0 134 $this->quality = $quality;
Chris@0 135
Chris@0 136 return $this;
Chris@0 137 }
Chris@0 138
Chris@0 139 /**
Chris@0 140 * Returns the item quality.
Chris@0 141 *
Chris@0 142 * @return float
Chris@0 143 */
Chris@0 144 public function getQuality()
Chris@0 145 {
Chris@0 146 return $this->quality;
Chris@0 147 }
Chris@0 148
Chris@0 149 /**
Chris@0 150 * Set the item index.
Chris@0 151 *
Chris@0 152 * @param int $index
Chris@0 153 *
Chris@0 154 * @return $this
Chris@0 155 */
Chris@0 156 public function setIndex($index)
Chris@0 157 {
Chris@0 158 $this->index = $index;
Chris@0 159
Chris@0 160 return $this;
Chris@0 161 }
Chris@0 162
Chris@0 163 /**
Chris@0 164 * Returns the item index.
Chris@0 165 *
Chris@0 166 * @return int
Chris@0 167 */
Chris@0 168 public function getIndex()
Chris@0 169 {
Chris@0 170 return $this->index;
Chris@0 171 }
Chris@0 172
Chris@0 173 /**
Chris@0 174 * Tests if an attribute exists.
Chris@0 175 *
Chris@0 176 * @param string $name
Chris@0 177 *
Chris@0 178 * @return bool
Chris@0 179 */
Chris@0 180 public function hasAttribute($name)
Chris@0 181 {
Chris@0 182 return isset($this->attributes[$name]);
Chris@0 183 }
Chris@0 184
Chris@0 185 /**
Chris@0 186 * Returns an attribute by its name.
Chris@0 187 *
Chris@0 188 * @param string $name
Chris@0 189 * @param mixed $default
Chris@0 190 *
Chris@0 191 * @return mixed
Chris@0 192 */
Chris@0 193 public function getAttribute($name, $default = null)
Chris@0 194 {
Chris@0 195 return isset($this->attributes[$name]) ? $this->attributes[$name] : $default;
Chris@0 196 }
Chris@0 197
Chris@0 198 /**
Chris@0 199 * Returns all attributes.
Chris@0 200 *
Chris@0 201 * @return array
Chris@0 202 */
Chris@0 203 public function getAttributes()
Chris@0 204 {
Chris@0 205 return $this->attributes;
Chris@0 206 }
Chris@0 207
Chris@0 208 /**
Chris@0 209 * Set an attribute.
Chris@0 210 *
Chris@0 211 * @param string $name
Chris@0 212 * @param string $value
Chris@0 213 *
Chris@0 214 * @return $this
Chris@0 215 */
Chris@0 216 public function setAttribute($name, $value)
Chris@0 217 {
Chris@0 218 if ('q' === $name) {
Chris@0 219 $this->quality = (float) $value;
Chris@0 220 } else {
Chris@0 221 $this->attributes[$name] = (string) $value;
Chris@0 222 }
Chris@0 223
Chris@0 224 return $this;
Chris@0 225 }
Chris@0 226 }