From 43bafef4cd7d09474b60d94cb81586741777e8cc Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Thu, 12 Mar 2026 09:27:38 +0700 Subject: [PATCH] feat: Implement Kosma selection and role management in general settings, refine Kosma permissions, and update the default semester value. --- app/Filament/Pages/System/ManageSettings.php | 28 +++++++++++++++++++ app/Settings/GeneralSettings.php | 2 ++ database/seeders/ShieldSeeder.php | 22 --------------- ...6_03_11_220817_create_general_settings.php | 3 +- 4 files changed, 32 insertions(+), 23 deletions(-) diff --git a/app/Filament/Pages/System/ManageSettings.php b/app/Filament/Pages/System/ManageSettings.php index be7177f..74a2b0f 100644 --- a/app/Filament/Pages/System/ManageSettings.php +++ b/app/Filament/Pages/System/ManageSettings.php @@ -2,7 +2,10 @@ namespace App\Filament\Pages\System; +use App\Enums\RoleEnum; use App\Filament\Support\SystemNotification; +use App\Models\Student; +use App\Models\User; use App\Settings\GeneralSettings; use BackedEnum; use BezhanSalleh\FilamentShield\Traits\HasPageShield; @@ -59,6 +62,15 @@ public function form(Schema $schema): Schema ->native(false) ->required() ->helperText('Tentukan semester yang sedang aktif saat ini. Semester ini akan digunakan untuk menyaring data yang relevan.'), + + Select::make('kosma_id') + ->label('Kosma') + ->placeholder('Pilih Mahasiswa sebagai Kosma') + ->options(Student::query()->pluck('full_name', 'id')) + ->searchable() + ->preload() + ->native(false) + ->helperText('Pilih mahasiswa yang bertanggung jawab sebagai Kosma (Ketua Kelas).'), ]) ->columns(2) ->columnSpanFull(), @@ -69,4 +81,20 @@ public function getSavedNotification(): ?Notification { return SystemNotification::update(); } + + protected function afterSave(): void + { + $settings = app(GeneralSettings::class); + $kosmaId = $settings->kosma_id; + + User::role('Kosma')->get()->each(fn (User $user) => $user->removeRole('Kosma')); + + if ($kosmaId) { + $student = Student::find($kosmaId); + + if ($student?->user) { + $student->user->assignRole(RoleEnum::Kosma); + } + } + } } diff --git a/app/Settings/GeneralSettings.php b/app/Settings/GeneralSettings.php index 67fe396..d48b791 100644 --- a/app/Settings/GeneralSettings.php +++ b/app/Settings/GeneralSettings.php @@ -8,6 +8,8 @@ class GeneralSettings extends Settings { public int $current_semester; + public ?int $kosma_id; + public static function group(): string { return 'general'; diff --git a/database/seeders/ShieldSeeder.php b/database/seeders/ShieldSeeder.php index db72dc9..534e1e2 100644 --- a/database/seeders/ShieldSeeder.php +++ b/database/seeders/ShieldSeeder.php @@ -167,32 +167,10 @@ public function run(): void "name": "Kosma", "guard_name": "web", "permissions" : [ - "ViewAny:Student", - "View:Student", - - "ViewAny:Lecturer", - "View:Lecturer", - - "ViewAny:Course", - "View:Course", - - "ViewAny:CourseSchedule", - "View:CourseSchedule", - - "ViewAny:Assignment", - "View:Assignment", - - "ViewAny:Attendance", - "View:Attendance", "Create:Attendance", "Update:Attendance", "Delete:Attendance", - "ViewAny:Material", - "View:Material", - - "ViewAny:StudyGroup", - "View:StudyGroup", "Create:StudyGroup", "Update:StudyGroup", "Delete:StudyGroup" diff --git a/database/settings/2026_03_11_220817_create_general_settings.php b/database/settings/2026_03_11_220817_create_general_settings.php index 1c5e858..10f80b7 100644 --- a/database/settings/2026_03_11_220817_create_general_settings.php +++ b/database/settings/2026_03_11_220817_create_general_settings.php @@ -6,6 +6,7 @@ { public function up(): void { - $this->migrator->add('general.current_semester', 1); + $this->migrator->add('general.current_semester', 4); + $this->migrator->add('general.kosma_id', null); } };