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.217.69
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\AttendanceResource\Pages; use App\Models\Attendance; use App\Models\User; 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\Support\Facades\Auth; use Filament\Notifications\Notification; class AttendanceResource extends Resource { protected static ?string $model = Attendance::class; protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; protected static ?string $navigationGroup = 'Learning Management'; protected static ?string $label = 'Attendance Records'; public static function form(Form $form): Form { return $form ->schema([ Forms\Components\Section::make('Attendance Details') ->schema([ Forms\Components\Select::make('grade_id') ->label('Grade') ->relationship('grade', 'name', function ($query) { $user = Auth::user(); if ($user->hasRole('teacher')) { $gradeIds = $user->assignments->pluck('grade_id'); return $query->whereIn('id', $gradeIds); } return $query; }) ->required() ->searchable() ->preload() ->reactive(), Forms\Components\MultiSelect::make('student_ids') ->label('Students') ->options(function (callable $get) { $gradeId = $get('grade_id'); if (!$gradeId) return []; return User::whereHas('roles', fn ($q) => $q->where('name', 'student')) ->where('grade_id', $gradeId) ->pluck('name', 'id') ->all(); }) ->required() ->searchable() ->preload() ->reactive() ->default(function (callable $get) { $gradeId = $get('grade_id'); if (!$gradeId) return []; return User::whereHas('roles', fn ($q) => $q->where('name', 'student')) ->where('grade_id', $gradeId) ->pluck('id') ->all(); }), Forms\Components\DatePicker::make('date') ->default(now()) ->required(), Forms\Components\TextInput::make('shift') ->required() ->default('Morning'), Forms\Components\Toggle::make('is_present') ->label('Present') ->default(true), Forms\Components\Textarea::make('remark') ->rows(2), ]) ->columns(2), ]); } public static function table(Table $table): Table { return $table ->query(function () { $user = Auth::user(); if ($user->hasRole('teacher')) { $gradeIds = $user->assignments->pluck('grade_id'); return Attendance::whereIn('grade_id', $gradeIds); } if ($user->hasRole('student')) { // Return a Builder object for the student's attendance records return Attendance::where('student_id', $user->id); } return Attendance::query(); }) ->columns([ Tables\Columns\TextColumn::make('student.name') ->label('Student') ->sortable() ->searchable(), Tables\Columns\TextColumn::make('grade.name') ->label('Grade') ->sortable(), Tables\Columns\TextColumn::make('date') ->date() ->sortable(), Tables\Columns\TextColumn::make('shift') ->sortable(), Tables\Columns\TextColumn::make('is_present') ->label('Status') ->formatStateUsing(fn ($state) => $state ? 'Present' : 'Absent') ->sortable(), Tables\Columns\TextColumn::make('remark') ->limit(50), ]) ->filters([ Tables\Filters\SelectFilter::make('grade') ->relationship('grade', 'name') ->label('Filter by Grade'), Tables\Filters\SelectFilter::make('is_present') ->label('Filter by Status') ->options([ '1' => 'Present', '0' => 'Absent', ]), Tables\Filters\Filter::make('date') ->form([ Forms\Components\DatePicker::make('date_from') ->label('From Date'), Forms\Components\DatePicker::make('date_to') ->label('To Date'), ]) ->query(function (Builder $query, array $data): Builder { return $query ->when($data['date_from'], fn (Builder $query, $date) => $query->whereDate('date', '>=', $date)) ->when($data['date_to'], fn (Builder $query, $date) => $query->whereDate('date', '<=', $date)); }) ->indicateUsing(function (array $data): array { $indicators = []; if ($data['date_from'] ?? null) { $indicators[] = 'From ' . $data['date_from']; } if ($data['date_to'] ?? null) { $indicators[] = 'To ' . $data['date_to']; } return $indicators; }), ]) ->actions([ Tables\Actions\EditAction::make(), Tables\Actions\DeleteAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]) ->headerActions([ Tables\Actions\Action::make('bulkAttendanceByGrade') ->label('Take Attendance by Grade') ->icon('heroicon-o-calendar') ->form([ Forms\Components\Select::make('grade_id') ->label('Grade') ->relationship('grade', 'name', function ($query) { $user = Auth::user(); if ($user->hasRole('teacher')) { $gradeIds = $user->assignments->pluck('grade_id'); return $query->whereIn('id', $gradeIds); } return $query; }) ->required() ->searchable() ->preload() ->reactive() ->afterStateUpdated(function (callable $set, $state) { if ($state) { $students = User::whereHas('roles', fn ($q) => $q->where('name', 'student')) ->where('grade_id', $state) ->get(); if ($students->isEmpty()) { Notification::make() ->title('No Students Found') ->warning() ->send(); $set('students', []); return; } $attendanceData = $students->map(function ($student) { return [ 'student_id' => $student->id, 'student_name' => $student->name, 'is_present' => true, 'remark' => null, ]; })->values()->all(); $set('students', $attendanceData); } }), Forms\Components\DatePicker::make('date') ->default(now()) ->required(), Forms\Components\TextInput::make('shift') ->default('Morning') ->required(), Forms\Components\Toggle::make('mark_all_present') ->label('Mark All Present') ->default(true) ->reactive() ->afterStateUpdated(function (callable $set, $state, $get) { $students = $get('students'); if ($students) { $updatedStudents = array_map(function ($student) use ($state) { $student['is_present'] = $state; return $student; }, $students); $set('students', $updatedStudents); } }), Forms\Components\Repeater::make('students') ->label('Students in Selected Grade') ->schema([ Forms\Components\Hidden::make('student_id'), Forms\Components\TextInput::make('student_name') ->label('Student') ->disabled() ->dehydrated(false), Forms\Components\Toggle::make('is_present') ->label('Present') ->default(true), Forms\Components\Textarea::make('remark') ->rows(2), ]) ->columns(3) ->default([]) ->itemLabel(fn (array $state) => $state['student_name'] ?? 'New Attendance'), ]) ->action(function (array $data) { foreach ($data['students'] as $studentData) { Attendance::updateOrCreate( [ 'student_id' => $studentData['student_id'], 'date' => $data['date'], 'shift' => $data['shift'], ], [ 'grade_id' => $data['grade_id'], 'is_present' => $studentData['is_present'], 'remark' => $studentData['remark'], ] ); } Notification::make() ->title('Attendance Recorded') ->success() ->send(); }) ->modalHeading('Take Attendance for Students in a Grade') ->modalDescription('Mark attendance for all students in the selected grade.'), ]); } public static function getPages(): array { return [ 'index' => Pages\ListAttendances::route('/'), 'create' => Pages\CreateAttendance::route('/create'), 'edit' => Pages\EditAttendance::route('/{record}/edit'), ]; } public static function getNavigationBadge(): ?string { $user = Auth::user(); if ($user->hasRole('admin')) { return (string) Attendance::count(); } elseif ($user->hasRole('teacher')) { $gradeIds = $user->assignments->pluck('grade_id'); return (string) Attendance::whereIn('grade_id', $gradeIds)->count(); } return (string) 0; } public static function canViewAny(): bool { return Auth::user()->hasRole(['admin', 'teacher','student']); } public static function canCreate(): bool { return Auth::user()->hasRole(['admin', 'teacher']); } public static function canEdit($record): bool { $user = Auth::user(); return $user->hasRole('admin') || ($user->hasRole('teacher') && in_array($record->grade_id, $user->assignments->pluck('grade_id')->all())); } public static function canDelete($record): bool { return Auth::user()->hasRole('admin'); } }