PluginProbe
AutomatorWP – No-Code Workflow Automation, Integration & Webhooks Plugin, now with AI / 6.0.4
AutomatorWP – No-Code Workflow Automation, Integration & Webhooks Plugin, now with AI v6.0.4
6.0.4 6.0.3 6.0.2 6.0.1 6.0.0 5.8.6 5.8.5 5.8.4 5.8.3 5.8.2 5.8.1 5.8.0 5.7.9.2 5.7.9.1 5.7.8 5.7.9 5.7.6 5.7.7 5.7.5 5.7.4 5.7.3 5.7.2 5.7.1 trunk 5.6.0 All 35 releases
← All changes | integrations/mailchimp/vendor/guzzlehttp/psr7/src/UploadedFile.php +211 -0 5.8.0 → 6.0.4 View file →
@@ -1,0 +1,211 @@
1 +<?php
2 +
3 +declare(strict_types=1);
4 +
5 +namespace GuzzleHttp\Psr7;
6 +
7 +use InvalidArgumentException;
8 +use Psr\Http\Message\StreamInterface;
9 +use Psr\Http\Message\UploadedFileInterface;
10 +use RuntimeException;
11 +
12 +class UploadedFile implements UploadedFileInterface
13 +{
14 + private const ERROR_MAP = [
15 + UPLOAD_ERR_OK => 'UPLOAD_ERR_OK',
16 + UPLOAD_ERR_INI_SIZE => 'UPLOAD_ERR_INI_SIZE',
17 + UPLOAD_ERR_FORM_SIZE => 'UPLOAD_ERR_FORM_SIZE',
18 + UPLOAD_ERR_PARTIAL => 'UPLOAD_ERR_PARTIAL',
19 + UPLOAD_ERR_NO_FILE => 'UPLOAD_ERR_NO_FILE',
20 + UPLOAD_ERR_NO_TMP_DIR => 'UPLOAD_ERR_NO_TMP_DIR',
21 + UPLOAD_ERR_CANT_WRITE => 'UPLOAD_ERR_CANT_WRITE',
22 + UPLOAD_ERR_EXTENSION => 'UPLOAD_ERR_EXTENSION',
23 + ];
24 +
25 + /**
26 + * @var string|null
27 + */
28 + private $clientFilename;
29 +
30 + /**
31 + * @var string|null
32 + */
33 + private $clientMediaType;
34 +
35 + /**
36 + * @var int
37 + */
38 + private $error;
39 +
40 + /**
41 + * @var string|null
42 + */
43 + private $file;
44 +
45 + /**
46 + * @var bool
47 + */
48 + private $moved = false;
49 +
50 + /**
51 + * @var int|null
52 + */
53 + private $size;
54 +
55 + /**
56 + * @var StreamInterface|null
57 + */
58 + private $stream;
59 +
60 + /**
61 + * @param StreamInterface|string|resource $streamOrFile
62 + */
63 + public function __construct(
64 + $streamOrFile,
65 + ?int $size,
66 + int $errorStatus,
67 + ?string $clientFilename = null,
68 + ?string $clientMediaType = null
69 + ) {
70 + $this->setError($errorStatus);
71 + $this->size = $size;
72 + $this->clientFilename = $clientFilename;
73 + $this->clientMediaType = $clientMediaType;
74 +
75 + if ($this->isOk()) {
76 + $this->setStreamOrFile($streamOrFile);
77 + }
78 + }
79 +
80 + /**
81 + * Depending on the value set file or stream variable
82 + *
83 + * @param StreamInterface|string|resource $streamOrFile
84 + *
85 + * @throws InvalidArgumentException
86 + */
87 + private function setStreamOrFile($streamOrFile): void
88 + {
89 + if (is_string($streamOrFile)) {
90 + $this->file = $streamOrFile;
91 + } elseif (is_resource($streamOrFile)) {
92 + $this->stream = new Stream($streamOrFile);
93 + } elseif ($streamOrFile instanceof StreamInterface) {
94 + $this->stream = $streamOrFile;
95 + } else {
96 + throw new InvalidArgumentException(
97 + 'Invalid stream or file provided for UploadedFile'
98 + );
99 + }
100 + }
101 +
102 + /**
103 + * @throws InvalidArgumentException
104 + */
105 + private function setError(int $error): void
106 + {
107 + if (!isset(UploadedFile::ERROR_MAP[$error])) {
108 + throw new InvalidArgumentException(
109 + 'Invalid error status for UploadedFile'
110 + );
111 + }
112 +
113 + $this->error = $error;
114 + }
115 +
116 + private static function isStringNotEmpty($param): bool
117 + {
118 + return is_string($param) && false === empty($param);
119 + }
120 +
121 + /**
122 + * Return true if there is no upload error
123 + */
124 + private function isOk(): bool
125 + {
126 + return $this->error === UPLOAD_ERR_OK;
127 + }
128 +
129 + public function isMoved(): bool
130 + {
131 + return $this->moved;
132 + }
133 +
134 + /**
135 + * @throws RuntimeException if is moved or not ok
136 + */
137 + private function validateActive(): void
138 + {
139 + if (false === $this->isOk()) {
140 + throw new RuntimeException(\sprintf('Cannot retrieve stream due to upload error (%s)', self::ERROR_MAP[$this->error]));
141 + }
142 +
143 + if ($this->isMoved()) {
144 + throw new RuntimeException('Cannot retrieve stream after it has already been moved');
145 + }
146 + }
147 +
148 + public function getStream(): StreamInterface
149 + {
150 + $this->validateActive();
151 +
152 + if ($this->stream instanceof StreamInterface) {
153 + return $this->stream;
154 + }
155 +
156 + /** @var string $file */
157 + $file = $this->file;
158 +
159 + return new LazyOpenStream($file, 'r+');
160 + }
161 +
162 + public function moveTo($targetPath): void
163 + {
164 + $this->validateActive();
165 +
166 + if (false === self::isStringNotEmpty($targetPath)) {
167 + throw new InvalidArgumentException(
168 + 'Invalid path provided for move operation; must be a non-empty string'
169 + );
170 + }
171 +
172 + if ($this->file) {
173 + $this->moved = PHP_SAPI === 'cli'
174 + ? rename($this->file, $targetPath)
175 + : move_uploaded_file($this->file, $targetPath);
176 + } else {
177 + Utils::copyToStream(
178 + $this->getStream(),
179 + new LazyOpenStream($targetPath, 'w')
180 + );
181 +
182 + $this->moved = true;
183 + }
184 +
185 + if (false === $this->moved) {
186 + throw new RuntimeException(
187 + sprintf('Uploaded file could not be moved to %s', $targetPath)
188 + );
189 + }
190 + }
191 +
192 + public function getSize(): ?int
193 + {
194 + return $this->size;
195 + }
196 +
197 + public function getError(): int
198 + {
199 + return $this->error;
200 + }
201 +
202 + public function getClientFilename(): ?string
203 + {
204 + return $this->clientFilename;
205 + }
206 +
207 + public function getClientMediaType(): ?string
208 + {
209 + return $this->clientMediaType;
210 + }
211 +}