Passed
Pull Request — master (#721)
by Florian
02:40
created

AdminLteServiceProvider::loadViews()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 4
ccs 3
cts 3
cp 1
crap 1
rs 10
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 30
    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 30
        });
36 30
    }
37
38
    /**
39
     * Bootstrap the package's services.
40
     *
41
     * @return void
42
     */
43 30
    public function boot(Factory $view, Dispatcher $events, Repository $config)
44
    {
45 30
        $this->loadViews();
46 30
        $this->loadTranslations();
47 30
        $this->loadConfig();
48 30
        $this->registerCommands();
49 30
        $this->registerViewComposers($view);
50 30
        $this->registerMenu($events, $config);
51 30
        $this->loadComponents();
52 30
    }
53
54
    /**
55
     * Load the package views.
56
     *
57
     * @return void
58
     */
59 30
    private function loadViews()
60
    {
61 30
        $viewsPath = $this->packagePath('resources/views');
62 30
        $this->loadViewsFrom($viewsPath, 'adminlte');
63 30
    }
64
65
    /**
66
     * Load the package translations.
67
     *
68
     * @return void
69
     */
70 30
    private function loadTranslations()
71
    {
72 30
        $translationsPath = $this->packagePath('resources/lang');
73 30
        $this->loadTranslationsFrom($translationsPath, 'adminlte');
74 30
    }
75
76
    /**
77
     * Load the package config.
78
     *
79
     * @return void
80
     */
81 30
    private function loadConfig()
82
    {
83 30
        $configPath = $this->packagePath('config/adminlte.php');
84 30
        $this->mergeConfigFrom($configPath, 'adminlte');
85 30
    }
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
     */
93 30
    private function packagePath($path)
94
    {
95 30
        return __DIR__."/../$path";
96
    }
97
98
    /**
99
     * Register the package's artisan commands.
100
     *
101
     * @return void
102
     */
103 30
    private function registerCommands()
104
    {
105 30
        $this->commands([
106 30
            AdminLteInstallCommand::class,
107
            AdminLteStatusCommand::class,
108
            AdminLteUpdateCommand::class,
109
            AdminLtePluginCommand::class,
110
        ]);
111 30
    }
112
113
    /**
114
     * Register the package's view composers.
115
     *
116
     * @return void
117
     */
118 30
    private function registerViewComposers(Factory $view)
119
    {
120 30
        $view->composer('adminlte::page', AdminLteComposer::class);
121 30
    }
122
123
    /**
124
     * Register the menu events handlers.
125
     *
126
     * @return void
127
     */
128 30
    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
133 30
        $events->listen(
134 30
            BuildingMenu::class,
135
            function (BuildingMenu $event) use ($config) {
136 1
                $menu = $config->get('adminlte.menu', []);
137 1
                $menu = is_array($menu) ? $menu : [];
138 1
                $event->menu->add(...$menu);
139 30
            }
140
        );
141 30
    }
142
143
    /**
144
     * Load the blade view components.
145
     *
146
     * @return void
147
     */
148 30
    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 30
        $canLoadComponents = method_exists(
154 30
            'Illuminate\Support\ServiceProvider',
155 30
            'loadViewComponentsAs'
156
        );
157
158 30
        if (! $canLoadComponents) {
159
            return;
160
        }
161
162
        // Form components.
163
164 30
        $this->loadViewComponentsAs('adminlte', [
165 30
            Components\DateRange::class,
166
            Components\Input::class,
167
            Components\InputColor::class,
168
            Components\InputDate::class,
169
            Components\InputFile::class,
170
            Components\InputSlider::class,
171
            Components\InputSwitch::class,
172
            Components\InputTag::class,
173
            Components\Option::class,
174
            Components\Select::class,
175
            Components\Select2::class,
176
            Components\SelectIcon::class,
177
            Components\Submit::class,
178
            Components\Textarea::class,
179
            Components\TextEditor::class,
180
        ]);
181
182
        // Widgets components.
183
184 30
        $this->loadViewComponentsAs('adminlte', [
185 30
            Components\Alert::class,
186
            Components\Callout::class,
187
            Components\Card::class,
188
            Components\Datatable::class,
189
            Components\InfoBox::class,
190
            Components\Modal::class,
191
            Components\ProfileFlat::class,
192
            Components\ProfileFlatItem::class,
193
            Components\ProfileWidget::class,
194
            Components\ProfileWidgetItem::class,
195
            Components\Progress::class,
196
            Components\SmallBox::class,
197
        ]);
198 30
    }
199
}
200