Completed
Push — master ( 5b123a...5e7977 )
by Freek
01:21
created

FileAdderFactory::createFromDisk()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 3
1
<?php
2
3
namespace Spatie\MediaLibrary\FileAdder;
4
5
use Illuminate\Support\Collection;
6
use Illuminate\Database\Eloquent\Model;
7
use Spatie\MediaLibrary\Helpers\RemoteFile;
8
use Spatie\MediaLibrary\Exceptions\FileCannotBeAdded\RequestDoesNotHaveFile;
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