NovaTranslationServiceProvider   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 117
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 9

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 9
dl 0
loc 117
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A boot() 0 19 3
A bootPackage() 0 15 1
A isNovaInstalled() 0 4 1
A bootRoutes() 0 10 2
A serveNova() 0 10 1
A loadNovaTranslations() 0 14 2
1
<?php
2
3
namespace BBSLab\NovaTranslation;
4
5
use BBSLab\NovaTranslation\Http\Middleware\Authorize;
6
use BBSLab\NovaTranslation\Http\View\Composers\LocaleComposer;
7
use BBSLab\NovaTranslation\Models\Locale;
8
use BBSLab\NovaTranslation\Models\Observers\LocaleObserver;
9
use BBSLab\NovaTranslation\Models\Observers\TranslatablePivotObserver;
10
use BBSLab\NovaTranslation\Resources\Locale as LocaleResource;
11
use Illuminate\Database\Eloquent\Relations\Pivot;
12
use Illuminate\Support\Facades\Route;
13
use Illuminate\Support\Facades\View;
14
use Illuminate\Support\ServiceProvider as BaseServiceProvider;
15
use Laravel\Nova\Events\ServingNova;
16
use Laravel\Nova\Nova;
17
18
class NovaTranslationServiceProvider extends BaseServiceProvider
19
{
20
    /**
21
     * Package ID.
22
     *
23
     * @var string
24
     */
25
    const PACKAGE_ID = 'nova-translation';
26
27
    /**
28
     * Bootstrap Kernel.
29
     *
30
     * @return void
31
     */
32
    public function boot()
33
    {
34
        $this->bootPackage();
35
36
        Locale::observe(LocaleObserver::class);
37
38
        if ($this->isNovaInstalled()) {
39
            $this->app->booted(function () {
40
                $this->bootRoutes();
41
            });
42
43
            if (config('nova-translation.use_default_locale_resource', false) === true) {
44
                LocaleResource::$group = config('nova-translation.default_locale_resource_group');
45
                Nova::resources([LocaleResource::class]);
46
            }
47
48
            $this->serveNova();
49
        }
50
    }
51
52
    /**
53
     * Boot Laravel package.
54
     *
55
     * @return void
56
     */
57
    protected function bootPackage()
58
    {
59
        $this->mergeConfigFrom(__DIR__.'/../config/config.php', static::PACKAGE_ID);
60
        $this->loadMigrationsFrom(__DIR__.'/../database/migrations');
61
        $this->loadTranslationsFrom(__DIR__.'/../resources/lang', static::PACKAGE_ID);
62
        $this->loadViewsFrom(__DIR__.'/../resources/views', static::PACKAGE_ID);
63
64
        View::composer(static::PACKAGE_ID.'::locale-dropdown', LocaleComposer::class);
65
66
        $this->publishes([
67
            __DIR__.'/../config/config.php' => config_path(static::PACKAGE_ID.'.php'),
68
        ]);
69
70
        Pivot::observe(TranslatablePivotObserver::class);
71
    }
72
73
    /**
74
     * Check if Laravel Nova is installed.
75
     *
76
     * @return bool
77
     */
78
    protected function isNovaInstalled()
79
    {
80
        return class_exists('Laravel\Nova\Nova');
81
    }
82
83
    /**
84
     * Register the tool's routes.
85
     *
86
     * @return void
87
     */
88
    protected function bootRoutes()
89
    {
90
        if ($this->app->routesAreCached()) {
0 ignored issues
show
Bug introduced by
The method routesAreCached() does not seem to exist on object<Illuminate\Contra...Foundation\Application>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
91
            return;
92
        }
93
94
        Route::middleware(['nova', Authorize::class])
95
            ->prefix('nova-vendor/'.static::PACKAGE_ID)
96
            ->group(__DIR__.'/../routes/api.php');
97
    }
98
99
    /**
100
     * Serve Laravel Nova.
101
     *
102
     * @return void
103
     */
104
    protected function serveNova()
105
    {
106
        Nova::serving(function (ServingNova $event) {
0 ignored issues
show
Unused Code introduced by
The parameter $event is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
107
            $this->loadNovaTranslations();
108
109
            Nova::provideToScript([
110
                'locale' => app()->getLocale(),
111
            ]);
112
        });
113
    }
114
115
    /**
116
     * Load prefixed Nova translations.
117
     *
118
     * @return void
119
     */
120
    protected function loadNovaTranslations()
121
    {
122
        $file = __DIR__.'/../resources/lang/'.app()->getLocale().'.json';
123
        if (! file_exists($file)) {
124
            $file = __DIR__.'/../resources/lang/en.json';
125
        }
126
127
        $translations = json_decode(file_get_contents($file), true);
128
        $translations = collect($translations)->mapWithKeys(function ($value, $key) {
129
            return [static::PACKAGE_ID.'::'.$key => $value];
130
        })->toArray();
131
132
        \Laravel\Nova\Nova::translations($translations);
133
    }
134
}
135