reconstruction of the project

This commit is contained in:
root
2026-03-08 16:33:24 -04:00
parent 23b7db1107
commit c8de5f7edc
9157 changed files with 77877 additions and 1073823 deletions
@@ -0,0 +1,28 @@
<?php
namespace App\Http\Requests\Administrator;
use App\Http\Requests\ApiFormRequest;
class SaveAdminNotificationSubjectsRequest extends ApiFormRequest
{
public function authorize(): bool
{
return auth()->check();
}
public function rules(): array
{
return [
'subjects' => ['required', 'array'],
];
}
public function messages(): array
{
return [
'subjects.required' => 'Subjects payload is required.',
'subjects.array' => 'Subjects payload must be an array.',
];
}
}
@@ -0,0 +1,28 @@
<?php
namespace App\Http\Requests\Administrator;
use App\Http\Requests\ApiFormRequest;
class SavePrintRecipientsRequest extends ApiFormRequest
{
public function authorize(): bool
{
return auth()->check();
}
public function rules(): array
{
return [
'notify' => ['required', 'array'],
];
}
public function messages(): array
{
return [
'notify.required' => 'Notify payload is required.',
'notify.array' => 'Notify payload must be an array.',
];
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Http\Requests\Administrator;
use App\Http\Requests\ApiFormRequest;
class SendTeacherSubmissionNotificationsRequest extends ApiFormRequest
{
public function authorize(): bool
{
return auth()->check();
}
public function rules(): array
{
return [
'notify' => ['required', 'array', 'min:1'],
'missing_items' => ['nullable', 'array'],
];
}
public function messages(): array
{
return [
'notify.required' => 'Select at least one teacher to notify.',
'notify.array' => 'Notify payload must be an array.',
'notify.min' => 'Select at least one teacher to notify.',
'missing_items.array' => 'Missing items payload must be an array.',
];
}
}
@@ -0,0 +1,34 @@
<?php
namespace App\Http\Requests\Administrator;
use App\Http\Requests\ApiFormRequest;
class SubmitAdministratorAbsenceRequest extends ApiFormRequest
{
public function authorize(): bool
{
return auth()->check();
}
public function rules(): array
{
return [
'dates' => ['required', 'array', 'min:1'],
'dates.*' => ['required', 'date_format:Y-m-d'],
'reason_type' => ['nullable', 'string', 'max:100'],
'reason' => ['required', 'string', 'max:2000'],
];
}
public function messages(): array
{
return [
'dates.required' => 'At least one date is required.',
'dates.array' => 'Dates must be submitted as an array.',
'dates.min' => 'At least one date is required.',
'dates.*.date_format' => 'Each date must be in Y-m-d format.',
'reason.required' => 'Reason is required.',
];
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Http\Requests\Administrator;
use App\Http\Requests\ApiFormRequest;
use Illuminate\Validation\Rule;
class UpdateEnrollmentStatusesRequest extends ApiFormRequest
{
public function authorize(): bool
{
return auth()->check();
}
public function rules(): array
{
$allowedStatuses = [
'admission under review',
'payment pending',
'enrolled',
'withdraw under review',
'refund pending',
'withdrawn',
'denied',
'waitlist',
];
return [
'enrollment_status' => ['required', 'array', 'min:1'],
'enrollment_status.*' => ['required', 'string', Rule::in($allowedStatuses)],
];
}
public function messages(): array
{
return [
'enrollment_status.required' => 'Enrollment statuses are required.',
'enrollment_status.array' => 'Enrollment statuses must be an array.',
'enrollment_status.min' => 'At least one enrollment status is required.',
'enrollment_status.*.in' => 'One or more enrollment statuses are invalid.',
];
}
}
@@ -2,7 +2,7 @@
namespace App\Http\Requests\Api\Admin;
use Illuminate\Foundation\Http\FormRequest;
use App\Http\Requests\ApiFormRequest;
use Illuminate\Validation\Rule;
class IndexAdminProgressRequest extends FormRequest
@@ -2,7 +2,7 @@
namespace App\Http\Requests\Admin;
use Illuminate\Foundation\Http\FormRequest;
use App\Http\Requests\ApiFormRequest;
class SaveAdminNotificationSubjectsRequest extends FormRequest
{
@@ -2,7 +2,7 @@
namespace App\Http\Requests\Admin;
use Illuminate\Foundation\Http\FormRequest;
use App\Http\Requests\ApiFormRequest;
class SavePrintNotificationRecipientsRequest extends FormRequest
{
@@ -2,7 +2,7 @@
namespace App\Http\Requests\Admin;
use Illuminate\Foundation\Http\FormRequest;
use App\Http\Requests\ApiFormRequest;
class SendTeacherSubmissionNotificationsRequest extends FormRequest
{
+20
View File
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Requests;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
abstract class ApiFormRequest extends FormRequest
{
protected function failedValidation(Validator $validator): void
{
throw new HttpResponseException(
response()->json([
'message' => 'Validation failed.',
'errors' => $validator->errors(),
], 422)
);
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreAssignmentRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'student_id' => ['required', 'integer', 'exists:students,id'],
'class_section_id' => ['required', 'integer', 'exists:class_sections,id'],
'semester' => ['required', 'string', 'max:50'],
'school_year' => ['required', 'string', 'max:50'],
'description' => ['nullable', 'string'],
];
}
}
@@ -2,7 +2,7 @@
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use App\Http\Requests\ApiFormRequest;
class StoreStudentAssignmentRequest extends FormRequest
{
@@ -0,0 +1,27 @@
<?php
namespace App\Http\Requests\Attendance;
use Illuminate\Foundation\Http\FormRequest;
class AdminAddAttendanceEntryRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'class_section_id' => ['required', 'integer'],
'student_id' => ['required', 'integer'],
'school_id' => ['nullable', 'string'],
'status' => ['required', 'in:present,absent,late'],
'date' => ['nullable', 'date'],
'reason' => ['nullable', 'string'],
'class_id' => ['nullable', 'integer'],
'is_reported' => ['nullable', 'in:yes,no'],
];
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Http\Requests\Attendance;
use Illuminate\Foundation\Http\FormRequest;
class SaveAdminAttendanceRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'date' => ['required', 'date'],
'semester' => ['required', 'string'],
'school_year' => ['required', 'string'],
'admins' => ['nullable', 'array'],
'staff' => ['nullable', 'array'],
];
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Http\Requests\Attendance;
use Illuminate\Foundation\Http\FormRequest;
class SaveStaffAttendanceCellRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'date' => ['required', 'date'],
'status' => ['nullable', 'in:present,absent,late'],
'user_id' => ['required', 'integer'],
'role_name' => ['nullable', 'string'],
'semester' => ['required', 'string'],
'school_year' => ['required', 'string'],
'reason' => ['nullable', 'string'],
];
}
}
@@ -0,0 +1,29 @@
<?php
namespace App\Http\Requests\Attendance;
use Illuminate\Foundation\Http\FormRequest;
class TeacherSubmitAttendanceRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'class_section_id' => ['required'],
'class_id' => ['nullable', 'integer'],
'date' => ['nullable', 'date'],
'attendance' => ['required', 'array', 'min:1'],
'attendance.*.student_id' => ['required', 'integer'],
'attendance.*.school_id' => ['nullable', 'string'],
'attendance.*.status' => ['required', 'in:present,absent,late'],
'attendance.*.reason' => ['nullable', 'string'],
'attendance.*.is_reported' => ['nullable'],
'teachers' => ['required', 'array', 'min:1'],
];
}
}
@@ -0,0 +1,29 @@
<?php
namespace App\Http\Requests\Attendance;
use Illuminate\Foundation\Http\FormRequest;
class UpdateAttendanceManagementRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'class_section_id' => ['required', 'integer'],
'student_id' => ['required', 'integer'],
'school_id' => ['nullable', 'string'],
'status' => ['required', 'in:present,absent,late'],
'date' => ['required', 'date'],
'reason' => ['nullable', 'string'],
'class_id' => ['nullable', 'integer'],
'semester' => ['nullable', 'string'],
'school_year' => ['nullable', 'string'],
'is_reported' => ['nullable'],
];
}
}
@@ -2,9 +2,9 @@
namespace App\Http\Requests\AttendanceCommentTemplate;
use Illuminate\Foundation\Http\FormRequest;
use App\Http\Requests\ApiFormRequest;
class StoreAttendanceCommentTemplateRequest extends FormRequest
class StoreAttendanceCommentTemplateRequest extends ApiFormRequest
{
public function authorize(): bool
{
@@ -32,4 +32,4 @@ class StoreAttendanceCommentTemplateRequest extends FormRequest
$this->merge(['is_active' => true]);
}
}
}
}
@@ -2,9 +2,9 @@
namespace App\Http\Requests\AttendanceCommentTemplate;
use Illuminate\Foundation\Http\FormRequest;
use App\Http\Requests\ApiFormRequest;
class UpdateAttendanceCommentTemplateRequest extends FormRequest
class UpdateAttendanceCommentTemplateRequest extends ApiFormRequest
{
public function authorize(): bool
{
@@ -43,4 +43,4 @@ class UpdateAttendanceCommentTemplateRequest extends FormRequest
]);
}
}
}
}
@@ -0,0 +1,23 @@
<?php
namespace App\Http\Requests\AttendanceTracking;
use Illuminate\Foundation\Http\FormRequest;
class ComposeAttendanceEmailRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'student_id' => ['required', 'integer', 'min:1'],
'code' => ['nullable', 'string'],
'variant' => ['nullable', 'string'],
'incident_date' => ['nullable', 'date_format:Y-m-d'],
];
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Http\Requests\AttendanceTracking;
use Illuminate\Foundation\Http\FormRequest;
class ParentsInfoRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'student_id' => ['required', 'integer', 'min:1'],
];
}
protected function prepareForValidation(): void
{
$this->merge([
'student_id' => $this->query('student_id'),
]);
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Http\Requests\AttendanceTracking;
use Illuminate\Foundation\Http\FormRequest;
class RecordAttendanceTrackingRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'student_id' => ['required', 'integer', 'min:1'],
'date' => ['required', 'date_format:Y-m-d'],
'parent_email' => ['nullable', 'email'],
'parent_name' => ['nullable', 'string'],
'subject_type' => ['nullable', 'string'],
'semester' => ['nullable', 'string'],
'school_year' => ['nullable', 'string'],
];
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Http\Requests\AttendanceTracking;
use Illuminate\Foundation\Http\FormRequest;
class SaveAttendanceNotificationNoteRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'student_id' => ['required', 'integer', 'min:1'],
'code' => ['required', 'string'],
'note' => ['required', 'string'],
'incident_date' => ['nullable', 'date_format:Y-m-d'],
'to' => ['nullable', 'email'],
'subject' => ['nullable', 'string'],
'variant' => ['nullable', 'string'],
];
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Http\Requests\AttendanceTracking;
use Illuminate\Foundation\Http\FormRequest;
class SendAttendanceManualEmailRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'student_id' => ['required', 'integer', 'min:1'],
'to' => ['required', 'email'],
'subject' => ['required', 'string'],
'body_html' => ['required', 'string'],
'code' => ['required', 'string'],
'variant' => ['nullable', 'string'],
'incident_date' => ['nullable', 'date_format:Y-m-d'],
];
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Http\Requests\Badges;
use Illuminate\Foundation\Http\FormRequest;
class BadgePrintStatusRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
protected function prepareForValidation(): void
{
$userIds = $this->input('user_ids', []);
if (is_string($userIds)) {
$userIds = array_filter(array_map('trim', explode(',', $userIds)), 'strlen');
} elseif (!is_array($userIds)) {
$userIds = $userIds ? [$userIds] : [];
}
$this->merge([
'user_ids' => array_values(array_unique(array_map(static fn ($v) => (int) $v, $userIds))),
]);
}
public function rules(): array
{
return [
'user_ids' => ['nullable', 'array'],
'user_ids.*' => ['integer', 'min:1'],
'school_year' => ['nullable', 'string', 'max:50'],
'active_role' => ['nullable', 'string', 'in:teacher,ta,admin,staff'],
];
}
public function normalizedUserIds(): array
{
return $this->input('user_ids', []);
}
}
@@ -0,0 +1,41 @@
<?php
namespace App\Http\Requests\Badges;
use Illuminate\Foundation\Http\FormRequest;
class GenerateBadgePdfRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
protected function prepareForValidation(): void
{
$userIds = $this->input('user_ids', []);
if (is_string($userIds)) {
$userIds = array_filter(array_map('trim', explode(',', $userIds)), 'strlen');
} elseif (!is_array($userIds)) {
$userIds = $userIds ? [$userIds] : [];
}
$this->merge([
'user_ids' => array_values(array_unique(array_map(static fn ($v) => (int) $v, $userIds))),
'roles' => is_array($this->input('roles')) ? $this->input('roles') : [],
'classes' => is_array($this->input('classes')) ? $this->input('classes') : [],
]);
}
public function rules(): array
{
return [
'user_ids' => ['required', 'array', 'min:1'],
'user_ids.*' => ['integer', 'min:1'],
'school_year' => ['nullable', 'string', 'max:50'],
'roles' => ['nullable', 'array'],
'classes' => ['nullable', 'array'],
];
}
}
@@ -0,0 +1,41 @@
<?php
namespace App\Http\Requests\Badges;
use Illuminate\Foundation\Http\FormRequest;
class LogBadgePrintRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
protected function prepareForValidation(): void
{
$userIds = $this->input('user_ids', []);
if (is_string($userIds)) {
$userIds = array_filter(array_map('trim', explode(',', $userIds)), 'strlen');
} elseif (!is_array($userIds)) {
$userIds = $userIds ? [$userIds] : [];
}
$this->merge([
'user_ids' => array_values(array_unique(array_map(static fn ($v) => (int) $v, $userIds))),
'roles' => is_array($this->input('roles')) ? $this->input('roles') : [],
'classes' => is_array($this->input('classes')) ? $this->input('classes') : [],
]);
}
public function rules(): array
{
return [
'user_ids' => ['required', 'array', 'min:1'],
'user_ids.*' => ['integer', 'min:1'],
'school_year' => ['nullable', 'string', 'max:50'],
'roles' => ['nullable', 'array'],
'classes' => ['nullable', 'array'],
];
}
}