sispace/app/Filament/Pages/System/ManageSettings.php

101 lines
3.3 KiB
PHP

<?php
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;
use Filament\Forms\Components\Select;
use Filament\Notifications\Notification;
use Filament\Pages\SettingsPage;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;
use UnitEnum;
class ManageSettings extends SettingsPage
{
use HasPageShield;
protected static string|UnitEnum|null $navigationGroup = 'Sistem';
protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedCog6Tooth;
protected static ?string $title = 'Pengaturan';
protected static ?string $navigationLabel = 'Pengaturan';
protected static ?string $slug = 'system/settings';
public static function getPagePermission(): string
{
return 'View:ManageSettings';
}
protected static ?int $navigationSort = 5;
protected static string $settings = GeneralSettings::class;
public function schema(Schema $schema): Schema
{
return $schema
->components([
Section::make()
->schema([
Select::make('current_semester')
->label('Semester Sekarang')
->placeholder('Pilih Semester')
->options([
1 => 'Semester 1',
2 => 'Semester 2',
3 => 'Semester 3',
4 => 'Semester 4',
5 => 'Semester 5',
6 => 'Semester 6',
7 => 'Semester 7',
8 => 'Semester 8',
])
->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(),
]);
}
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);
}
}
}
}