Completed
Push — master ( 6707ad...d7d370 )
by recca
03:24
created

Options::createLocalFileSystemDriver()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 3
dl 0
loc 4
ccs 2
cts 2
cp 1
crap 1
rs 10
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 1
            $method = 'create'.$disk['driver'].'Driver';
91 1
            $method = method_exists($this, $method) === true ? $method : 'createDefaultDriver';
92
93 1
            return call_user_func_array([$this, $method], [$disk, $user, $accessControl]);
94 2
        }, $roots));
95
    }
96
97
    /**
98
     * createDefaultDriver.
99
     *
100
     * @param array $disk
101
     * @param mixed $user
102
     * @param mixed $accessControl
103
     * @param bool $makeDirectory
104
     * @return array
105
     */
106 1
    protected function createDefaultDriver($disk, $user, $accessControl = null, $makeDirectory = false)
107
    {
108 1
        if (strpos($disk['path'], '{user_id}') !== -1) {
109 1
            if (is_null($user) === true) {
110
                return;
111
            }
112
113 1
            $userId = $user->id;
114 1
            $disk['path'] = str_replace('{user_id}', $userId, $disk['path']);
115 1
            $disk['URL'] = str_replace('{user_id}', $userId, $disk['URL']);
116 1
        }
117
118 1
        if ($makeDirectory === true && $this->files->exists($disk['path']) === false) {
119 1
            $this->files->makeDirectory($disk['path'], 0755, true);
120 1
        }
121
122 1
        $disk['URL'] = $this->urlGenerator->to($disk['URL']);
123
124 1
        return array_merge([
125 1
            'accessControl' => $accessControl,
126 1
            'autoload' => true,
127 1
            'mimeDetect' => 'internal',
128 1
            'tmbBgColor' => 'transparent',
129 1
            'tmbCrop' => false,
130 1
            'utf8fix' => true,
131 1
        ], $disk);
132
    }
133
134
    /**
135
     * createLocalFileSystemDriver.
136
     *
137
     * @param  array $disk
138
     * @param  mixed $user
139
     * @param  mixed $accessControl
140
     * @return array
141
     */
142 1
    protected function createLocalFileSystemDriver($disk, $user, $accessControl = null)
143
    {
144 1
        return $this->createDefaultDriver($disk, $user, $accessControl, true);
145
    }
146
147
    /**
148
     * createTrashDriver.
149
     *
150
     * @param  array $disk
151
     * @param  mixed $user
152
     * @param  mixed $accessControl
153
     * @return array
154
     */
155
    protected function createTrashDriver($disk, $user, $accessControl = null)
156
    {
157
        return $this->createDefaultDriver(array_merge([
158
            'id' => 1,
159
        ], $disk), $user, $accessControl, true);
160
    }
161
}
162