FileAdderFactory   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 3
dl 0
loc 59
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 6 1
A createFromDisk() 0 6 1
A createFromRequest() 0 4 1
A createMultipleFromRequest() 0 24 3
A createAllFromRequest() 0 6 1
1
<?php
2
3
namespace Spatie\MediaLibrary\FileAdder;
4
5
use Illuminate\Database\Eloquent\Model;
6
use Illuminate\Support\Collection;
7
use Spatie\MediaLibrary\Exceptions\FileCannotBeAdded\RequestDoesNotHaveFile;
8
use Spatie\MediaLibrary\Helpers\RemoteFile;
9
10
class FileAdderFactory
11
{
12
    /**
13
     * @param \Illuminate\Database\Eloquent\Model $subject
14
     * @param string|\Symfony\Component\HttpFoundation\File\UploadedFile $file
15
     *
16
     * @return \Spatie\MediaLibrary\FileAdder\FileAdder
17
     */
18
    public static function create(Model $subject, $file)
19
    {
20
        return app(FileAdder::class)
21
            ->setSubject($subject)
22
            ->setFile($file);
23
    }
24
25
    public static function createFromDisk(Model $subject, string $key, string $disk): FileAdder
26
    {
27
        return app(FileAdder::class)
28
            ->setSubject($subject)
29
            ->setFile(new RemoteFile($key, $disk));
30
    }
31
32
    public static function createFromRequest(Model $subject, string $key): FileAdder
33
    {
34
        return static::createMultipleFromRequest($subject, [$key])->first();
35
    }
36
37
    public static function createMultipleFromRequest(Model $subject, array $keys = []): Collection
38
    {
39
        return collect($keys)
40
            ->map(function (string $key) use ($subject) {
41
                $search = ['[', ']', '"', "'"];
42
                $replace = ['.', '', '', ''];
43
44
                $key = str_replace($search, $replace, $key);
45
46
                if (! request()->hasFile($key)) {
47
                    throw RequestDoesNotHaveFile::create($key);
48
                }
49
50
                $files = request()->file($key);
51
52
                if (! is_array($files)) {
53
                    return static::create($subject, $files);
54
                }
55
56
                return array_map(function ($file) use ($subject) {
57
                    return static::create($subject, $file);
58
                }, $files);
59
            })->flatten();
60
    }
61
62
    public static function createAllFromRequest(Model $subject): Collection
63
    {
64
        $fileKeys = array_keys(request()->allFiles());
65
66
        return static::createMultipleFromRequest($subject, $fileKeys);
67
    }
68
}
69