Files
alrahma_sunday_school/app/Support/SchoolYear/SchoolYearTableRegistry.php
T
root e06ccc9cc0
Tests / PHPUnit (push) Failing after 40s
ADD SCHOOL YEAR MANAGEMENT
2026-07-12 02:21:39 -04:00

155 lines
3.9 KiB
PHP

<?php
namespace App\Support\SchoolYear;
use InvalidArgumentException;
final class SchoolYearTableRegistry
{
public const YEAR_SCOPED = [
'additional_charges',
'archived_paypal_transactions',
'attendance_data',
'attendance_day',
'attendance_record',
'attendance_tracking',
'badge_print_logs',
'below_sixty_decisions',
'calendar_events',
'certificate_records',
'classSection',
'class_progress_reports',
'competitions',
'current_flag',
'discount_vouchers',
'early_dismissal_signatures',
'enrollments',
'events',
'exams',
'exam_drafts',
'expenses',
'final_exam',
'final_score',
'flag',
'grading_locks',
'homework',
'inventory_movements',
'invoices',
'late_slip_logs',
'manual_payments',
'midterm_exam',
'missing_score_overrides',
'parent_attendance_reports',
'parent_meeting_schedules',
'parent_notifications',
'participation',
'payments',
'payment_transactions',
'placement_batches',
'print_requests',
'project',
'quiz',
'refunds',
'reimbursements',
'reimbursement_batches',
'report_card_acknowledgements',
'scan_log',
'score_comments',
'semester_scores',
'staff_attendance',
'student_class',
'student_decisions',
'teacher_attendance_data',
'teacher_class',
'teacher_submission_notification_history',
'whatsapp_group_links',
'whatsapp_group_memberships',
];
public const GLOBAL = [
'authorized_users',
'cache',
'cache_locks',
'configuration',
'email_templates',
'ip_attempts',
'login_activity',
'migrations',
'nav_items',
'parent_accounts',
'password_reset_requests',
'password_resets',
'permissions',
'personal_access_tokens',
'preferences',
'role_nav_items',
'role_permissions',
'roles',
'school_years',
'sessions',
'settings',
'user_preferences',
'user_roles',
'users',
];
public const IDENTITY_WITH_YEAR_RELATION = [
'emergency_contacts',
'families',
'family_guardians',
'family_students',
'parents',
'staff',
'student_allergies',
'student_medical_conditions',
'students',
'teachers',
];
public const CONTEXT = [
'audit_logs',
'communication_logs',
'contactus',
'finance_notification_logs',
'messages',
'notification_recipients',
'notifications',
'payment_notification_logs',
'support_requests',
'user_notifications',
];
public static function isYearScoped(string $table): bool
{
return in_array($table, self::YEAR_SCOPED, true);
}
public static function isGlobal(string $table): bool
{
return in_array($table, self::GLOBAL, true);
}
public static function isIdentityWithYearRelation(string $table): bool
{
return in_array($table, self::IDENTITY_WITH_YEAR_RELATION, true);
}
public static function isContext(string $table): bool
{
return in_array($table, self::CONTEXT, true);
}
public static function categoryOf(string $table): string
{
return match (true) {
self::isYearScoped($table) => 'YEAR_SCOPED',
self::isGlobal($table) => 'GLOBAL',
self::isIdentityWithYearRelation($table) => 'IDENTITY_WITH_YEAR_RELATION',
self::isContext($table) => 'CONTEXT',
default => throw new InvalidArgumentException(
"Table '{$table}' is not registered for school-year behavior."
),
};
}
}