diff --git a/app/Services/MenuService.php b/app/Services/MenuService.php index 96ebce57..a1336327 100644 --- a/app/Services/MenuService.php +++ b/app/Services/MenuService.php @@ -1234,7 +1234,7 @@ public function createMenuForBoard(array $boardData): GlobalMenu|Menu|null $parentId = $this->findParentMenuForBoard($isSystem, $tenantId); if ($isSystem) { - // 시스템 게시판 → global_menus + menus 둘 다 추가 + // 시스템 게시판 → global_menus + 모든 테넌트 menus에 추가 $url = '/customer-center/'.$boardCode; // 1. GlobalMenu에 추가 @@ -1255,24 +1255,29 @@ public function createMenuForBoard(array $boardData): GlobalMenu|Menu|null ]); } - // 2. Menu에도 추가 (tenant_id = null로 시스템 메뉴) - $menuParentId = $this->findParentMenuForBoard(false, null); - $menuExists = Menu::where('url', $url)->whereNull('tenant_id')->exists(); - if (! $menuExists) { - $maxMenuOrder = Menu::where('parent_id', $menuParentId)->whereNull('tenant_id')->max('sort_order') ?? 0; + // 2. 모든 테넌트의 Menu에 추가 + $tenants = Tenant::where('is_active', true)->get(); + foreach ($tenants as $tenant) { + $menuParentId = $this->findParentMenuForBoard(false, $tenant->id); + $menuExists = Menu::where('url', $url)->where('tenant_id', $tenant->id)->exists(); + if (! $menuExists) { + $maxMenuOrder = Menu::where('parent_id', $menuParentId) + ->where('tenant_id', $tenant->id) + ->max('sort_order') ?? 0; - Menu::create([ - 'tenant_id' => null, - 'parent_id' => $menuParentId, - 'name' => $boardName, - 'url' => $url, - 'icon' => 'document-text', - 'sort_order' => $maxMenuOrder + 1, - 'is_active' => true, - 'hidden' => false, - 'is_external' => false, - 'created_by' => auth()->id(), - ]); + Menu::create([ + 'tenant_id' => $tenant->id, + 'parent_id' => $menuParentId, + 'name' => $boardName, + 'url' => $url, + 'icon' => 'document-text', + 'sort_order' => $maxMenuOrder + 1, + 'is_active' => true, + 'hidden' => false, + 'is_external' => false, + 'created_by' => auth()->id(), + ]); + } } return $globalMenu; @@ -1337,12 +1342,13 @@ public function deleteMenuForBoard(string $boardCode, bool $isSystem, ?int $tena $forceDelete ? $globalMenu->forceDelete() : $globalMenu->delete(); } - // 2. Menu도 삭제 (tenant_id = null인 시스템 메뉴) - $menu = $forceDelete - ? Menu::withTrashed()->where('url', $url)->whereNull('tenant_id')->first() - : Menu::where('url', $url)->whereNull('tenant_id')->first(); + // 2. 모든 테넌트의 Menu 삭제 + $menusQuery = $forceDelete + ? Menu::withTrashed()->where('url', $url) + : Menu::where('url', $url); - if ($menu) { + $menus = $menusQuery->get(); + foreach ($menus as $menu) { if (! $forceDelete) { $menu->deleted_by = auth()->id(); $menu->save(); @@ -1416,28 +1422,31 @@ public function restoreMenuForBoard(string $boardCode, string $boardName, bool $ ]); } - // === Menu 처리 (tenant_id = null) === - $menuTrashed = Menu::onlyTrashed()->where('url', $url)->whereNull('tenant_id')->first(); - if ($menuTrashed) { - $menuTrashed->restore(); - $menuTrashed->deleted_by = null; - $menuTrashed->save(); - } elseif (! Menu::where('url', $url)->whereNull('tenant_id')->exists()) { - // 없으면 생성 - $menuParentId = $this->findParentMenuForBoard(false, null); - $maxMenuOrder = Menu::where('parent_id', $menuParentId)->whereNull('tenant_id')->max('sort_order') ?? 0; - Menu::create([ - 'tenant_id' => null, - 'parent_id' => $menuParentId, - 'name' => $boardName, - 'url' => $url, - 'icon' => 'document-text', - 'sort_order' => $maxMenuOrder + 1, - 'is_active' => true, - 'hidden' => false, - 'is_external' => false, - 'created_by' => auth()->id(), - ]); + // === 모든 활성 테넌트의 Menu 복원/생성 === + $tenants = Tenant::where('is_active', true)->get(); + foreach ($tenants as $tenant) { + $menuTrashed = Menu::onlyTrashed()->where('url', $url)->where('tenant_id', $tenant->id)->first(); + if ($menuTrashed) { + $menuTrashed->restore(); + $menuTrashed->deleted_by = null; + $menuTrashed->save(); + } elseif (! Menu::where('url', $url)->where('tenant_id', $tenant->id)->exists()) { + // 없으면 생성 + $menuParentId = $this->findParentMenuForBoard(false, $tenant->id); + $maxMenuOrder = Menu::where('parent_id', $menuParentId)->where('tenant_id', $tenant->id)->max('sort_order') ?? 0; + Menu::create([ + 'tenant_id' => $tenant->id, + 'parent_id' => $menuParentId, + 'name' => $boardName, + 'url' => $url, + 'icon' => 'document-text', + 'sort_order' => $maxMenuOrder + 1, + 'is_active' => true, + 'hidden' => false, + 'is_external' => false, + 'created_by' => auth()->id(), + ]); + } } return true; diff --git a/resources/views/boards/create.blade.php b/resources/views/boards/create.blade.php index ea19c93c..e943dd44 100644 --- a/resources/views/boards/create.blade.php +++ b/resources/views/boards/create.blade.php @@ -169,7 +169,7 @@
URL에 사용됩니다 (예: notice, qna, faq)
diff --git a/resources/views/boards/edit.blade.php b/resources/views/boards/edit.blade.php index 54a7a591..14b17c5d 100644 --- a/resources/views/boards/edit.blade.php +++ b/resources/views/boards/edit.blade.php @@ -31,7 +31,7 @@ diff --git a/resources/views/boards/index.blade.php b/resources/views/boards/index.blade.php index c2410344..730f3103 100644 --- a/resources/views/boards/index.blade.php +++ b/resources/views/boards/index.blade.php @@ -80,21 +80,20 @@ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none foc -@endsection -@push('scripts') + -@endpush +@endsection