PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.5.1
GiveWP – Donation Plugin and Fundraising Platform v4.16.5.1
4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / vendor / vendor-prefixed / symfony / http-foundation / ResponseHeaderBag.php
give / vendor / vendor-prefixed / symfony / http-foundation Last commit date
Exception 1 year ago File 1 year ago RateLimiter 1 year ago Session 1 year ago Test 1 year ago AcceptHeader.php 1 year ago AcceptHeaderItem.php 1 year ago BinaryFileResponse.php 1 year ago Cookie.php 1 year ago ExpressionRequestMatcher.php 1 year ago FileBag.php 1 year ago HeaderBag.php 1 year ago HeaderUtils.php 1 year ago InputBag.php 1 year ago IpUtils.php 1 year ago JsonResponse.php 1 year ago LICENSE 1 year ago ParameterBag.php 1 year ago RedirectResponse.php 1 year ago Request.php 9 months ago RequestMatcher.php 1 year ago RequestMatcherInterface.php 1 year ago RequestStack.php 1 year ago Response.php 1 year ago ResponseHeaderBag.php 1 year ago ServerBag.php 1 year ago StreamedResponse.php 1 year ago UrlHelper.php 1 year ago
ResponseHeaderBag.php
292 lines
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 Give\Vendors\Symfony\Component\HttpFoundation;
13
14 /**
15 * ResponseHeaderBag is a container for Response HTTP headers.
16 *
17 * @author Fabien Potencier <fabien@symfony.com>
18 */
19 class ResponseHeaderBag extends HeaderBag
20 {
21 public const COOKIES_FLAT = 'flat';
22 public const COOKIES_ARRAY = 'array';
23
24 public const DISPOSITION_ATTACHMENT = 'attachment';
25 public const DISPOSITION_INLINE = 'inline';
26
27 protected $computedCacheControl = [];
28 protected $cookies = [];
29 protected $headerNames = [];
30
31 public function __construct(array $headers = [])
32 {
33 parent::__construct($headers);
34
35 if (!isset($this->headers['cache-control'])) {
36 $this->set('Cache-Control', '');
37 }
38
39 /* RFC2616 - 14.18 says all Responses need to have a Date */
40 if (!isset($this->headers['date'])) {
41 $this->initDate();
42 }
43 }
44
45 /**
46 * Returns the headers, with original capitalizations.
47 *
48 * @return array
49 */
50 public function allPreserveCase()
51 {
52 $headers = [];
53 foreach ($this->all() as $name => $value) {
54 $headers[$this->headerNames[$name] ?? $name] = $value;
55 }
56
57 return $headers;
58 }
59
60 public function allPreserveCaseWithoutCookies()
61 {
62 $headers = $this->allPreserveCase();
63 if (isset($this->headerNames['set-cookie'])) {
64 unset($headers[$this->headerNames['set-cookie']]);
65 }
66
67 return $headers;
68 }
69
70 /**
71 * {@inheritdoc}
72 */
73 public function replace(array $headers = [])
74 {
75 $this->headerNames = [];
76
77 parent::replace($headers);
78
79 if (!isset($this->headers['cache-control'])) {
80 $this->set('Cache-Control', '');
81 }
82
83 if (!isset($this->headers['date'])) {
84 $this->initDate();
85 }
86 }
87
88 /**
89 * {@inheritdoc}
90 */
91 public function all(?string $key = null)
92 {
93 $headers = parent::all();
94
95 if (null !== $key) {
96 $key = strtr($key, self::UPPER, self::LOWER);
97
98 return 'set-cookie' !== $key ? $headers[$key] ?? [] : array_map('strval', $this->getCookies());
99 }
100
101 foreach ($this->getCookies() as $cookie) {
102 $headers['set-cookie'][] = (string) $cookie;
103 }
104
105 return $headers;
106 }
107
108 /**
109 * {@inheritdoc}
110 */
111 public function set(string $key, $values, bool $replace = true)
112 {
113 $uniqueKey = strtr($key, self::UPPER, self::LOWER);
114
115 if ('set-cookie' === $uniqueKey) {
116 if ($replace) {
117 $this->cookies = [];
118 }
119 foreach ((array) $values as $cookie) {
120 $this->setCookie(Cookie::fromString($cookie));
121 }
122 $this->headerNames[$uniqueKey] = $key;
123
124 return;
125 }
126
127 $this->headerNames[$uniqueKey] = $key;
128
129 parent::set($key, $values, $replace);
130
131 // ensure the cache-control header has sensible defaults
132 if (\in_array($uniqueKey, ['cache-control', 'etag', 'last-modified', 'expires'], true) && '' !== $computed = $this->computeCacheControlValue()) {
133 $this->headers['cache-control'] = [$computed];
134 $this->headerNames['cache-control'] = 'Cache-Control';
135 $this->computedCacheControl = $this->parseCacheControl($computed);
136 }
137 }
138
139 /**
140 * {@inheritdoc}
141 */
142 public function remove(string $key)
143 {
144 $uniqueKey = strtr($key, self::UPPER, self::LOWER);
145 unset($this->headerNames[$uniqueKey]);
146
147 if ('set-cookie' === $uniqueKey) {
148 $this->cookies = [];
149
150 return;
151 }
152
153 parent::remove($key);
154
155 if ('cache-control' === $uniqueKey) {
156 $this->computedCacheControl = [];
157 }
158
159 if ('date' === $uniqueKey) {
160 $this->initDate();
161 }
162 }
163
164 /**
165 * {@inheritdoc}
166 */
167 public function hasCacheControlDirective(string $key)
168 {
169 return \array_key_exists($key, $this->computedCacheControl);
170 }
171
172 /**
173 * {@inheritdoc}
174 */
175 public function getCacheControlDirective(string $key)
176 {
177 return $this->computedCacheControl[$key] ?? null;
178 }
179
180 public function setCookie(Cookie $cookie)
181 {
182 $this->cookies[$cookie->getDomain()][$cookie->getPath()][$cookie->getName()] = $cookie;
183 $this->headerNames['set-cookie'] = 'Set-Cookie';
184 }
185
186 /**
187 * Removes a cookie from the array, but does not unset it in the browser.
188 */
189 public function removeCookie(string $name, ?string $path = '/', ?string $domain = null)
190 {
191 if (null === $path) {
192 $path = '/';
193 }
194
195 unset($this->cookies[$domain][$path][$name]);
196
197 if (empty($this->cookies[$domain][$path])) {
198 unset($this->cookies[$domain][$path]);
199
200 if (empty($this->cookies[$domain])) {
201 unset($this->cookies[$domain]);
202 }
203 }
204
205 if (empty($this->cookies)) {
206 unset($this->headerNames['set-cookie']);
207 }
208 }
209
210 /**
211 * Returns an array with all cookies.
212 *
213 * @return Cookie[]
214 *
215 * @throws \InvalidArgumentException When the $format is invalid
216 */
217 public function getCookies(string $format = self::COOKIES_FLAT)
218 {
219 if (!\in_array($format, [self::COOKIES_FLAT, self::COOKIES_ARRAY])) {
220 throw new \InvalidArgumentException(sprintf('Format "%s" invalid (%s).', $format, implode(', ', [self::COOKIES_FLAT, self::COOKIES_ARRAY])));
221 }
222
223 if (self::COOKIES_ARRAY === $format) {
224 return $this->cookies;
225 }
226
227 $flattenedCookies = [];
228 foreach ($this->cookies as $path) {
229 foreach ($path as $cookies) {
230 foreach ($cookies as $cookie) {
231 $flattenedCookies[] = $cookie;
232 }
233 }
234 }
235
236 return $flattenedCookies;
237 }
238
239 /**
240 * Clears a cookie in the browser.
241 */
242 public function clearCookie(string $name, ?string $path = '/', ?string $domain = null, bool $secure = false, bool $httpOnly = true, ?string $sameSite = null)
243 {
244 $this->setCookie(new Cookie($name, null, 1, $path, $domain, $secure, $httpOnly, false, $sameSite));
245 }
246
247 /**
248 * @see HeaderUtils::makeDisposition()
249 */
250 public function makeDisposition(string $disposition, string $filename, string $filenameFallback = '')
251 {
252 return HeaderUtils::makeDisposition($disposition, $filename, $filenameFallback);
253 }
254
255 /**
256 * Returns the calculated value of the cache-control header.
257 *
258 * This considers several other headers and calculates or modifies the
259 * cache-control header to a sensible, conservative value.
260 *
261 * @return string
262 */
263 protected function computeCacheControlValue()
264 {
265 if (!$this->cacheControl) {
266 if ($this->has('Last-Modified') || $this->has('Expires')) {
267 return 'private, must-revalidate'; // allows for heuristic expiration (RFC 7234 Section 4.2.2) in the case of "Last-Modified"
268 }
269
270 // conservative by default
271 return 'no-cache, private';
272 }
273
274 $header = $this->getCacheControlHeader();
275 if (isset($this->cacheControl['public']) || isset($this->cacheControl['private'])) {
276 return $header;
277 }
278
279 // public if s-maxage is defined, private otherwise
280 if (!isset($this->cacheControl['s-maxage'])) {
281 return $header.', private';
282 }
283
284 return $header;
285 }
286
287 private function initDate(): void
288 {
289 $this->set('Date', gmdate('D, d M Y H:i:s').' GMT');
290 }
291 }
292