ChuckcmsServiceProvider   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 100
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 52
c 3
b 0
f 0
dl 0
loc 100
rs 10
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A register() 0 29 1
A doPublishing() 0 17 2
A boot() 0 17 2
A getMigrationFileName() 0 12 1
1
<?php
2
3
namespace Chuckbe\Chuckcms;
4
5
use Chuckbe\Chuckcms\Commands\GenerateRolesPermissions;
6
use Chuckbe\Chuckcms\Commands\GenerateSite;
7
use Chuckbe\Chuckcms\Commands\GenerateSitemap;
8
use Chuckbe\Chuckcms\Commands\GenerateSuperAdmin;
9
use Illuminate\Filesystem\Filesystem;
10
use Illuminate\Routing\Router;
11
use Illuminate\Support\Collection;
12
use Illuminate\Support\ServiceProvider;
13
use Spatie\Permission\Middlewares\PermissionMiddleware;
14
use Spatie\Permission\Middlewares\RoleMiddleware;
15
use Spatie\Permission\Middlewares\RoleOrPermissionMiddleware;
16
17
class ChuckcmsServiceProvider extends ServiceProvider
18
{
19
    /**
20
     * Bootstrap the application services.
21
     *
22
     * @return void
23
     */
24
    public function boot()
25
    {
26
        $this->doPublishing();
27
28
        $this->loadMigrationsFrom(__DIR__.'/../database/migrations');
29
30
        $router = $this->app->make(Router::class);
31
        $router->aliasMiddleware('role', RoleMiddleware::class);
32
        $router->aliasMiddleware('permission', PermissionMiddleware::class);
33
        $router->aliasMiddleware('role_or_permission', RoleOrPermissionMiddleware::class);
34
35
        if ($this->app->runningInConsole()) {
36
            $this->commands([
37
                GenerateSuperAdmin::class,
38
                GenerateSite::class,
39
                GenerateSitemap::class,
40
                GenerateRolesPermissions::class,
41
            ]);
42
        }
43
    }
44
45
    /**
46
     * Register the application services.
47
     *
48
     * @return void
49
     */
50
    public function register()
51
    {
52
        $this->app['App\User'] = $this->app['Chuckbe\Chuckcms\Models\User'];
53
54
        $this->loadViewsFrom(__DIR__.'/views', 'chuckcms');
55
        // publish error views + publish updated lfm views
56
57
        $this->mergeConfigFrom(__DIR__.'/../config/chuckcms.php', 'chuckcms');
58
        $this->mergeConfigFrom(__DIR__.'/../config/menu.php', 'menu');
59
        $this->mergeConfigFrom(__DIR__.'/../config/lfm.php', 'lfm');
60
        $this->mergeConfigFrom(__DIR__.'/../config/lang.php', 'lang');
61
62
        $this->app->register('Chuckbe\Chuckcms\Providers\ChuckSiteServiceProvider');
63
        $this->app->register('Chuckbe\Chuckcms\Providers\ChuckTemplateServiceProvider');
64
        $this->app->register('Chuckbe\Chuckcms\Providers\ChuckConfigServiceProvider');
65
        $this->app->register('Chuckbe\Chuckcms\Providers\ChuckServiceProvider');
66
        $this->app->register('Chuckbe\Chuckcms\Providers\ChuckMenuServiceProvider');
67
        $this->app->register('Chuckbe\Chuckcms\Providers\ChuckRepeaterServiceProvider');
68
        $this->app->register('Chuckbe\Chuckcms\Providers\ChuckDashboardSidebarViewComposerServiceProvider');
69
70
        $this->app->register('Msurguy\Honeypot\HoneypotServiceProvider');
71
72
        $loader = \Illuminate\Foundation\AliasLoader::getInstance();
73
        $loader->alias('ChuckSite', 'Chuckbe\Chuckcms\Facades\Site');
74
        $loader->alias('Chuck', 'Chuckbe\Chuckcms\Facades\Chuck');
75
        $loader->alias('ChuckRepeater', 'Chuckbe\Chuckcms\Facades\Repeater');
76
        $loader->alias('ChuckTemplate', 'Chuckbe\Chuckcms\Facades\Template');
77
        $loader->alias('ChuckMenu', 'Chuckbe\Chuckcms\Facades\Menu');
78
        $loader->alias('Honeypot', 'Msurguy\Honeypot\HoneypotFacade');
79
    }
80
81
    public function doPublishing()
82
    {
83
        if (!function_exists('config_path')) {
84
            // function not available and 'publish' not relevant in Lumen (credit: Spatie)
85
            return;
86
        }
87
88
        $this->publishes([
89
            __DIR__.'/resources' => public_path('chuckbe/chuckcms'),
90
        ], 'chuckcms-public');
91
92
        $this->publishes([
93
            __DIR__.'/../config/chuckcms.php' => config_path('chuckcms.php'),
94
            __DIR__.'/../config/menu.php'     => config_path('menu.php'),
95
            __DIR__.'/../config/lfm.php'      => config_path('lfm.php'),
96
            __DIR__.'/../config/lang.php'     => config_path('lang.php'),
97
        ], 'chuckcms-config');
98
    }
99
100
    /**
101
     * Returns existing migration file if found, else uses the current timestamp.
102
     *
103
     * @return string
104
     */
105
    public function getMigrationFileName($migrationFileName): string
106
    {
107
        $timestamp = date('Y_m_d_His');
108
109
        $filesystem = $this->app->make(Filesystem::class);
110
111
        return Collection::make($this->app->databasePath().DIRECTORY_SEPARATOR.'migrations'.DIRECTORY_SEPARATOR)
112
            ->flatMap(function ($path) use ($filesystem, $migrationFileName) {
113
                return $filesystem->glob($path.'*_'.$migrationFileName);
114
            })
115
            ->push($this->app->databasePath()."/migrations/{$timestamp}_{$migrationFileName}")
116
            ->first();
117
    }
118
}
119