Completed
Push — master ( f22245...5ea4de )
by recca
03:19
created

Options::createLocalFileSystem()   B

Complexity

Conditions 4
Paths 5

Size

Total Lines 26
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 4.0023

Importance

Changes 0
Metric Value
cc 4
eloc 17
nc 5
nop 3
dl 0
loc 26
ccs 18
cts 19
cp 0.9474
crap 4.0023
rs 8.5806
c 0
b 0
f 0
1
<?php
2
3
namespace Recca0120\Elfinder;
4
5
use Closure;
6
use ArrayObject;
7
use Illuminate\Support\Arr;
8
use Illuminate\Http\Request;
9
use Illuminate\Filesystem\Filesystem;
10
use Illuminate\Contracts\Routing\UrlGenerator;
11
12
class Options extends ArrayObject
13
{
14
    /**
15
     * $request.
16
     *
17
     * @var \Illuminate\Http\Request
18
     */
19
    protected $request;
20
21
    /**
22
     * $files.
23
     *
24
     * @var \Illuminate\Filesystem\Filesystem
25
     */
26
    protected $files;
27
28
    /**
29
     * $request.
30
     *
31
     * @var \Illuminate\Contracts\Routing\UrlGenerator
32
     */
33
    protected $urlGenerator;
34
35
    /**
36
     * $config.
37
     *
38
     * @var array
39
     */
40
    protected $config;
41
42
    /**
43
     * $options.
44
     *
45
     * @var array
46
     */
47
    protected $options;
48
49
    /**
50
     * __construct.
51
     *
52
     * @param \Illuminate\Http\Request $request
53
     * @param \Illuminate\Filesystem\Filesystem $files
54
     * @param \Illuminate\Contracts\Routing\UrlGenerator $urlGenerator
55
     * @param \Recca0120\Elfinder\LaravelSession $session
56
     * @param array $config
57
     */
58 2
    public function __construct(Request $request, Filesystem $files, UrlGenerator $urlGenerator, LaravelSession $session, $config = [])
0 ignored issues
show
Bug introduced by
You have injected the Request via parameter $request. This is generally not recommended as there might be multiple instances during a request cycle (f.e. when using sub-requests). Instead, it is recommended to inject the RequestStack and retrieve the current request each time you need it via getCurrentRequest().
Loading history...
59
    {
60 2
        $this->request = $request;
61 2
        $this->files = $files;
62 2
        $this->urlGenerator = $urlGenerator;
63 2
        $this->config = $config;
64 2
        $this->options = Arr::get($this->config, 'options', []);
0 ignored issues
show
Documentation Bug introduced by
It seems like \Illuminate\Support\Arr:...ig, 'options', array()) of type * is incompatible with the declared type array of property $options.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
65
66 2
        parent::__construct(array_merge($this->options, [
67 2
            'roots' => $this->getRoots(),
68 2
            'session' => $session,
69 2
        ]));
70 2
    }
71
72
    /**
73
     * getRoots.
74
     *
75
     * @return array
76
     */
77 2
    protected function getRoots()
78
    {
79 2
        $accessControl = Arr::get($this->config, 'accessControl');
80 2
        $roots = Arr::get($this->options, 'roots', []);
81 2
        $user = $this->request->user();
82
83 2
        return array_filter(array_map(function ($disk) use ($user, $accessControl) {
84 1
            $disk['driver'] = empty($disk['driver']) === true ? 'LocalFileSystem' : $disk['driver'];
85 1
            $disk['autoload'] = true;
86
87 1
            if (empty($disk['path']) === false && ($disk['path'] instanceof Closure) === true) {
88
                $disk['path'] = call_user_func($disk['path']);
89
            }
90
91 1
            return call_user_func_array([$this, 'create'.$disk['driver']], [$disk, $user, $accessControl]);
92 2
        }, $roots));
93
    }
94
95
    /**
96
     * createLocalFileSystem.
97
     *
98
     * @param  array $disk
99
     * @param  mixed $user
100
     * @param  mixed $accessControl
101
     * @return array
102
     */
103 1
    protected function createLocalFileSystem($disk, $user, $accessControl = null)
104
    {
105 1
        if (strpos($disk['path'], '{user_id}') !== -1) {
106 1
            if (is_null($user) === true) {
107
                return;
108
            }
109
110 1
            $userId = $user->id;
111 1
            $disk['path'] = str_replace('{user_id}', $userId, $disk['path']);
112 1
            $disk['URL'] = str_replace('{user_id}', $userId, $disk['URL']);
113 1
        }
114
115 1
        if ($this->files->exists($disk['path']) === false) {
116 1
            $this->files->makeDirectory($disk['path'], 0755, true);
117 1
        }
118
119 1
        $disk['URL'] = $this->urlGenerator->to($disk['URL']);
120
121 1
        return array_merge([
122 1
            'mimeDetect' => 'internal',
123 1
            'utf8fix' => true,
124 1
            'tmbCrop' => false,
125 1
            'tmbBgColor' => 'transparent',
126 1
            'accessControl' => $accessControl,
127 1
        ], $disk);
128
    }
129
}
130