<?php namespace App\Providers; use App\AboutPage; use App\OAuth\GoogleDriveProvider; use App\User; use Illuminate\Support\Facades\Storage; use Modules\Chat\Entities\Status; use Modules\FrontendManage\Entities\BecomeInstructor; use Modules\FrontendManage\Entities\HomeContent; use Modules\FrontendManage\Entities\WorkProcess; use Modules\RolePermission\Entities\Permission; use Modules\SidebarManager\Entities\PermissionSection; use Spatie\Valuestore\Valuestore; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\URL; use Illuminate\Pagination\Paginator; use Illuminate\Support\Facades\View; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Schema; use Illuminate\Support\ServiceProvider; use Laravel\Passport\Console\KeysCommand; use Laravel\Passport\Console\ClientCommand; use Laravel\Passport\Console\InstallCommand; use Modules\CourseSetting\Entities\Category; use Modules\FrontendManage\Entities\HeaderMenu; use stdClass; class AppServiceProvider extends ServiceProvider { public function register() { if (isModuleActive('Chat')) { $this->app->singleton('general_settings', function () { return Valuestore::make((base_path() . '/general_settings.json')); }); } } public function boot() { if (isModuleActive('LmsSaas') || isModuleActive('LmsSaasMD')) { $domain = SaasDomain(); } else { $domain = 'main'; } if (isModuleActive('LmsSaasMD')) { if (!Storage::has('saas_db.json')) { $path = Storage::path('saas_db.json'); $data = \App\Models\LmsInstitute::get(['db_database', 'db_username', 'db_password', 'domain']); $content = []; foreach ($data as $row) { $content[$row->domain] = [ "DB_DATABASE" => $row->domain == 'main' ? env('DB_DATABASE') : $row->db_database, "DB_USERNAME" => $row->domain == 'main' ? env('DB_USERNAME') : $row->db_username, "DB_PASSWORD" => $row->domain == 'main' ? env('DB_PASSWORD') : $row->db_password, ]; } file_put_contents($path, json_encode($content, JSON_PRETTY_PRINT)); } } if (empty(SaasInstitute())) { redirect(env('APP_URL'))->send(); } session()->put('domain', $domain); Paginator::useBootstrap(); if (env('FORCE_HTTPS')) { URL::forceScheme('https'); } Schema::defaultStringLength(191); $this->commands([ InstallCommand::class, ClientCommand::class, KeysCommand::class, ]); try { if (isModuleActive('Chat')) { $datatable = DB::connection()->getDatabaseName(); if ($datatable) { if (Schema::hasTable('chat_notifications')) { view()->composer([ 'backend.partials.menu', theme('partials._dashboard_master'), theme('partials._dashboard_menu'), theme('pages.fullscreen_video'), ], function ($view) { $notifications = DB::table('chat_notifications')->where('notifiable_id', auth()->id()) ->where('read_at', null) ->get(); foreach ($notifications as $notification) { $notification->data = json_decode($notification->data); } $notifications = $notifications->sortByDesc('created_at'); $view->with(['notifications_for_chat' => $notifications]); }); } view()->composer('*', function ($view) { $seed = session()->get('user_status_seedable'); if (isModuleActive('Chat') && auth()->check() && is_null($seed)) { $users = User::all(); foreach ($users as $user) { if (Schema::hasTable('chat_statuses')) { Status::firstOrCreate([ 'user_id' => $user->id, ], [ 'user_id' => $user->id, 'status' => 0 ]); } } session()->put('user_status_seedable', 'false'); } }); view()->composer('*', function ($view) { if (auth()->check()) { $this->app->singleton('extend_view', function ($app) { if (auth()->user()->role_id == 3) { return theme('layouts.dashboard_master'); } else { return 'backend.master'; } }); } }); } } if (Settings('frontend_active_theme')) { $this->app->singleton('topbarSetting', function () { $topbarSetting = DB::table('topbar_settings') ->first(); return $topbarSetting; }); } View::composer(['backend.partials.sidebar'], function ($view) { $check = Permission::whereColumn('route', 'parent_route')->get(); if (count($check) > 0) { foreach ($check as $c) { $c->parent_route = null; $c->save(); } } if (Schema::hasTable('permission_sections')) { $query = PermissionSection::query(); if (!showEcommerce()) { $query->where('ecommerce', '!=', 1); } $data['sections'] = $query->with('permissions')->orderBy('position')->get(); } else { $data['sections'] = []; } $view->with($data); }); View::composer([ theme('partials._dashboard_menu'), theme('pages.fullscreen_video'), theme('pages.index'), theme('pages.courses'), theme('pages.free_courses'), theme('partials._menu'), theme('pages.quizzes'), theme('pages.classes'), theme('pages.search'), theme('components.we-tech-dashboard-page-section'), theme('layouts.dashboard_master'), theme('components.home-page-course-section') ], function ($view) use ($domain) { $data['categories'] = Cache::rememberForever('categories_' . app()->getLocale() . $domain, function () { return Category::select('id', 'name', 'title', 'description', 'image', 'thumbnail', 'parent_id') ->where('status', 1) ->whereNull('parent_id') ->withCount('courses') ->orderBy('position_order', 'ASC')->with('activeSubcategories', 'childs', 'subcategories') ->get(); }); $data['languages'] = Cache::rememberForever('languages_' . app()->getLocale() . $domain, function () { if (isModuleActive('LmsSaasMD')) { return DB::connection('mysql')->table('languages')->select('id', 'name', 'code', 'rtl', 'status', 'native') ->where('status', 1) ->get(); } else { return DB::table('languages')->select('id', 'name', 'code', 'rtl', 'status', 'native') ->where('status', 1) ->where('lms_id', SaasInstitute()->id) ->get(); } }); $data['menus'] = Cache::rememberForever('menus_' . app()->getLocale() . $domain, function () { try { return HeaderMenu::orderBy('position', 'asc') ->select('id', 'type', 'element_id', 'title', 'link', 'parent_id', 'position', 'show', 'is_newtab', 'mega_menu', 'mega_menu_column') ->with('childs') ->get(); } catch (\Exception $e) { return collect(); } }); $view->with($data); }); View::composer(['frontend.*'], function ($view) { $data['frontendContent'] = $data['homeContent'] = (object)$this->homeContents(); $data['about_page'] = AboutPage::first(); $data['become_instructor'] = BecomeInstructor::all(); $data['work_progress'] = WorkProcess::select('title', 'description')->where('status', 1)->get(); $view->with($data); }); } catch (\Exception $e) { Log::info($e->getMessage()); } $this->bootGoogleDriveSocialite(); } private function bootGoogleDriveSocialite() { $socialite = $this->app->make('Laravel\Socialite\Contracts\Factory'); $socialite->extend( 'google-drive', function ($app) use ($socialite) { $config = $app['config']['services.google-drive']; return $socialite->buildProvider(GoogleDriveProvider::class, $config); } ); } private function homeContents() { if (function_exists('SaasDomain')) { $domain = SaasDomain(); } else { $domain = 'main'; } return Cache::rememberForever('homeContents_' . app()->getLocale() . $domain, function () { return HomeContent::select(['key', 'value'])->get()->pluck('value', 'key')->toArray(); }); } }