Completed
Push — master ( 136bb0...f22245 )
by recca
03:44 queued 25s
created

Options::getRoots()   A

Complexity

Conditions 4
Paths 1

Size

Total Lines 17
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 4.0119

Importance

Changes 0
Metric Value
cc 4
eloc 11
nc 1
nop 0
dl 0
loc 17
rs 9.2
c 0
b 0
f 0
ccs 10
cts 11
cp 0.9091
crap 4.0119
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 1
    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 1
        $this->request = $request;
61 1
        $this->files = $files;
62 1
        $this->urlGenerator = $urlGenerator;
63 1
        $this->config = $config;
64 1
        $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 1
        parent::__construct(array_merge($this->options, [
67 1
            'roots' => $this->getRoots(),
68 1
            'session' => $session,
69
        ]));
70 1
    }
71
72
    /**
73
     * getRoots.
74
     *
75
     * @return array
76
     */
77 1
    protected function getRoots()
78
    {
79 1
        $accessControl = Arr::get($this->config, 'accessControl');
80 1
        $roots = Arr::get($this->options, 'roots', []);
81 1
        $user = $this->request->user();
82
83 1
        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 1
        }, $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
        }
114
115 1
        if ($this->files->exists($disk['path']) === false) {
116 1
            $this->files->makeDirectory($disk['path'], 0755, true);
117
        }
118
119 1
        $disk['URL'] = $this->urlGenerator->to($disk['URL']);
120
121 1
        return array_merge([
122 1
            'mimeDetect' => 'internal',
123
            'utf8fix' => true,
124
            'tmbCrop' => false,
125 1
            'tmbBgColor' => 'transparent',
126 1
            'accessControl' => $accessControl,
127 1
        ], $disk);
128
    }
129
}
130