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,
]);
}
}
});
}
}