fix(superadmin): stabilize knowledge base nav and docs grouping
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled

This commit is contained in:
Codex Agent
2026-02-07 14:06:49 +01:00
parent d2808ffa4f
commit 3ba4d11d92
18 changed files with 81 additions and 17 deletions

View File

@@ -56,7 +56,7 @@ class TenantFeedbackResource extends Resource
public static function getNavigationGroup(): UnitEnum|string|null
{
return __('admin.nav.feedback_support');
return __('admin.nav.infrastructure');
}
public static function getEloquentQuery(): Builder

View File

@@ -0,0 +1,42 @@
<?php
namespace App\Filament\SuperAdmin\Pages;
use App\Filament\Clusters\RareAdmin\RareAdminCluster;
use BackedEnum;
use Filament\Pages\Page;
use UnitEnum;
class InternalDocsPage extends Page
{
protected static ?string $cluster = RareAdminCluster::class;
protected static null|string|BackedEnum $navigationIcon = 'heroicon-o-book-open';
protected static null|string|UnitEnum $navigationGroup = null;
protected static ?int $navigationSort = 18;
public static function getNavigationLabel(): string
{
return __('admin.nav.internal_docs');
}
public static function getNavigationGroup(): UnitEnum|string|null
{
return __('admin.nav.infrastructure');
}
public static function getNavigationUrl(): string
{
return url('/super-admin/docs');
}
public static function getNavigationItemActiveRoutePattern(): string|array
{
return [
static::getRouteName(),
'filament.superadmin-kb.*',
];
}
}

View File

@@ -22,12 +22,14 @@ class SuperAdminKbPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
$knowledgeBasePath = $this->knowledgeBasePath();
return $panel
->id('superadmin-kb')
->path('super-admin/docs')
->viteTheme('resources/css/filament/superadmin-kb/theme.css')
->plugins([
KnowledgeBasePlugin::make(base_path('docs/superadmin-kb')),
KnowledgeBasePlugin::make($knowledgeBasePath),
])
->login(Login::class)
->profile(EditProfile::class, isSimple: false)
@@ -47,4 +49,11 @@ class SuperAdminKbPanelProvider extends PanelProvider
])
->authGuard('super_admin');
}
protected function knowledgeBasePath(): string
{
$path = realpath(base_path('docs/superadmin-kb')) ?: base_path('docs/superadmin-kb');
return str_replace(['\\', '/'], DIRECTORY_SEPARATOR, $path);
}
}

View File

@@ -50,8 +50,7 @@ class SuperAdminPanelProvider extends PanelProvider
->navigationSort(20),
KnowledgeBaseCompanionPlugin::make()
->knowledgeBasePanelId('superadmin-kb')
->helpMenuRenderHook(PanelsRenderHook::TOPBAR_START)
->disableKnowledgeBasePanelButton(),
->helpMenuRenderHook(PanelsRenderHook::TOPBAR_START),
])
->navigationGroups([
NavigationGroup::make()
@@ -62,8 +61,6 @@ class SuperAdminPanelProvider extends PanelProvider
->label(__('admin.nav.tenants')),
NavigationGroup::make()
->label(__('admin.nav.billing')),
NavigationGroup::make()
->label(__('admin.nav.feedback_support')),
NavigationGroup::make()
->label(__('admin.nav.platform')),
NavigationGroup::make()

View File

@@ -2,5 +2,4 @@
title: Grundlagen
type: group
order: 10
icon: heroicon-o-book-open
---

View File

@@ -2,5 +2,4 @@
title: Incidents & DR
type: group
order: 20
icon: heroicon-o-exclamation-triangle
---

View File

@@ -2,5 +2,4 @@
title: Medien & Upload
type: group
order: 30
icon: heroicon-o-cloud-arrow-up
---

View File

@@ -2,5 +2,4 @@
title: Photobooth
type: group
order: 40
icon: heroicon-o-camera
---

View File

@@ -2,5 +2,4 @@
title: Billing
type: group
order: 50
icon: heroicon-o-credit-card
---

View File

@@ -2,5 +2,4 @@
title: AI Operations
type: group
order: 60
icon: heroicon-o-sparkles
---

View File

@@ -2,5 +2,4 @@
title: DSGVO & Compliance
type: group
order: 70
icon: heroicon-o-shield-check
---

View File

@@ -2,5 +2,4 @@
title: Deployment
type: group
order: 80
icon: heroicon-o-server-stack
---

View File

@@ -2,5 +2,4 @@
title: Releases & Tests
type: group
order: 90
icon: heroicon-o-rocket-launch
---

View File

@@ -2,5 +2,4 @@
title: Monitoring & Diagramme
type: group
order: 100
icon: heroicon-o-chart-bar
---

View File

@@ -20,6 +20,7 @@ return [
'infrastructure' => 'Infrastruktur',
'storage' => 'Speicher',
'feedback_support' => 'Feedback & Support',
'internal_docs' => 'Interne Doku',
'branding' => 'Branding',
'security' => 'Sicherheit',
],

View File

@@ -20,6 +20,7 @@ return [
'infrastructure' => 'Infrastructure',
'storage' => 'Storage',
'feedback_support' => 'Feedback & Support',
'internal_docs' => 'Internal Docs',
'branding' => 'Branding',
'security' => 'Security',
],

View File

@@ -89,6 +89,20 @@ class UserRoleAccessTest extends TestCase
$this->assertStringStartsWith('/super-admin/docs', (string) $redirectPath);
}
public function test_super_admin_docs_panel_page_renders_after_redirect(): void
{
$user = User::factory()->create(['role' => 'super_admin']);
$response = $this
->followingRedirects()
->actingAs($user, 'super_admin')
->get('/super-admin/docs');
$response
->assertOk()
->assertSee('Grundlagen');
}
public function test_non_super_admin_cannot_access_super_admin_docs_panel(): void
{
$user = User::factory()->create(['role' => 'tenant_admin']);

View File

@@ -39,10 +39,11 @@ class SuperAdminNavigationGroupsTest extends TestCase
\App\Filament\Resources\TenantPackageResource::class => 'admin.nav.commercial',
\App\Filament\Resources\Coupons\CouponResource::class => 'admin.nav.commercial',
\App\Filament\Resources\GiftVoucherResource::class => 'admin.nav.commercial',
\App\Filament\Resources\TenantFeedbackResource::class => 'admin.nav.feedback_support',
\App\Filament\Resources\TenantFeedbackResource::class => 'admin.nav.infrastructure',
\App\Filament\Resources\InfrastructureActionLogs\InfrastructureActionLogResource::class => 'admin.nav.infrastructure',
\App\Filament\SuperAdmin\Pages\WatermarkSettingsPage::class => 'admin.nav.branding',
\App\Filament\SuperAdmin\Pages\DokployDeployments::class => 'admin.nav.infrastructure',
\App\Filament\SuperAdmin\Pages\InternalDocsPage::class => 'admin.nav.infrastructure',
\App\Filament\SuperAdmin\Pages\OpsHealthDashboard::class => 'admin.nav.infrastructure',
\App\Filament\SuperAdmin\Pages\IntegrationsHealthDashboard::class => 'admin.nav.infrastructure',
\App\Filament\Clusters\DailyOps\Pages\JoinTokenAnalyticsDashboard::class => 'admin.nav.security',
@@ -82,6 +83,7 @@ class SuperAdminNavigationGroupsTest extends TestCase
\App\Filament\Blog\Resources\CategoryResource::class => RareAdminCluster::class,
\App\Filament\SuperAdmin\Pages\WatermarkSettingsPage::class => RareAdminCluster::class,
\App\Filament\SuperAdmin\Pages\DokployDeployments::class => RareAdminCluster::class,
\App\Filament\SuperAdmin\Pages\InternalDocsPage::class => RareAdminCluster::class,
];
foreach ($clusterExpectations as $resourceClass => $clusterClass) {
@@ -100,4 +102,12 @@ class SuperAdminNavigationGroupsTest extends TestCase
$this->assertTrue($panel->hasTopNavigation());
}
public function test_internal_docs_page_navigation_url_points_to_knowledge_base_panel(): void
{
$this->assertSame(
url('/super-admin/docs'),
\App\Filament\SuperAdmin\Pages\InternalDocsPage::getNavigationUrl()
);
}
}