Sindbad~EG File Manager

Current Path : /proc/self/cwd/common/
Upload File :
Current File : //proc/self/cwd/common/CommonServiceProvider.php

<?php

namespace Common;

use Common\Admin\Analytics\AnalyticsServiceProvider;
use Common\Admin\Appearance\Commands\GenerateCssTheme;
use Common\Billing\BillingPlan;
use Common\Billing\Subscription;
use Common\Billing\SyncBillingPlansCommand;
use Common\Core\Middleware\RestrictDemoSiteFunctionality;
use Common\Core\Commands\SeedCommand;
use Common\Core\Policies\AppearancePolicy;
use Common\Core\Policies\FileEntryPolicy;
use Common\Core\Policies\LocalizationPolicy;
use Common\Core\Policies\MailTemplatePolicy;
use Common\Core\Policies\PagePolicy;
use Common\Core\Policies\PermissionPolicy;
use Common\Core\Policies\RolePolicy;
use Common\Core\Policies\SettingPolicy;
use Common\Core\Policies\SubscriptionPolicy;
use Common\Core\Policies\UserPolicy;
use Common\Files\Providers\DigitalOceanServiceProvider;
use Common\Files\Providers\DropboxServiceProvider;
use Common\Localizations\Commands\ExportTranslations;
use Common\Mail\MailTemplate;
use Common\Core\Policies\BillingPlanPolicy;
use Common\Core\Policies\ReportPolicy;
use Common\Auth\User;
use Gate;
use Validator;
use Laravel\Socialite\Facades\Socialite;
use Illuminate\Support\ServiceProvider;
use Laravel\Socialite\SocialiteServiceProvider;
use Common\Files\FileEntry;
use Common\Auth\Roles\Role;
use Common\Localizations\Localization;
use Common\Pages\Page;
use Common\Settings\Setting;

class CommonServiceProvider extends ServiceProvider
{
    const CONFIG_FILES = ['permissions', 'default-settings', 'site', 'demo', 'mail-templates'];

    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        $this->loadRoutesFrom(__DIR__.'/routes.php');
        $this->loadMigrationsFrom(__DIR__.'/Database/migrations');
        $this->loadViewsFrom(__DIR__ . '/resources/views', 'common');

        $this->registerPolicies();
        $this->registerCustomValidators();
        $this->registerCommands();
        $this->registerMiddleware();

        $configs = collect(self::CONFIG_FILES)->mapWithKeys(function($file) {
            return [__DIR__."/resources/config/$file.php" => config_path("common/$file.php")];
        })->toArray();

        $this->publishes($configs);
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $loader = \Illuminate\Foundation\AliasLoader::getInstance();

        // register socialite service provider and alias
        $this->app->register(SocialiteServiceProvider::class);
        $this->app->register(AnalyticsServiceProvider::class);
        $loader->alias('Socialite', Socialite::class);

        $this->registerDevProviders();

        $this->deepMergeDefaultSettings(__DIR__ . "/resources/config/default-settings.php", "common.default-settings");
        $this->deepMergeConfigFrom(__DIR__ . "/resources/config/demo-blocked-routes.php", "common.demo-blocked-routes");
        $this->deepMergeConfigFrom(__DIR__ . "/resources/config/permissions.php", "common.permissions");
        $this->deepMergeConfigFrom(__DIR__ . "/resources/config/mail-templates.php", "common.mail-templates");
        $this->mergeConfigFrom(__DIR__ . "/resources/config/site.php", "common.site");

        // register flysystem providers
        if (config('common.site.uploads_disk') === 'uploads_dropbox') {
            $this->app->register(DropboxServiceProvider::class);
        } else if (config('common.site.uploads_disk') === 'uploads_digitalocean') {
            $this->app->register(DigitalOceanServiceProvider::class);
        }
    }

    /**
     * Register package middleware.
     */
    private function registerMiddleware()
    {
        if ($this->app['config']->get('common.site.demo')) {
            $this->app['router']->pushMiddlewareToGroup('web', RestrictDemoSiteFunctionality::class);
        }
    }

    /**
     * Register custom validation rules with laravel.
     */
    private function registerCustomValidators()
    {
        Validator::extend('hash', 'Common\Auth\Validators\HashValidator@validate');
        Validator::extend('email_confirmed', 'Common\Auth\Validators\EmailConfirmedValidator@validate');
    }

    /**
     * Deep merge the given configuration with the existing configuration.
     *
     * @param  string  $path
     * @param  string  $key
     * @return void
     */
    private function deepMergeConfigFrom($path, $key)
    {
        $config = $this->app['config']->get($key, []);
        $this->app['config']->set($key, array_merge_recursive(require $path, $config));
    }

    private function registerPolicies()
    {
        Gate::policy('App\Model', 'App\Policies\ModelPolicy');
        Gate::policy(FileEntry::class, FileEntryPolicy::class);
        Gate::policy(User::class, UserPolicy::class);
        Gate::policy(Role::class, RolePolicy::class);
        Gate::policy(Page::class, PagePolicy::class);
        Gate::policy('PermissionPolicy', PermissionPolicy::class);
        Gate::policy(Setting::class, SettingPolicy::class);
        Gate::policy(Localization::class, LocalizationPolicy::class);
        Gate::policy('AppearancePolicy', AppearancePolicy::class);
        Gate::policy('ReportPolicy', ReportPolicy::class);
        Gate::policy(MailTemplate::class, MailTemplatePolicy::class);
        Gate::policy(BillingPlan::class, BillingPlanPolicy::class);
        Gate::policy(Subscription::class, SubscriptionPolicy::class);
    }

    private function registerCommands()
    {
        $this->commands([
            GenerateCssTheme::class,
            ExportTranslations::class,
            SeedCommand::class,
            SyncBillingPlansCommand::class,
        ]);
    }

    /**
     * Deep merge "default-settings" config values.
     *
     * @param string $path
     * @param $configKey
     * @return void
     */
    private function deepMergeDefaultSettings($path, $configKey)
    {
        $defaultSettings = require $path;
        $userSettings = $this->app['config']->get($configKey, []);

        foreach ($userSettings as $userSetting) {
            //remove default setting, if it's overwritten by user setting
            foreach ($defaultSettings as $key => $defaultSetting) {
                if ($defaultSetting['name'] === $userSetting['name']) {
                    unset($defaultSettings[$key]);
                }
            }

            //push user setting into default settings array
            $defaultSettings[] = $userSetting;
        }

        $this->app['config']->set($configKey, $defaultSettings);
    }

    private function registerDevProviders()
    {
        if ($this->app->environment() === 'production') return;

        if ($this->ideHelperExists()) {
            $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
        }

        if ($this->clockworkExists()) {
            $this->app->register(\Clockwork\Support\Laravel\ClockworkServiceProvider::class);
        }
    }

    private function clockworkExists() {
        return class_exists(\Clockwork\Support\Laravel\ClockworkServiceProvider::class);
    }

    private function ideHelperExists() {
        return class_exists(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
    }
}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists