Linux sg77.dns-private.com 5.14.0-503.40.1.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Mon May 5 06:06:04 EDT 2025 x86_64
LiteSpeed
Server IP : 135.181.230.13 & Your IP : 216.73.216.199
Domains :
Cant Read [ /etc/named.conf ]
User : pilasate
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
home /
pilasate /
schoolms /
app /
Filament /
Resources /
Delete
Unzip
Name
Size
Permission
Date
Action
AttendanceResource
[ DIR ]
drwxrwxrwx
2025-03-23 13:10
CourseAssignmentResource
[ DIR ]
drwxrwxrwx
2025-03-23 13:10
CourseEnrollmentResource
[ DIR ]
drwxrwxrwx
2025-03-23 13:10
GradeResource
[ DIR ]
drwxrwxrwx
2025-03-23 13:10
MarkResource
[ DIR ]
drwxrwxrwx
2025-03-23 13:10
MessageResource
[ DIR ]
drwxr-xr-x
2025-03-27 22:56
PromotionResource
[ DIR ]
drwxrwxrwx
2025-03-24 00:50
ReportResource
[ DIR ]
drwxrwxrwx
2025-03-24 10:11
StudentResource
[ DIR ]
drwxrwxrwx
2025-03-23 13:10
SubjectResource
[ DIR ]
drwxrwxrwx
2025-03-23 13:10
TeacherResource
[ DIR ]
drwxrwxrwx
2025-03-23 13:10
UserResource
[ DIR ]
drwxrwxrwx
2025-03-23 13:10
Widgets
[ DIR ]
drwxrwxrwx
2025-03-23 19:51
AttendanceResource.php
13.87
KB
-rw-rw-rw-
2025-03-24 07:12
CourseAssignmentResource.php
7.36
KB
-rw-rw-rw-
2025-03-27 22:46
CourseEnrollmentResource.php
15.35
KB
-rw-rw-rw-
2025-03-24 06:07
GradeResource.php
3.48
KB
-rw-rw-rw-
2025-03-24 06:33
MarkResource.php
17.63
KB
-rw-rw-rw-
2025-03-28 00:00
MessageResource.php
5.43
KB
-rw-r--r--
2025-03-28 00:04
PromotionResource.php
8.05
KB
-rw-rw-rw-
2025-03-24 03:04
StudentResource.php
5.58
KB
-rw-rw-rw-
2025-03-27 22:49
SubjectResource.php
2.81
KB
-rw-rw-rw-
2025-03-24 11:32
TeacherResource.php
3.92
KB
-rw-rw-rw-
2025-03-24 11:32
UserResource.php
4.91
KB
-rw-rw-rw-
2025-03-24 06:45
Save
Rename
<?php namespace App\Filament\Resources; use App\Filament\Resources\PromotionResource\Pages; use App\Filament\Resources\PromotionResource\RelationManagers; use App\Models\Promotion; use Filament\Forms; use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Support\Facades\Auth; use App\Models\CourseEnrollment; class PromotionResource extends Resource { protected static ?string $model = Promotion::class; protected static ?string $navigationIcon = 'heroicon-o-arrow-up'; // Updated to reflect promotion protected static ?string $navigationGroup = 'Result Assessment'; // Consistent with your context public static function form(Form $form): Form { return $form ->schema([ Forms\Components\Section::make('Promotion Details') ->schema([ Forms\Components\Select::make('student_id') ->label('Student') ->relationship('student', 'name', function ($query) { $user = Auth::user(); if ($user->hasRole('teacher')) { // Teachers only see students in their assigned courses $courseIds = $user->assignments->pluck('course_id'); return $query->whereHas('roles', fn ($q) => $q->where('name', 'student')) ->whereIn('id', CourseEnrollment::whereIn('course_id', $courseIds) ->pluck('student_id')); } // Admins see all students return $query->whereHas('roles', fn ($q) => $q->where('name', 'student')); }) ->required() ->searchable() ->preload() ->reactive() ->afterStateUpdated(function (callable $set, $state) { if ($state) { $student = \App\Models\User::find($state); $set('from_grade_id', $student->grade_id); } }), Forms\Components\Select::make('from_grade_id') ->label('From Grade') ->relationship('fromGrade', 'name') ->required() ->disabled(fn ($get) => $get('student_id') !== null) // Auto-filled from student ->dehydrated(true), Forms\Components\Select::make('to_grade_id') ->label('To Grade') ->relationship('toGrade', 'name') ->required() ->options(function ($get) { $fromGradeId = $get('from_grade_id'); if ($fromGradeId) { $fromLevel = \App\Models\Grade::find($fromGradeId)->level; return \App\Models\Grade::where('level', '>', $fromLevel)->pluck('name', 'id'); } return \App\Models\Grade::pluck('name', 'id'); }) ->searchable() ->preload(), Forms\Components\DatePicker::make('promotion_date') ->label('Promotion Date') ->default(now()) ->required(), Forms\Components\Select::make('status') ->label('Status') ->options([ 'pending' => 'Pending', 'approved' => 'Approved', 'rejected' => 'Rejected', ]) ->default('pending') ->required(), Forms\Components\Textarea::make('remarks') ->label('Remarks') ->rows(3) ->nullable() ->placeholder('Optional notes about this promotion'), ]) ->columns(2), ]); } public static function table(Table $table): Table { return $table ->query(Promotion::query()) ->columns([ Tables\Columns\TextColumn::make('student.name') ->label('Student') ->sortable() ->searchable(), Tables\Columns\TextColumn::make('fromGrade.name') ->label('From Grade') ->sortable(), Tables\Columns\TextColumn::make('toGrade.name') ->label('To Grade') ->sortable(), Tables\Columns\TextColumn::make('promotion_date') ->label('Promotion Date') ->date() ->sortable(), Tables\Columns\TextColumn::make('status') ->sortable() ->badge() ->color(fn (string $state): string => match ($state) { 'pending' => 'gray', 'approved' => 'success', 'rejected' => 'danger', }), Tables\Columns\TextColumn::make('remarks') ->limit(50) ->tooltip(fn ($state) => $state), ]) ->filters([ Tables\Filters\SelectFilter::make('status') ->options([ 'pending' => 'Pending', 'approved' => 'Approved', 'rejected' => 'Rejected', ]) ->label('Filter by Status'), Tables\Filters\SelectFilter::make('from_grade') ->relationship('fromGrade', 'name') ->label('Filter by From Grade'), Tables\Filters\SelectFilter::make('to_grade') ->relationship('toGrade', 'name') ->label('Filter by To Grade'), ]) ->actions([ Tables\Actions\EditAction::make(), Tables\Actions\DeleteAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]) ->defaultSort('promotion_date', 'desc'); } public static function getRelations(): array { return [ // Add relation managers if needed, e.g., for student details ]; } public static function getPages(): array { return [ 'index' => Pages\ListPromotions::route('/'), 'create' => Pages\CreatePromotion::route('/create'), 'edit' => Pages\EditPromotion::route('/{record}/edit'), ]; } public static function canViewAny(): bool { return Auth::user()->hasRole(['admin']); // Restrict to admins, adjust as needed } public static function canCreate(): bool { return Auth::user()->hasRole('admin'); } public static function canEdit($record): bool { return Auth::user()->hasRole('admin'); } public static function canDelete($record): bool { return Auth::user()->hasRole('admin'); } public static function getNavigationBadge(): ?string { return (string) Promotion::where('status', 'pending')->count(); // Show pending promotions } }