GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Push — develop ( 49b9f7...1b950b )
by nguereza
11:04 queued 09:02
created

File::getClientName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Platine Upload
5
 *
6
 * Platine Upload provides a flexible file uploads with extensible
7
 * validation and storage strategies.
8
 *
9
 * This content is released under the MIT License (MIT)
10
 *
11
 * Copyright (c) 2020 Platine Upload
12
 *
13
 * @author      Josh Lockhart <[email protected]>
14
 * @copyright   2012 Josh Lockhart
15
 * @link        http://www.joshlockhart.com
16
 * @version     2.0.0
17
 *
18
 * Permission is hereby granted, free of charge, to any person obtaining a copy
19
 * of this software and associated documentation files (the "Software"), to deal
20
 * in the Software without restriction, including without limitation the rights
21
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
22
 * copies of the Software, and to permit persons to whom the Software is
23
 * furnished to do so, subject to the following conditions:
24
 *
25
 * The above copyright notice and this permission notice shall be included in all
26
 * copies or substantial portions of the Software.
27
 *
28
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
29
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
30
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
31
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
32
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
33
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
34
 * SOFTWARE.
35
 */
36
37
/**
38
 *  @file File.php
39
 *
40
 *  The Upload File class
41
 *
42
 *  @package    Platine\Upload\File
43
 *  @author Platine Developers Team
44
 *  @copyright  Copyright (c) 2020
45
 *  @license    http://opensource.org/licenses/MIT  MIT License
46
 *  @link   https://www.platine-php.com
47
 *  @version 1.0.0
48
 *  @filesource
49
 */
50
51
declare(strict_types=1);
52
53
namespace Platine\Upload\File;
54
55
use finfo;
56
use RuntimeException;
57
use SplFileInfo;
58
59
/**
60
 * @class File
61
 * @package Platine\Upload\File
62
 */
63
class File extends SplFileInfo implements FileInterface
64
{
65
    /**
66
     * Factory used to create new instance
67
     * @var callable|null
68
     */
69
    protected static $factory = null;
70
71
    /**
72
     * The file name
73
     * @var string
74
     */
75
    protected string $name;
76
77
    /**
78
     * The file extension
79
     * @var string
80
     */
81
    protected string $extension;
82
83
    /**
84
     * The file mime type
85
     * @var string
86
     */
87
    protected string $mimeType = '';
88
89
    /**
90
     * The client file name
91
     * @var string
92
     */
93
    protected string $clientName = '';
94
95
    /**
96
     * The upload status
97
     * @var int
98
     */
99
    protected int $error = UPLOAD_ERR_OK;
100
101
102
    /**
103
     * Create new instance
104
     * @param string $filePath the file absolute path
105
     * @param string $clientName the client filename
106
     * @param string|null $name the desired new name
107
     * @param int $error
108
     */
109
    public function __construct(
110
        string $filePath,
111
        string $clientName = '',
112
        ?string $name = null,
113
        int $error = UPLOAD_ERR_OK
114
    ) {
115
        $this->clientName = $clientName;
116
        $this->error = $error;
117
        $newName = $name === null ? $filePath : $name;
118
119
        $this->setName(pathinfo($newName, PATHINFO_FILENAME));
0 ignored issues
show
Bug introduced by
It seems like pathinfo($newName, Plati...File\PATHINFO_FILENAME) can also be of type array; however, parameter $name of Platine\Upload\File\File::setName() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

119
        $this->setName(/** @scrutinizer ignore-type */ pathinfo($newName, PATHINFO_FILENAME));
Loading history...
120
        $this->setExtension(pathinfo($newName, PATHINFO_EXTENSION));
0 ignored issues
show
Bug introduced by
It seems like pathinfo($newName, Plati...ile\PATHINFO_EXTENSION) can also be of type array; however, parameter $name of Platine\Upload\File\File::setExtension() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

120
        $this->setExtension(/** @scrutinizer ignore-type */ pathinfo($newName, PATHINFO_EXTENSION));
Loading history...
121
122
        parent::__construct($filePath);
123
    }
124
125
    /**
126
    * {@inheritdoc}
127
    */
128
    public function getExtension(): string
129
    {
130
        return $this->extension;
131
    }
132
133
    /**
134
    * {@inheritdoc}
135
    */
136
    public function setExtension(string $name): self
137
    {
138
        $this->extension = strtolower($name);
139
140
        return $this;
141
    }
142
143
    /**
144
    * {@inheritdoc}
145
    */
146
    public function getFullName(): string
147
    {
148
        return empty($this->extension) ?
149
                $this->name
150
                : sprintf('%s.%s', $this->name, $this->extension);
151
    }
152
153
    /**
154
    * {@inheritdoc}
155
    */
156
    public function getMD5(): string
157
    {
158
        $hash = md5_file($this->getPathname());
159
        return $hash === false ? '' : $hash;
160
    }
161
162
    /**
163
    * {@inheritdoc}
164
    */
165
    public function getPathname(): string
166
    {
167
        return parent::getPathname();
168
    }
169
170
    /**
171
    * {@inheritdoc}
172
    */
173
    public function getSize(): int
174
    {
175
        return parent::getSize();
176
    }
177
178
    /**
179
    * {@inheritdoc}
180
    */
181
    public function getMimeType(): string
182
    {
183
        if (empty($this->mimeType)) {
184
            $finfo = new finfo(FILEINFO_MIME);
185
            $mimeType = $finfo->file($this->getPathname());
186
            if ($mimeType !== false) {
187
                $mimetypeParts = preg_split('/\s*[;,]\s*/', $mimeType);
188
                if (is_array($mimetypeParts)) {
0 ignored issues
show
introduced by
The condition is_array($mimetypeParts) is always true.
Loading history...
189
                    $this->mimeType = strtolower($mimetypeParts[0]);
190
                }
191
            }
192
            unset($finfo);
193
        }
194
195
        return $this->mimeType;
196
    }
197
198
    /**
199
    * {@inheritdoc}
200
    */
201
    public function getName(): string
202
    {
203
        return $this->name;
204
    }
205
206
    /**
207
    * {@inheritdoc}
208
    */
209
    public function setName(string $name): self
210
    {
211
        $cleanName = preg_replace('/[^A-Za-z0-9\.]+/', '_', $name);
212
        if ($cleanName !== null) {
213
            $filename = basename($cleanName);
214
            $this->name = $filename;
215
        }
216
217
        return $this;
218
    }
219
220
    /**
221
    * {@inheritdoc}
222
    */
223
    public function getError(): int
224
    {
225
        return $this->error;
226
    }
227
228
    /**
229
     * Return the client name
230
     * @return string
231
     */
232
    public function getClientName(): string
233
    {
234
        return $this->clientName;
235
    }
236
237
238
    /**
239
     * Set the factory used to create new instance
240
     * @param callable|null $callable
241
     * @return void
242
     */
243
    public static function setFactory(?callable $callable = null): void
244
    {
245
        static::$factory = $callable;
246
    }
247
248
    /**
249
     * Create new instance of this class
250
     * @param string $tmpName
251
     * @param string $clientName
252
     * @param string|null $name
253
     * @param int $error
254
     * @return self
255
     */
256
    public static function create(
257
        string $tmpName,
258
        string $clientName = '',
259
        ?string $name = null,
260
        int $error = UPLOAD_ERR_OK
261
    ): self {
262
        if (static::$factory !== null) {
263
            $file = call_user_func_array(static::$factory, [$tmpName, $clientName, $name, $error]);
264
265
            if (!$file instanceof File) {
266
                throw new RuntimeException(sprintf(
267
                    'The File factory must return an instance of [%s]',
268
                    File::class
269
                ));
270
            }
271
272
            return $file;
273
        }
274
275
        return new self($tmpName, $clientName, $name, $error);
276
    }
277
}
278