Diff: STRATO-apps/wordpress_03/app/wp-includes/Requests/src/Response/Headers.php

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
1 -
1 + <?php
2 + /**
3 + * Case-insensitive dictionary, suitable for HTTP headers
4 + *
5 + * @package Requests
6 + */
7 +
8 + namespace WpOrg\Requests\Response;
9 +
10 + use WpOrg\Requests\Exception;
11 + use WpOrg\Requests\Exception\InvalidArgument;
12 + use WpOrg\Requests\Utility\CaseInsensitiveDictionary;
13 + use WpOrg\Requests\Utility\FilteredIterator;
14 +
15 + /**
16 + * Case-insensitive dictionary, suitable for HTTP headers
17 + *
18 + * @package Requests
19 + */
20 + class Headers extends CaseInsensitiveDictionary {
21 + /**
22 + * Get the given header
23 + *
24 + * Unlike {@see \WpOrg\Requests\Response\Headers::getValues()}, this returns a string. If there are
25 + * multiple values, it concatenates them with a comma as per RFC2616.
26 + *
27 + * Avoid using this where commas may be used unquoted in values, such as
28 + * Set-Cookie headers.
29 + *
30 + * @param string $offset Name of the header to retrieve.
31 + * @return string|null Header value
32 + */
33 + public function offsetGet($offset) {
34 + if (is_string($offset)) {
35 + $offset = strtolower($offset);
36 + }
37 +
38 + if (!isset($this->data[$offset])) {
39 + return null;
40 + }
41 +
42 + return $this->flatten($this->data[$offset]);
43 + }
44 +
45 + /**
46 + * Set the given item
47 + *
48 + * @param string $offset Item name
49 + * @param string $value Item value
50 + *
51 + * @throws \WpOrg\Requests\Exception On attempting to use dictionary as list (`invalidset`)
52 + */
53 + public function offsetSet($offset, $value) {
54 + if ($offset === null) {
55 + throw new Exception('Object is a dictionary, not a list', 'invalidset');
56 + }
57 +
58 + if (is_string($offset)) {
59 + $offset = strtolower($offset);
60 + }
61 +
62 + if (!isset($this->data[$offset])) {
63 + $this->data[$offset] = [];
64 + }
65 +
66 + $this->data[$offset][] = $value;
67 + }
68 +
69 + /**
70 + * Get all values for a given header
71 + *
72 + * @param string $offset Name of the header to retrieve.
73 + * @return array|null Header values
74 + *
75 + * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not valid as an array key.
76 + */
77 + public function getValues($offset) {
78 + if (!is_string($offset) && !is_int($offset)) {
79 + throw InvalidArgument::create(1, '$offset', 'string|int', gettype($offset));
80 + }
81 +
82 + if (is_string($offset)) {
83 + $offset = strtolower($offset);
84 + }
85 +
86 + if (!isset($this->data[$offset])) {
87 + return null;
88 + }
89 +
90 + return $this->data[$offset];
91 + }
92 +
93 + /**
94 + * Flattens a value into a string
95 + *
96 + * Converts an array into a string by imploding values with a comma, as per
97 + * RFC2616's rules for folding headers.
98 + *
99 + * @param string|array $value Value to flatten
100 + * @return string Flattened value
101 + *
102 + * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string or an array.
103 + */
104 + public function flatten($value) {
105 + if (is_string($value)) {
106 + return $value;
107 + }
108 +
109 + if (is_array($value)) {
110 + return implode(',', $value);
111 + }
112 +
113 + throw InvalidArgument::create(1, '$value', 'string|array', gettype($value));
114 + }
115 +
116 + /**
117 + * Get an iterator for the data
118 + *
119 + * Converts the internally stored values to a comma-separated string if there is more
120 + * than one value for a key.
121 + *
122 + * @return \ArrayIterator
123 + */
124 + public function getIterator() {
125 + return new FilteredIterator($this->data, [$this, 'flatten']);
126 + }
127 + }
128 +