Passed
Push — master ( 26caeb...0e28f7 )
by Thomas
11:18
created

AppServiceProvider::boot()   B

Complexity

Conditions 6
Paths 12

Size

Total Lines 34
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
cc 6
eloc 20
c 2
b 1
f 0
nc 12
nop 0
dl 0
loc 34
rs 8.9777
1
<?php
2
3
namespace App\Providers;
4
5
use App\Interfaces\CertificatesInterface;
6
use App\Interfaces\EnrollmentSheetInterface;
7
use App\Interfaces\InvoicingInterface;
8
use App\Interfaces\LMSInterface;
9
use App\Interfaces\MailingSystemInterface;
10
use App\Models\Book;
11
use App\Models\Config;
12
use App\Models\ContactRelationship;
13
use App\Models\EnrollmentStatusType;
14
use App\Models\Period;
15
use App\Models\Room;
16
use App\Models\Teacher;
17
use Illuminate\Support\Facades\Schema;
18
use Illuminate\Support\Facades\View;
19
use Illuminate\Support\ServiceProvider;
20
21
class AppServiceProvider extends ServiceProvider
22
{
23
    /**
24
     * Bootstrap any application services.
25
     *
26
     * @return void
27
     */
28
    public function boot()
29
    {
30
        Schema::defaultStringLength(191);
31
32
        if (\Schema::hasTable('periods') && \Schema::hasTable('config')) {
33
            $firstPeriod = Period::find(Config::where('name', 'first_period')->first()->value);
34
35
            if ($firstPeriod) {
36
                $periods = Period::where('id', '>=', $firstPeriod->id)->get();
37
            } else {
38
                $periods = Period::all();
39
            }
40
41
            $current_period = Period::get_default_period();
42
            View::share('periods', $periods);
43
            View::share('current_period', $current_period);
44
        }
45
46
        if (\Schema::hasTable('teachers')) {
47
            View::share('teachers', Teacher::all());
48
        }
49
50
        if (\Schema::hasTable('rooms')) {
51
            View::share('rooms', Room::all());
52
        }
53
54
        View::composer(
55
            ['partials.create_new_contact', 'students.edit-contact'], function ($view) {
56
                $view->with('contact_types', ContactRelationship::all());
57
            });
58
59
        View::composer('partials.add_book_to_student', function ($view) {
60
            $view->with('books', Book::all());
61
            $view->with('statuses', EnrollmentStatusType::all());
62
        });
63
    }
64
65
    /**
66
     * Register any application services.
67
     *
68
     * @return void
69
     */
70
    public function register()
71
    {
72
        $syncTo = config('lms.sync_to');
73
74
        if ($syncTo) {
75
            $lms = config("lms.{$syncTo}.class");
76
77
            $this->app->bind(
78
                LMSInterface::class,
79
                $lms
80
            );
81
        }
82
83
        $invoicingSystem = config('invoicing.invoicing_system');
84
85
        if ($invoicingSystem) {
86
            $invoicingService = config("invoicing.{$invoicingSystem}.class");
87
88
            $this->app->bind(
89
                InvoicingInterface::class,
90
                $invoicingService
91
            );
92
        }
93
94
        $enrollmentSheetsStyle = config('certificates-generation.style');
95
96
        if ($enrollmentSheetsStyle) {
97
            $enrollmentSheetService = config("certificates-generation.{$enrollmentSheetsStyle}.class");
98
            $this->app->bind(
99
                CertificatesInterface::class,
100
                $enrollmentSheetService
101
            );
102
        }
103
104
        $enrollmentSheetsStyle = config('enrollment-sheet.style');
105
106
        if ($enrollmentSheetsStyle) {
107
            $enrollmentSheetService = config("enrollment-sheet.{$enrollmentSheetsStyle}.class");
108
            $this->app->bind(
109
                EnrollmentSheetInterface::class,
110
                $enrollmentSheetService
111
            );
112
        }
113
114
        $mailingSystem = config('mailing-system.mailing_system');
115
116
        if ($mailingSystem) {
117
            $mailingService = config("mailing-system.{$mailingSystem}.class");
118
119
            $this->app->bind(
120
                MailingSystemInterface::class,
121
                $mailingService
122
            );
123
        }
124
    }
125
}
126