Completed
Push — master ( 8d4ae0...cbdb30 )
by Emmanuel
01:14
created

LaravelTicketsServiceProvider::boot()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 39

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 39
rs 9.296
c 0
b 0
f 0
cc 2
nc 2
nop 0
1
<?php
2
3
namespace RexlManu\LaravelTickets;
4
5
use Illuminate\Support\ServiceProvider;
6
use RexlManu\LaravelTickets\Commands\AutoCloseCommand;
7
use RexlManu\LaravelTickets\Controllers\TicketController;
8
use Illuminate\Routing\Router;
9
use Illuminate\Support\Facades\Route;
10
use RexlManu\LaravelTickets\Models\Ticket;
11
use RexlManu\LaravelTickets\Models\TicketMessage;
12
use RexlManu\LaravelTickets\Models\TicketUpload;
13
use RexlManu\LaravelTickets\Observers\TicketMessageObserver;
14
use RexlManu\LaravelTickets\Observers\TicketObserver;
15
use RexlManu\LaravelTickets\Observers\TicketUploadObserver;
16
17
class LaravelTicketsServiceProvider extends ServiceProvider
18
{
19
    /**
20
     * Bootstrap the application services.
21
     */
22
    public function boot()
23
    {
24
        /*
25
         * Optional methods to load your package assets
26
         */
27
//        $this->loadTranslationsFrom(__DIR__ . '/../resources/lang', 'laravel-tickets');
28
        $this->loadViewsFrom(__DIR__ . '/../resources/views', 'laravel-tickets');
29
        $this->loadMigrationsFrom(__DIR__ . '/../database/migrations');
30
        $this->routes();
31
        $this->observers();
32
33
        if ($this->app->runningInConsole()) {
34
            $this->publishes([
35
                __DIR__ . '/../config/config.php' => config_path('laravel-tickets.php'),
36
            ], 'config');
37
38
            // Publishing the views.
39
            $this->publishes([
40
                __DIR__ . '/../resources/views' => resource_path('views/vendor/laravel-tickets'),
41
            ], 'views');
42
43
            $this->publishes([
44
                __DIR__ . '/../database/migrations' => database_path('migrations'),
45
            ], 'migrations');
46
47
            // Publishing assets.
48
            /*$this->publishes([
49
                __DIR__.'/../resources/assets' => public_path('vendor/laravel-tickets'),
50
            ], 'assets');*/
51
52
            // Publishing the translation files.
53
//            $this->publishes([
54
//                __DIR__ . '/../resources/lang' => resource_path('lang/vendor/laravel-tickets'),
55
//            ], 'lang');
56
57
            // Registering package commands.
58
            $this->commands([ AutoCloseCommand::class ]);
59
        }
60
    }
61
62
    /**
63
     * Register the application services.
64
     */
65
    public function register()
66
    {
67
        // Automatically apply the package configuration
68
        $this->mergeConfigFrom(__DIR__ . '/../config/config.php', 'laravel-tickets');
69
70
        // Register the main class to use with the facade
71
        $this->app->singleton('laravel-tickets', function () {
72
            return new LaravelTickets;
73
        });
74
    }
75
76
    public function routes()
77
    {
78
        // Macro routing
79
        foreach ([ 'ticketSystem', 'tickets' ] as $routeMacroName) {
80
            Router::macro($routeMacroName, function () {
81
                Route::middleware(config('laravel-tickets.guard'))->name('laravel-tickets.')->group(function () {
82
                    Route::prefix('/tickets')->group(function () {
83
                        Route::get('/', [ TicketController::class, 'index' ])->name('tickets.index');
84
                        Route::post('/', [ TicketController::class, 'store' ])->name('tickets.store');
85
                        Route::get('/create', [ TicketController::class, 'create' ])->name('tickets.create');
86
                        Route::prefix('{ticket}')->group(function () {
87
                            Route::get('/', [ TicketController::class, 'show' ])->name('tickets.show');
88
                            Route::post('/', [ TicketController::class, 'close' ])->name('tickets.close');
89
                            Route::post('/message', [ TicketController::class, 'message' ])->name('tickets.message');
90
                            Route::prefix('{ticketUpload}')->group(function () {
91
                                Route::get('/download', [ TicketController::class, 'download' ])->name('tickets.download');
92
                            });
93
                        });
94
                    });
95
                });
96
            });
97
        }
98
    }
99
100
    private function observers()
101
    {
102
        Ticket::observe(TicketObserver::class);
103
        TicketMessage::observe(TicketMessageObserver::class);
104
        TicketUpload::observe(TicketUploadObserver::class);
105
    }
106
}
107