Files
2026-06-01 02:08:27 -04:00

180 lines
9.4 KiB
PHP

<?php
namespace App\Database\Seeds;
use CodeIgniter\Database\Seeder;
class NavSeeder extends Seeder
{
public function run()
{
$db = \Config\Database::connect();
// Top-level groups (dropdown headers are just parents with no URL)
$groups = [
['label'=>'Users', 'url'=>null, 'sort_order'=>10],
['label'=>'Roles', 'url'=>null, 'sort_order'=>20],
['label'=>'Configuration', 'url'=>null, 'sort_order'=>30],
['label'=>'Staffing', 'url'=>null, 'sort_order'=>40],
['label'=>'Parents', 'url'=>null, 'sort_order'=>50],
['label'=>'Student-Affairs', 'url'=>null, 'sort_order'=>60],
['label'=>'Classes', 'url'=>null, 'sort_order'=>70],
['label'=>'Communication', 'url'=>null, 'sort_order'=>80],
['label'=>'Financial', 'url'=>null, 'sort_order'=>90],
['label'=>'Printables', 'url'=>null, 'sort_order'=>100],
['label'=>'Event Management', 'url'=>null, 'sort_order'=>110],
];
$builder = $db->table('nav_items');
$ids = [];
foreach ($groups as $g) {
$builder->insert([
'parent_id' => null,
'label' => $g['label'],
'url' => null,
'sort_order' => $g['sort_order'],
'is_enabled' => 1,
'created_at' => utc_now()
]);
$ids[$g['label']] = $db->insertID();
}
// Children for Users
$items = [
['parent'=>'Users', 'label'=>'Active Notifications', 'url'=>'notifications/active', 'sort_order'=>1],
['parent'=>'Users', 'label'=>'Deleted Notifications','url'=>'notifications/deleted','sort_order'=>2],
['parent'=>'Users', 'label'=>'Login Activity', 'url'=>'user/login_activity', 'sort_order'=>3],
['parent'=>'Users', 'label'=>'User List', 'url'=>'user/user_list', 'sort_order'=>4],
// Roles
['parent'=>'Roles', 'label'=>'Assign User Role', 'url'=>'rolepermission/assign_role', 'sort_order'=>1],
['parent'=>'Roles', 'label'=>'Role Management', 'url'=>'rolepermission/roles', 'sort_order'=>2],
// Configuration
['parent'=>'Configuration','label'=>'Add/Edit Configuration','url'=>'configuration/configuration_view','sort_order'=>1],
// Staffing
['parent'=>'Staffing','label'=>'Staff Profile','url'=>'staff/index','sort_order'=>1],
['parent'=>'Staffing','label'=>'Teacher Class Assignment','url'=>'administrator/teacher_class_assignment','sort_order'=>2],
// Parents
['parent'=>'Parents','label'=>'Parent Profile','url'=>'administrator/parent_profiles','sort_order'=>1],
// Student-Affairs
['parent'=>'Student-Affairs','label'=>'Attendance Management','url'=>'administrator/daily_attendance','sort_order'=>1],
['parent'=>'Student-Affairs','label'=>'Attendance Tracking System','url'=>'attendance/violations','sort_order'=>2],
['parent'=>'Student-Affairs','label'=>'Attendance Scans','url'=>'rfid_coming_soon','sort_order'=>3],
['parent'=>'Student-Affairs','label'=>'Classes List','url'=>'administrator/class_assignment','sort_order'=>4],
['parent'=>'Student-Affairs','label'=>'Emergency Contact','url'=>'administrator/emergency_contact','sort_order'=>5],
['parent'=>'Student-Affairs','label'=>'Enrollment-Withdrawal','url'=>'enroll_withdraw/enrollment_withdrawal','sort_order'=>6],
['parent'=>'Student-Affairs','label'=>'Flags Management','url'=>'flags/flags_management','sort_order'=>7],
['parent'=>'Student-Affairs','label'=>'School Calendar','url'=>'administrator/calendar_view','sort_order'=>8],
['parent'=>'Student-Affairs','label'=>'Score Analysis','url'=>'report/combined','sort_order'=>9],
['parent'=>'Student-Affairs','label'=>'Score Management','url'=>'grading','sort_order'=>10],
['parent'=>'Student-Affairs','label'=>'Student Class Assignment','url'=>'administrator/student_class_assignment','sort_order'=>11],
['parent'=>'Student-Affairs','label'=>'Student Profile','url'=>'administrator/student_profiles','sort_order'=>12],
// Classes
['parent'=>'Classes','label'=>'Classes List','url'=>'administrator/class_assignment','sort_order'=>1],
// Communication
['parent'=>'Communication','label'=>'Parent Email Extractor','url'=>'emails/parent_email_extractor','sort_order'=>1],
['parent'=>'Communication','label'=>'Parent Profile','url'=>'administrator/parent_profiles','sort_order'=>2],
['parent'=>'Communication','label'=>'Student Profile','url'=>'administrator/student_profiles','sort_order'=>3],
// Financial
['parent'=>'Financial','label'=>'Discount Management','url'=>'discounts/list','sort_order'=>1],
['parent'=>'Financial','label'=>'Expenses Management','url'=>'expenses/index','sort_order'=>2],
['parent'=>'Financial','label'=>'Financial Report','url'=>'payment/financial_report','sort_order'=>3],
['parent'=>'Financial','label'=>'Tuition Forecast','url'=>'administrator/tuition-forecast','sort_order'=>4],
['parent'=>'Financial','label'=>'Invoices Management','url'=>'invoice_payment/invoice_management','sort_order'=>5],
['parent'=>'Financial','label'=>'Manual Payment','url'=>'payment/manual_pay','sort_order'=>6],
['parent'=>'Financial','label'=>'Refund Management','url'=>'refunds/list','sort_order'=>7],
['parent'=>'Financial','label'=>'Reimbursement Management','url'=>'reimbursements/index','sort_order'=>8],
// Printables
['parent'=>'Printables','label'=>'Badges','url'=>'printables_reports/badge_form','sort_order'=>1],
['parent'=>'Printables','label'=>'Class Prep','url'=>'class-prep','sort_order'=>2],
['parent'=>'Printables','label'=>'Report Cards','url'=>'printables_reports/report_card','sort_order'=>3],
['parent'=>'Printables','label'=>'Stickers','url'=>'printables_reports/stickers','sort_order'=>4],
// Event Management
['parent'=>'Event Management','label'=>'Calendar','url'=>'administrator/calendar','sort_order'=>1],
['parent'=>'Event Management','label'=>'Events','url'=>'administrator/events','sort_order'=>2],
];
foreach ($items as $it) {
$builder->insert([
'parent_id' => $ids[$it['parent']] ?? null,
'label' => $it['label'],
'url' => $it['url'],
'sort_order' => $it['sort_order'],
'is_enabled' => 1,
'created_at' => utc_now(),
]);
}
// Map roles quickly: give full menu to administrator & principal; a subset to others
$roleMap = $db->table('role_nav_items');
$navRows = $db->table('nav_items')->orderBy('id')->get()->getResultArray();
$grantAllTo = ['administrator','principal','vice_principal'];
foreach ($navRows as $row) {
foreach ($grantAllTo as $role) {
$roleMap->insert([
'role' => strtolower($role),
'nav_item_id' => $row['id'],
'created_at' => utc_now()
]);
}
}
// Example: "admin" (limited)
$limitForAdmin = ['Enrollment-Withdrawal','Invoices Management'];
foreach ($navRows as $row) {
if (in_array($row['label'], $limitForAdmin, true)) {
$roleMap->insert([
'role' => 'admin',
'nav_item_id' => $row['id'],
'created_at' => utc_now()
]);
}
}
// Example: HOD Communication
$hodComm = ['Communication','Parent Profile','Student Profile','Parent Email Extractor'];
foreach ($navRows as $row) {
if (in_array($row['label'], $hodComm, true)) {
$roleMap->insert([
'role' => 'head of department (communication)',
'nav_item_id' => $row['id'],
'created_at' => utc_now()
]);
}
}
// Example: HOD Education (Student-Affairs group)
$hodEduLabels = ['Student-Affairs','Attendance Management','Classes List','Emergency Contact','Enrollment-Withdrawal','Flags Management','School Calendar','Score Analysis','Score Management','Student Class Assignment','Student Profile'];
foreach ($navRows as $row) {
if (in_array($row['label'], $hodEduLabels, true)) {
$roleMap->insert([
'role' => 'head of department (education)',
'nav_item_id' => $row['id'],
'created_at' => utc_now()
]);
}
}
// Example: HOD IT (Grades)
foreach ($navRows as $row) {
if (in_array($row['label'], ['Score Management'], true)) {
$roleMap->insert([
'role' => 'head of department (information technology)',
'nav_item_id' => $row['id'],
'created_at' => utc_now()
]);
}
}
}
}