Passed
Pull Request — master (#832)
by Florian
09:14
created

AdminLteServiceProvider::loadComponents()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 51
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 32
nc 2
nop 0
dl 0
loc 51
ccs 0
cts 0
cp 0
crap 6
rs 9.408
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace JeroenNoten\LaravelAdminLte;
4
5
use Illuminate\Contracts\Config\Repository;
6
use Illuminate\Contracts\Container\Container;
7
use Illuminate\Contracts\Events\Dispatcher;
8
use Illuminate\Contracts\View\Factory;
9
use Illuminate\Support\ServiceProvider as BaseServiceProvider;
10
use JeroenNoten\LaravelAdminLte\Console\AdminLteInstallCommand;
11
use JeroenNoten\LaravelAdminLte\Console\AdminLtePluginCommand;
12
use JeroenNoten\LaravelAdminLte\Console\AdminLteStatusCommand;
13
use JeroenNoten\LaravelAdminLte\Console\AdminLteUpdateCommand;
14
use JeroenNoten\LaravelAdminLte\Events\BuildingMenu;
15
use JeroenNoten\LaravelAdminLte\Http\ViewComposers\AdminLteComposer;
16
17
class AdminLteServiceProvider extends BaseServiceProvider
18
{
19
    /**
20
     * Register the package services.
21
     *
22
     * @return void
23
     */
24 29
    public function register()
25
    {
26
        // Bind a singleton instance of the AdminLte class into the service
27
        // container.
28
29
        $this->app->singleton(AdminLte::class, function (Container $app) {
30 3
            return new AdminLte(
31 3
                $app['config']['adminlte.filters'],
32 3
                $app['events'],
33
                $app
34
            );
35 29
        });
36 29
    }
37
38
    /**
39
     * Bootstrap the package's services.
40
     *
41
     * @return void
42
     */
43 29
    public function boot(Factory $view, Dispatcher $events, Repository $config)
44
    {
45 29
        $this->loadViews();
46 29
        $this->loadTranslations();
47 29
        $this->loadConfig();
48 29
        $this->registerCommands();
49 29
        $this->registerViewComposers($view);
50 29
        $this->registerMenu($events, $config);
51 29
        $this->loadComponents();
52
    }
53
54
    /**
55
     * Load the package views.
56
     *
57
     * @return void
58 29
     */
59
    private function loadViews()
60 29
    {
61 29
        $viewsPath = $this->packagePath('resources/views');
62 29
        $this->loadViewsFrom($viewsPath, 'adminlte');
63
    }
64
65
    /**
66
     * Load the package translations.
67
     *
68
     * @return void
69 29
     */
70
    private function loadTranslations()
71 29
    {
72 29
        $translationsPath = $this->packagePath('resources/lang');
73 29
        $this->loadTranslationsFrom($translationsPath, 'adminlte');
74
    }
75
76
    /**
77
     * Load the package config.
78
     *
79
     * @return void
80 29
     */
81
    private function loadConfig()
82 29
    {
83 29
        $configPath = $this->packagePath('config/adminlte.php');
84 29
        $this->mergeConfigFrom($configPath, 'adminlte');
85
    }
86
87
    /**
88
     * Get the absolute path to some package resource.
89
     *
90
     * @param string $path The relative path to the resource
91
     * @return string
92 29
     */
93
    private function packagePath($path)
94 29
    {
95
        return __DIR__."/../$path";
96
    }
97
98
    /**
99
     * Register the package's artisan commands.
100
     *
101
     * @return void
102 29
     */
103
    private function registerCommands()
104 29
    {
105 29
        $this->commands([
106
            AdminLteInstallCommand::class,
107
            AdminLteStatusCommand::class,
108
            AdminLteUpdateCommand::class,
109
            AdminLtePluginCommand::class,
110 29
        ]);
111
    }
112
113
    /**
114
     * Register the package's view composers.
115
     *
116
     * @return void
117 29
     */
118
    private function registerViewComposers(Factory $view)
119 29
    {
120 29
        $view->composer('adminlte::page', AdminLteComposer::class);
121
    }
122
123
    /**
124
     * Register the menu events handlers.
125
     *
126
     * @return void
127 29
     */
128
    private static function registerMenu(Dispatcher $events, Repository $config)
129
    {
130
        // Register a handler for the BuildingMenu event, this handler will add
131
        // the menu defined on the config file to the menu builder instance.
132 29
133 29
        $events->listen(
134
            BuildingMenu::class,
135 1
            function (BuildingMenu $event) use ($config) {
136 1
                $menu = $config->get('adminlte.menu', []);
137 1
                $menu = is_array($menu) ? $menu : [];
138 29
                $event->menu->add(...$menu);
139
            }
140 29
        );
141
    }
142
143
    /**
144
     * Load the blade view components.
145
     *
146
     * @return void
147
     */
148
    private function loadComponents()
149
    {
150
        // Support of x-components is only available for Laravel >= 7.x
151
        // versions. So, we check if we can load components.
152
153
        $canLoadComponents = method_exists(
154
            'Illuminate\Support\ServiceProvider',
155
            'loadViewComponentsAs'
156
        );
157
158
        if (! $canLoadComponents) {
159
            return;
160
        }
161
162
        // Form components.
163
164
        $this->loadViewComponentsAs('adminlte', [
165
            Components\Button::class,
166
            Components\DateRange::class,
167
            Components\Input::class,
168
            Components\InputColor::class,
169
            Components\InputDate::class,
170
            Components\InputFile::class,
171
            Components\InputSlider::class,
172
            Components\InputSwitch::class,
173
            Components\Select::class,
174
            Components\Select2::class,
175
            Components\SelectBs::class,
176
            Components\Textarea::class,
177
            Components\TextEditor::class,
178
        ]);
179
180
        // Tool components.
181
182
        $this->loadViewComponentsAs('adminlte', [
183
            Components\Datatable::class,
184
            Components\Modal::class,
185
        ]);
186
187
        // Widgets components.
188
189
        $this->loadViewComponentsAs('adminlte', [
190
            Components\Alert::class,
191
            Components\Callout::class,
192
            Components\Card::class,
193
            Components\InfoBox::class,
194
            Components\ProfileColItem::class,
195
            Components\ProfileRowItem::class,
196
            Components\ProfileWidget::class,
197
            Components\Progress::class,
198
            Components\SmallBox::class,
199
        ]);
200
    }
201
}
202