HEX
Server: nginx/1.28.3
System: Linux lightweb-s1 5.15.0-173-generic #183-Ubuntu SMP Fri Mar 6 13:29:34 UTC 2026 x86_64
User: drdrivek-71 (1047)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: /home/eslinced-103/brise-edu.or.kr/AmuzPackages/Cms2/Cms2ServiceProvider.php
<?php

namespace AmuzPackages\Cms2;

use AmuzPackages\Cms2\Resources\StaticPage;
use App\Nova\Central\Admin;
use App\Nova\Central\Domain;
use App\Nova\Central\Tenant as TenantResource;
use App\Nova\Central\User as CentralUser;
use App\Nova\Tenant\Post;
use App\Nova\Tenant\User as TenantUser;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\ServiceProvider;
use Laravel\Nova\Actions\ActionResource;
use Laravel\Nova\Badge;
use Laravel\Nova\Events\ServingNova;
use Laravel\Nova\Menu\Menu;
use Laravel\Nova\Menu\MenuItem;
use Laravel\Nova\Menu\MenuSection;
use Laravel\Nova\Nova;
use Laravel\Nova\Resource;
use ReflectionClass;
use Symfony\Component\Finder\Finder;
use Illuminate\Support\Str;
use Stancl\Tenancy\Middleware\PreventAccessFromCentralDomains;

class Cms2ServiceProvider extends ServiceProvider
{
    /**
         * Module Namespace
         *
         * @var string
         */
        protected string $namespace = "AmuzPackages\Cms2";

        /**
         * Register any application services.
         *
         * @return void
         */
        public function register(): void
        {
             $this->app->booted(function () {
                $this->routes();
             });
        }

        /**
         * Register the module's routes.
         *
         * @return void
         */
        protected function routes(): void
        {
            if ($this->app->routesAreCached()) {
                return;
            }

            Route::middleware(['nova'])
                    ->prefix('api/cms2')
                    ->group(__DIR__ . '/Routes/api.php');

            //프리셋 사용 옵션이 .env를 통해 켜져있으면 라우팅을 준비한다.
            if(config('amuz.use_central_preset',false) === true){
                foreach ($this->centralDomains() as $domain) {

//theme:{themeName} 미들웨어를 넣으면 이 라우트내에서 호출되는 view는 해당 테마path에서 먼저 파일을 찾고,
//없을경우 resources path에서 파일을 찾는다.

                    Route::middleware(['web','theme:theme-central'])
                        ->domain($domain)
                        ->group(__DIR__ . '/Routes/central.php');
                }
            }

            //프리셋 사용 옵션이 .env를 통해 켜져있으면 라우팅을 준비한다.
            if(config('amuz.use_tenant_preset',false) === true) {
                Route::middleware('tenant', PreventAccessFromCentralDomains::class)
                    ->name('tenant.')
                    ->group(__DIR__ . '/Routes/tenant.php');
            }
        }

        /**
         * Bootstrap your assets
         *
         * @return void
         */
        public function boot(): void
        {
            $this->loadMigrationsFrom(__DIR__ . '/Database/migrations');
            $this->setTenancyResources();

            Nova::serving(function (ServingNova $event) {
                Nova::resources($this->autoLoadResources());
                Nova::dashboards($this->dashboards());
                Nova::tools($this->tools());
//                Nova::script('cms2', __DIR__.'/dist/js/cms2.js');
//                Nova::style('cms2', __DIR__.'/dist/css/cms2.css');
            });
        }


        /**
         * Autoload all resources of your module
         */
        protected function autoLoadResources(): array
        {
            $directory = __DIR__ . '/Resources';
            $namespace = $this->namespace;
            $resources = [];

            $OS_Separator = PHP_OS === 'Linux' ? '/' : '\\';

            foreach ((new Finder)->in($directory)->files() as $resource) {
                $resource = str_replace(
                    '.php',
                    '',
                    $namespace."\\Resources\\".Str::afterLast($resource, $OS_Separator)
                );

                if (is_subclass_of($resource, Resource::class) &&
                    ! (new ReflectionClass($resource))->isAbstract() &&
                    ! (is_subclass_of($resource, ActionResource::class))) {
                    $resources[] = $resource;
                }
            }

            return $resources;
        }

        /**
         * Here you can register your dashboards
         */
        protected function dashboards(): array
        {
            return [];
        }

        /**
         * Here you can register your tools connected to module
         */
        protected function tools(): array
        {
            return [];
        }

    protected function centralDomains(): array
    {
        return config('tenancy.central_domains');
    }

    protected function setTenancyResources(): void
    {
        Nova::serving(function (ServingNova $event) {
            if (tenancy()->initialized) {
                Nova::resources([
                    config('amuz.tenant_user_resource')
                ]);
                if(config('amuz.use_tenant_preset',false) === true) Nova::resources([Post::class]);
            } else {
                Nova::resources([
                    config('amuz.central_user_resource'),
                    Admin::class,
                    TenantResource::class,
                    Domain::class,
                    StaticPage::class,
                ]);
                if(config('amuz.use_multi_site',false) === true){
                    Nova::resources([
                        TenantResource::class,
                        Domain::class,
                    ]);
                }
            }
        });
    }
}