PluginProbe
Media Cloud Sync / 1.2.10
Media Cloud Sync v1.2.10
1.4.1 1.4.0 1.3.12 1.3.11 1.3.10 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.2.0 1.2.10 1.2.11 1.2.12 1.2.13 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 All 35 releases
media-cloud-sync / includes / sdk / s3 / GuzzleHttp / Psr7 / UploadedFile.php

UploadedFile.php in Media Cloud Sync 1.2.10, at includes/sdk/s3/GuzzleHttp/Psr7/UploadedFile.php

256 lines 7.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Dudlewebs\WPMCS\s3\GuzzleHttp\Psr7;
4
5 use InvalidArgumentException;
6 use Dudlewebs\WPMCS\s3\Psr\Http\Message\StreamInterface;
7 use Dudlewebs\WPMCS\s3\Psr\Http\Message\UploadedFileInterface;
8 use RuntimeException;
9 class UploadedFile implements UploadedFileInterface
10 {
11 /**
12 * @var int[]
13 */
14 private static $errors = [\UPLOAD_ERR_OK, \UPLOAD_ERR_INI_SIZE, \UPLOAD_ERR_FORM_SIZE, \UPLOAD_ERR_PARTIAL, \UPLOAD_ERR_NO_FILE, \UPLOAD_ERR_NO_TMP_DIR, \UPLOAD_ERR_CANT_WRITE, \UPLOAD_ERR_EXTENSION];
15 /**
16 * @var string
17 */
18 private $clientFilename;
19 /**
20 * @var string
21 */
22 private $clientMediaType;
23 /**
24 * @var int
25 */
26 private $error;
27 /**
28 * @var string|null
29 */
30 private $file;
31 /**
32 * @var bool
33 */
34 private $moved = \false;
35 /**
36 * @var int
37 */
38 private $size;
39 /**
40 * @var StreamInterface|null
41 */
42 private $stream;
43 /**
44 * @param StreamInterface|string|resource $streamOrFile
45 * @param int $size
46 * @param int $errorStatus
47 * @param string|null $clientFilename
48 * @param string|null $clientMediaType
49 */
50 public function __construct($streamOrFile, $size, $errorStatus, $clientFilename = null, $clientMediaType = null)
51 {
52 $this->setError($errorStatus);
53 $this->setSize($size);
54 $this->setClientFilename($clientFilename);
55 $this->setClientMediaType($clientMediaType);
56 if ($this->isOk()) {
57 $this->setStreamOrFile($streamOrFile);
58 }
59 }
60 /**
61 * Depending on the value set file or stream variable
62 *
63 * @param mixed $streamOrFile
64 *
65 * @throws InvalidArgumentException
66 */
67 private function setStreamOrFile($streamOrFile)
68 {
69 if (\is_string($streamOrFile)) {
70 $this->file = $streamOrFile;
71 } elseif (\is_resource($streamOrFile)) {
72 $this->stream = new Stream($streamOrFile);
73 } elseif ($streamOrFile instanceof StreamInterface) {
74 $this->stream = $streamOrFile;
75 } else {
76 throw new InvalidArgumentException('Invalid stream or file provided for UploadedFile');
77 }
78 }
79 /**
80 * @param int $error
81 *
82 * @throws InvalidArgumentException
83 */
84 private function setError($error)
85 {
86 if (\false === \is_int($error)) {
87 throw new InvalidArgumentException('Upload file error status must be an integer');
88 }
89 if (\false === \in_array($error, UploadedFile::$errors)) {
90 throw new InvalidArgumentException('Invalid error status for UploadedFile');
91 }
92 $this->error = $error;
93 }
94 /**
95 * @param int $size
96 *
97 * @throws InvalidArgumentException
98 */
99 private function setSize($size)
100 {
101 if (\false === \is_int($size)) {
102 throw new InvalidArgumentException('Upload file size must be an integer');
103 }
104 $this->size = $size;
105 }
106 /**
107 * @param mixed $param
108 *
109 * @return bool
110 */
111 private function isStringOrNull($param)
112 {
113 return \in_array(\gettype($param), ['string', 'NULL']);
114 }
115 /**
116 * @param mixed $param
117 *
118 * @return bool
119 */
120 private function isStringNotEmpty($param)
121 {
122 return \is_string($param) && \false === empty($param);
123 }
124 /**
125 * @param string|null $clientFilename
126 *
127 * @throws InvalidArgumentException
128 */
129 private function setClientFilename($clientFilename)
130 {
131 if (\false === $this->isStringOrNull($clientFilename)) {
132 throw new InvalidArgumentException('Upload file client filename must be a string or null');
133 }
134 $this->clientFilename = $clientFilename;
135 }
136 /**
137 * @param string|null $clientMediaType
138 *
139 * @throws InvalidArgumentException
140 */
141 private function setClientMediaType($clientMediaType)
142 {
143 if (\false === $this->isStringOrNull($clientMediaType)) {
144 throw new InvalidArgumentException('Upload file client media type must be a string or null');
145 }
146 $this->clientMediaType = $clientMediaType;
147 }
148 /**
149 * Return true if there is no upload error
150 *
151 * @return bool
152 */
153 private function isOk()
154 {
155 return $this->error === \UPLOAD_ERR_OK;
156 }
157 /**
158 * @return bool
159 */
160 public function isMoved()
161 {
162 return $this->moved;
163 }
164 /**
165 * @throws RuntimeException if is moved or not ok
166 */
167 private function validateActive()
168 {
169 if (\false === $this->isOk()) {
170 throw new RuntimeException('Cannot retrieve stream due to upload error');
171 }
172 if ($this->isMoved()) {
173 throw new RuntimeException('Cannot retrieve stream after it has already been moved');
174 }
175 }
176 /**
177 * {@inheritdoc}
178 *
179 * @throws RuntimeException if the upload was not successful.
180 */
181 public function getStream()
182 {
183 $this->validateActive();
184 if ($this->stream instanceof StreamInterface) {
185 return $this->stream;
186 }
187 return new LazyOpenStream($this->file, 'r+');
188 }
189 /**
190 * {@inheritdoc}
191 *
192 * @see http://php.net/is_uploaded_file
193 * @see http://php.net/move_uploaded_file
194 *
195 * @param string $targetPath Path to which to move the uploaded file.
196 *
197 * @throws RuntimeException if the upload was not successful.
198 * @throws InvalidArgumentException if the $path specified is invalid.
199 * @throws RuntimeException on any error during the move operation, or on
200 * the second or subsequent call to the method.
201 */
202 public function moveTo($targetPath)
203 {
204 $this->validateActive();
205 if (\false === $this->isStringNotEmpty($targetPath)) {
206 throw new InvalidArgumentException('Invalid path provided for move operation; must be a non-empty string');
207 }
208 if ($this->file) {
209 $this->moved = \php_sapi_name() == 'cli' ? \rename($this->file, $targetPath) : \move_uploaded_file($this->file, $targetPath);
210 } else {
211 Utils::copyToStream($this->getStream(), new LazyOpenStream($targetPath, 'w'));
212 $this->moved = \true;
213 }
214 if (\false === $this->moved) {
215 throw new RuntimeException(\sprintf('Uploaded file could not be moved to %s', $targetPath));
216 }
217 }
218 /**
219 * {@inheritdoc}
220 *
221 * @return int|null The file size in bytes or null if unknown.
222 */
223 public function getSize()
224 {
225 return $this->size;
226 }
227 /**
228 * {@inheritdoc}
229 *
230 * @see http://php.net/manual/en/features.file-upload.errors.php
231 *
232 * @return int One of PHP's UPLOAD_ERR_XXX constants.
233 */
234 public function getError()
235 {
236 return $this->error;
237 }
238 /**
239 * {@inheritdoc}
240 *
241 * @return string|null The filename sent by the client or null if none
242 * was provided.
243 */
244 public function getClientFilename()
245 {
246 return $this->clientFilename;
247 }
248 /**
249 * {@inheritdoc}
250 */
251 public function getClientMediaType()
252 {
253 return $this->clientMediaType;
254 }
255 }
256