1<?php namespace GeneaLabs\LaravelCaffeine\Providers;
2
3use GeneaLabs\LaravelCaffeine\Console\Commands\Publish;
4use GeneaLabs\LaravelCaffeine\Http\Middleware\LaravelCaffeineDripMiddleware;
5use Illuminate\Contracts\Http\Kernel;
6use Illuminate\Routing\Route;
7use Illuminate\Support\ServiceProvider;
8
9class Service extends ServiceProvider
10{
11    public function boot()
12    {
13        app('router')->group(app("router")->hasMiddlewareGroup('web')
14            ? ['middleware' => 'web']
15            : [], function () {
16                require __DIR__ . '/../../routes/web.php';
17
18                if (config("app.env") === 'internaltesting') {
19                    require __DIR__ . '/../../tests/routes/web.php';
20                }
21            });
22
23        $configPath = __DIR__ . '/../../config/genealabs-laravel-caffeine.php';
24        $this->mergeConfigFrom($configPath, 'genealabs-laravel-caffeine');
25        $this->loadViewsFrom(
26            __DIR__ . '/../../resources/views',
27            'genealabs-laravel-caffeine'
28        );
29
30        if (config("app.env") === 'internaltesting') {
31            $this->loadViewsFrom(
32                __DIR__ . '/../../tests/resources/views',
33                'genealabs-laravel-caffeine'
34            );
35        }
36
37        $this->publishes([
38            $configPath => config_path('genealabs-laravel-caffeine.php')
39        ], 'config');
40
41        $this->commands(Publish::class);
42        $this->mergeConfigFrom(__DIR__ . '/../../config/genealabs-laravel-caffeine.php', 'genealabs-laravel-caffeine');
43
44        if ($this->shouldRegisterGlobalMiddleware()) {
45            app(Kernel::class)->pushMiddleware('\\' . LaravelCaffeineDripMiddleware::class);
46        }
47
48        if ($this->shouldRegisterRouteMiddleware()) {
49            app('router')->aliasMiddleware(
50                'caffeinated',
51                '\\' . LaravelCaffeineDripMiddleware::class
52            );
53        }
54    }
55
56    protected function shouldRegisterGlobalMiddleware() : bool
57    {
58        return (! request()->ajax()
59            && ! $this->shouldRegisterRouteMiddleware()
60            && (php_sapi_name() === 'fpm-fcgi'
61                || php_sapi_name() === 'cgi-fcgi'
62                || php_sapi_name() === 'apache2handler'
63                || php_sapi_name() === 'cli-server'
64                || config("app.env") === 'internaltesting'));
65    }
66
67    protected function shouldRegisterRouteMiddleware() : bool
68    {
69        return (bool) config('genealabs-laravel-caffeine.use-route-middleware');
70    }
71}
72