From 3cc55467337e18959041fa7df0f19a8380ad3ee0 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 27 Feb 2026 01:21:39 -0500 Subject: [PATCH] AVP-78 Feature to check if parents looked at report card --- .gitignore | 1 + app/Config/Routes.php | 4 + app/Controllers/AdminProgressController.php | 177 ++++++++++++++--- .../ParentReportCardController.php | 186 ++++++++++++++++++ .../View/ReportCardsController.php | 56 ++++++ app/Controllers/View/ScoreController.php | 1 + ...-000007_AllowCompetitionWinnerRankTies.php | 25 ++- ...000300_AddPageSelectionToPrintRequests.php | 38 +++- ...20000_CreateReportCardAcknowledgements.php | 77 ++++++++ app/Models/ReportCardAcknowledgementModel.php | 27 +++ app/Views/admin/class_progress_list.php | 4 + app/Views/landing_page/parent_dashboard.php | 9 + app/Views/parent/report_cards.php | 72 +++++++ app/Views/parent/scores.php | 31 ++- app/Views/partials/navbar.php | 6 + app/Views/printables_reports/report_card.php | 45 ++++- .../navbar_cd1336c7da8c3f064f0b3b9e0c0a2232 | 2 +- writable/logs/log-2026-02-10.log | 66 ------- writable/logs/log-2026-02-25.log | 3 - writable/logs/log-2026-02-26.log | 1 - ...ci_session01fd4625b0c67ac15b18834dca2b16cb | 2 +- ...ci_session13e20cdfdb6621c5b09f29a82f029e57 | 1 + ...ci_session15accf59fe089c23e568cb193e604b1a | 1 + ...ci_session28db9d4191c8557373ac41e16ea594a7 | 1 + ...ci_session28fb8fb63570017f69429eedebb942ef | 1 + ...ci_session60e8aa014efc1e020759de78e578be33 | 1 + ...ci_session655568293d5858415e3f5a32174490d7 | 1 + ...ci_session97bdada8c5a5254ff8e979f95353c509 | 1 + ...ci_sessiona4a444a82ad686d0dc5a091c81d94170 | 1 + ...ci_sessiona996af0961b7f64bfba73ae4960a7965 | 1 + ...ci_sessionb439b9809878d7711491d477aa83ca5d | 1 + ...ci_sessionb5f9db7b39dedb66cb2dd08bcc069309 | 2 +- ...ci_sessionbbe3696172b144f313d2ec3f954d10f3 | 1 + ...ci_sessionc94c11e1d9da69e0cdb692421e7b1672 | 1 + ...ci_sessioneb31c51a5591f18c9eebf66fb00ec27a | 1 + ...ci_sessionf79d092c32d1b7de11f536773504068d | 1 + ...ci_sessionfdfc6c7d215d20cc59b91faab68fe350 | 1 + 37 files changed, 743 insertions(+), 107 deletions(-) create mode 100644 .gitignore create mode 100644 app/Controllers/ParentReportCardController.php create mode 100644 app/Database/Migrations/2026-02-27-120000_CreateReportCardAcknowledgements.php create mode 100644 app/Models/ReportCardAcknowledgementModel.php create mode 100644 app/Views/parent/report_cards.php delete mode 100644 writable/logs/log-2026-02-10.log delete mode 100644 writable/logs/log-2026-02-25.log delete mode 100644 writable/logs/log-2026-02-26.log create mode 100644 writable/session/ci_session13e20cdfdb6621c5b09f29a82f029e57 create mode 100644 writable/session/ci_session15accf59fe089c23e568cb193e604b1a create mode 100644 writable/session/ci_session28db9d4191c8557373ac41e16ea594a7 create mode 100644 writable/session/ci_session28fb8fb63570017f69429eedebb942ef create mode 100644 writable/session/ci_session60e8aa014efc1e020759de78e578be33 create mode 100644 writable/session/ci_session655568293d5858415e3f5a32174490d7 create mode 100644 writable/session/ci_session97bdada8c5a5254ff8e979f95353c509 create mode 100644 writable/session/ci_sessiona4a444a82ad686d0dc5a091c81d94170 create mode 100644 writable/session/ci_sessiona996af0961b7f64bfba73ae4960a7965 create mode 100644 writable/session/ci_sessionb439b9809878d7711491d477aa83ca5d create mode 100644 writable/session/ci_sessionbbe3696172b144f313d2ec3f954d10f3 create mode 100644 writable/session/ci_sessionc94c11e1d9da69e0cdb692421e7b1672 create mode 100644 writable/session/ci_sessioneb31c51a5591f18c9eebf66fb00ec27a create mode 100644 writable/session/ci_sessionf79d092c32d1b7de11f536773504068d create mode 100644 writable/session/ci_sessionfdfc6c7d215d20cc59b91faab68fe350 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..397b4a7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.log diff --git a/app/Config/Routes.php b/app/Config/Routes.php index c722b7c..5f69af6 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -108,6 +108,7 @@ $routes->get('administrator/student-score-card', 'View\StudentController::scoreC // API for report card meta (students, class sections, school years) $routes->get('api/printables/report-card/meta', 'View\ReportCardsController::reportCardMeta', ['filter' => 'auth']); $routes->get('api/printables/report-card/completeness', 'View\ReportCardsController::reportCardCompleteness', ['filter' => 'auth']); +$routes->get('api/printables/report-card/ack', 'View\ReportCardsController::reportCardAcknowledgement', ['filter' => 'auth']); //Badges $routes->get('printables_reports/badge_form', 'View\BadgesController::badgeForm'); @@ -330,6 +331,9 @@ $routes->post('/administrator/scores/update/{id}', 'View\ScoreController::update // Route to delete a score record $routes->get('/administrator/scores/delete/{id}', 'View\ScoreController::destroy'); $routes->get('/parent/scores', 'View\ScoreController::viewStudentScore'); +$routes->get('parent/report-cards', 'ParentReportCardController::index', ['filter' => 'auth:parent']); +$routes->get('parent/report-cards/view/(:num)', 'ParentReportCardController::view/$1', ['filter' => 'auth:parent']); +$routes->post('parent/report-cards/sign/(:num)', 'ParentReportCardController::sign/$1', ['filter' => 'auth:parent']); diff --git a/app/Controllers/AdminProgressController.php b/app/Controllers/AdminProgressController.php index 1878bf4..965d9fe 100644 --- a/app/Controllers/AdminProgressController.php +++ b/app/Controllers/AdminProgressController.php @@ -8,6 +8,7 @@ use App\Models\ClassSectionModel; use App\Models\CalendarModel; use App\Models\ConfigurationModel; use App\Models\StudentClassModel; +use App\Models\SubjectCurriculumModel; use App\Services\SemesterRangeService; use CodeIgniter\Exceptions\PageNotFoundException; use CodeIgniter\HTTP\ResponseInterface; @@ -21,6 +22,7 @@ class AdminProgressController extends BaseController protected CalendarModel $calendarModel; protected ConfigurationModel $configModel; protected SemesterRangeService $semesterRangeService; + protected SubjectCurriculumModel $curriculumModel; public function __construct() { @@ -32,6 +34,7 @@ class AdminProgressController extends BaseController $this->calendarModel = new CalendarModel(); $this->configModel = new ConfigurationModel(); $this->semesterRangeService = new SemesterRangeService($this->configModel); + $this->curriculumModel = new SubjectCurriculumModel(); } public function index() @@ -107,6 +110,7 @@ class AdminProgressController extends BaseController $filterEnd ); $sectionStats = $this->buildSectionSubmissionStats($rows, $activeDatesSet, $expectedDays); + $sectionSubjectCounts = $this->buildSectionSubjectCounts($rows); return view('admin/class_progress_list', [ 'reportGroupsBySection' => $reportGroupsBySection, @@ -115,6 +119,7 @@ class AdminProgressController extends BaseController 'statusOptions' => ClassProgressController::STATUS_OPTIONS, 'subjectSections' => ClassProgressController::SUBJECT_SECTIONS, 'sectionStats' => $sectionStats, + 'sectionSubjectCounts' => $sectionSubjectCounts, 'expectedDays' => $expectedDays, ]); } @@ -381,50 +386,166 @@ class AdminProgressController extends BaseController protected function buildSectionSubmissionStats(array $rows, array $activeDatesSet, int $expectedDays): array { - $requiredSubjects = []; - foreach (ClassProgressController::SUBJECT_SECTIONS as $section) { - $requiredSubjects[] = $section['db_subject'] ?? $section['label'] ?? ''; - } - $requiredSubjects = array_values(array_filter($requiredSubjects)); - $submittedBySection = []; foreach ($rows as $row) { $sectionId = (int) ($row['class_section_id'] ?? 0); $weekStart = (string) ($row['week_start'] ?? ''); - $subject = (string) ($row['subject'] ?? ''); - if ($sectionId === 0 || $weekStart === '' || $subject === '') { + if ($sectionId === 0 || $weekStart === '') { continue; } - if (! empty($activeDatesSet) && empty($activeDatesSet[$weekStart])) { - continue; - } - if (! in_array($subject, $requiredSubjects, true)) { - continue; - } - $submittedBySection[$sectionId][$weekStart][$subject] = true; + $submittedBySection[$sectionId][$weekStart] = true; } $stats = []; foreach ($submittedBySection as $sectionId => $weeks) { - $submitted = 0; - foreach ($weeks as $subjects) { - $all = true; - foreach ($requiredSubjects as $subject) { - if (empty($subjects[$subject])) { - $all = false; - break; - } - } - if ($all) { - $submitted++; - } - } + $submitted = count($weeks); $stats[$sectionId] = $this->buildSectionStat($submitted, $expectedDays); } return $stats; } + protected function buildSectionSubjectCounts(array $rows): array + { + $allowedSubjects = []; + foreach (ClassProgressController::SUBJECT_SECTIONS as $section) { + $allowedSubjects[] = $section['db_subject'] ?? $section['label'] ?? ''; + } + $allowedSubjects = array_values(array_filter($allowedSubjects)); + + $counts = []; + $latestWeekBySection = []; + $sectionClassMap = []; + foreach ($rows as $row) { + $sectionId = (int) ($row['class_section_id'] ?? 0); + $subject = (string) ($row['subject'] ?? ''); + $weekStart = (string) ($row['week_start'] ?? ''); + if ($sectionId === 0 || $subject === '' || $weekStart === '') { + continue; + } + if (! empty($allowedSubjects) && ! in_array($subject, $allowedSubjects, true)) { + continue; + } + if (! isset($sectionClassMap[$sectionId])) { + $sectionClassMap[$sectionId] = $this->classSectionModel->getClassId($sectionId); + } + if ( + ! isset($latestWeekBySection[$sectionId]) + || $weekStart > $latestWeekBySection[$sectionId] + ) { + $latestWeekBySection[$sectionId] = $weekStart; + } + } + + $curriculumChapters = $this->buildCurriculumChapterMap(array_values(array_filter($sectionClassMap))); + + foreach ($rows as $row) { + $sectionId = (int) ($row['class_section_id'] ?? 0); + $subject = (string) ($row['subject'] ?? ''); + $weekStart = (string) ($row['week_start'] ?? ''); + if ($sectionId === 0 || $subject === '' || $weekStart === '') { + continue; + } + if (! empty($allowedSubjects) && ! in_array($subject, $allowedSubjects, true)) { + continue; + } + if (empty($latestWeekBySection[$sectionId]) || $weekStart !== $latestWeekBySection[$sectionId]) { + continue; + } + $subjectSlug = $this->resolveSubjectSlug($subject); + $classId = $sectionClassMap[$sectionId] ?? null; + $chapterSet = []; + if ($classId && $subjectSlug && ! empty($curriculumChapters[$classId][$subjectSlug])) { + $chapterSet = $curriculumChapters[$classId][$subjectSlug]; + } + $counts[$sectionId] = ($counts[$sectionId] ?? 0) + $this->countChapterSegments( + (string) ($row['unit_title'] ?? ''), + $chapterSet + ); + } + + return $counts; + } + + protected function buildCurriculumChapterMap(array $classIds): array + { + $classIds = array_values(array_filter(array_map('intval', $classIds))); + if (empty($classIds)) { + return []; + } + + $rows = $this->curriculumModel + ->whereIn('class_id', $classIds) + ->findAll(); + + $map = []; + foreach ($rows as $row) { + $classId = (int) ($row['class_id'] ?? 0); + $subject = (string) ($row['subject'] ?? ''); + $chapter = trim((string) ($row['chapter_name'] ?? '')); + if ($classId === 0 || $subject === '' || $chapter === '') { + continue; + } + $map[$classId][$subject][$chapter] = true; + } + + return $map; + } + + protected function resolveSubjectSlug(string $subject): ?string + { + foreach (ClassProgressController::SUBJECT_SECTIONS as $slug => $section) { + $dbSubject = (string) ($section['db_subject'] ?? ''); + $label = (string) ($section['label'] ?? ''); + if ($subject === $dbSubject || $subject === $label) { + return $slug; + } + } + return null; + } + + protected function countChapterSegments(string $unitTitle, array $chapterSet): int + { + $unitTitle = trim($unitTitle); + if ($unitTitle === '') { + return 1; + } + $parts = array_filter(array_map('trim', explode(';', $unitTitle)), static fn ($part) => $part !== ''); + if (! $parts) { + return 1; + } + + $count = 0; + $seen = []; + foreach ($parts as $part) { + $chapter = $this->extractChapterFromSegment($part); + $key = $chapter !== '' ? $chapter : $part; + if (! empty($chapterSet) && $chapter !== '' && empty($chapterSet[$chapter])) { + $key = $part; + } + if (isset($seen[$key])) { + continue; + } + $seen[$key] = true; + $count++; + } + + return $count > 0 ? $count : 1; + } + + protected function extractChapterFromSegment(string $segment): string + { + $segment = trim($segment); + if ($segment === '') { + return ''; + } + $pos = strrpos($segment, '/'); + if ($pos === false) { + return $segment; + } + return trim(substr($segment, $pos + 1)); + } + protected function buildSectionStat(int $submitted, int $expectedDays): array { $percent = $expectedDays > 0 ? round(($submitted * 100) / $expectedDays, 1) : 0.0; diff --git a/app/Controllers/ParentReportCardController.php b/app/Controllers/ParentReportCardController.php new file mode 100644 index 0000000..8206712 --- /dev/null +++ b/app/Controllers/ParentReportCardController.php @@ -0,0 +1,186 @@ +db = \Config\Database::connect(); + $this->configModel = new ConfigurationModel(); + $this->ackModel = new ReportCardAcknowledgementModel(); + $this->studentModel = new StudentModel(); + } + + public function index() + { + $parentId = $this->resolvePrimaryParentId(); + if (! $parentId) { + return redirect()->back()->with('error', 'Unable to retrieve student data. Please contact support.'); + } + + $schoolYear = trim((string) ($this->request->getGet('school_year') ?? $this->configModel->getConfig('school_year') ?? '')); + $semester = trim((string) ($this->request->getGet('semester') ?? $this->configModel->getConfig('semester') ?? '')); + + $builder = $this->db->table('students s') + ->select('s.id, s.firstname, s.lastname, cs.class_section_name') + ->join('student_class sc', 'sc.student_id = s.id', 'left') + ->join('classSection cs', 'cs.class_section_id = sc.class_section_id', 'left') + ->where('s.parent_id', $parentId) + ->orderBy('s.firstname', 'ASC') + ->orderBy('s.lastname', 'ASC'); + + if ($schoolYear !== '') { + $builder->where('sc.school_year', $schoolYear); + } + if ($semester !== '') { + $builder->where('sc.semester', $semester); + } + + $students = $builder->get()->getResultArray(); + $studentIds = array_values(array_filter(array_map(static fn ($s) => (int) ($s['id'] ?? 0), $students))); + + $ackMap = []; + if (! empty($studentIds)) { + $rows = $this->ackModel + ->where('parent_id', $parentId) + ->where('school_year', $schoolYear) + ->where('semester', $semester) + ->whereIn('student_id', $studentIds) + ->findAll(); + foreach ($rows as $row) { + $ackMap[(int) $row['student_id']] = $row; + } + } + + return view('parent/report_cards', [ + 'students' => $students, + 'ackMap' => $ackMap, + 'schoolYear' => $schoolYear, + 'semester' => $semester, + ]); + } + + public function view($studentId) + { + $parentId = $this->resolvePrimaryParentId(); + if (! $parentId) { + return redirect()->back()->with('error', 'Unable to retrieve student data. Please contact support.'); + } + + $student = $this->studentModel->find((int) $studentId); + if (! $student || (int) ($student['parent_id'] ?? 0) !== $parentId) { + throw new PageNotFoundException('Student not found.'); + } + + $schoolYear = trim((string) ($this->request->getGet('school_year') ?? $this->configModel->getConfig('school_year') ?? '')); + $semester = trim((string) ($this->request->getGet('semester') ?? $this->configModel->getConfig('semester') ?? '')); + + $this->touchAcknowledgement($parentId, (int) $studentId, $schoolYear, $semester, [ + 'viewed_at' => date('Y-m-d H:i:s'), + ]); + + $url = site_url('report-card/student/' . (int) $studentId); + $query = []; + if ($schoolYear !== '') { + $query['school_year'] = $schoolYear; + } + if ($semester !== '') { + $query['semester'] = $semester; + } + if ($query) { + $url .= '?' . http_build_query($query); + } + + return redirect()->to($url); + } + + public function sign($studentId) + { + $parentId = $this->resolvePrimaryParentId(); + if (! $parentId) { + return redirect()->back()->with('error', 'Unable to retrieve student data. Please contact support.'); + } + + $student = $this->studentModel->find((int) $studentId); + if (! $student || (int) ($student['parent_id'] ?? 0) !== $parentId) { + throw new PageNotFoundException('Student not found.'); + } + + $name = trim((string) $this->request->getPost('signed_name')); + if ($name === '') { + return redirect()->back()->with('error', 'Please type your full name to sign.'); + } + + $schoolYear = trim((string) ($this->configModel->getConfig('school_year') ?? '')); + $semester = trim((string) ($this->configModel->getConfig('semester') ?? '')); + $now = date('Y-m-d H:i:s'); + $this->touchAcknowledgement($parentId, (int) $studentId, $schoolYear, $semester, [ + 'viewed_at' => $now, + 'signed_at' => $now, + 'signed_name' => $name, + 'signer_ip' => $this->request->getIPAddress(), + ]); + + return redirect()->to(site_url('parent/report-cards'))->with('success', 'Report card acknowledged.'); + } + + protected function resolvePrimaryParentId(): ?int + { + $parentId = (int) (session()->get('user_id') ?? 0); + $userType = (string) ($_SESSION['user_type'] ?? ''); + if ($userType === 'primary') { + return $parentId ?: null; + } + if ($userType === 'secondary') { + $row = $this->db->table('parents') + ->select('parent_id') + ->where('secondparent_user_id', $parentId) + ->get() + ->getRowArray(); + return $row ? (int) ($row['parent_id'] ?? 0) : null; + } + if ($userType === 'tertiary') { + $row = $this->db->table('authorized_users') + ->select('user_id as parent_id') + ->where('authorized_user_id', $parentId) + ->get() + ->getRowArray(); + return $row ? (int) ($row['parent_id'] ?? 0) : null; + } + return $parentId ?: null; + } + + protected function touchAcknowledgement( + int $parentId, + int $studentId, + string $schoolYear, + string $semester, + array $values + ): void { + $criteria = [ + 'parent_id' => $parentId, + 'student_id' => $studentId, + 'school_year' => $schoolYear, + 'semester' => $semester, + ]; + $existing = $this->ackModel->where($criteria)->first(); + if ($existing) { + $this->ackModel->update((int) $existing['id'], $values); + return; + } + $this->ackModel->insert(array_merge($criteria, $values)); + } +} diff --git a/app/Controllers/View/ReportCardsController.php b/app/Controllers/View/ReportCardsController.php index 74b6e1b..7b52691 100644 --- a/app/Controllers/View/ReportCardsController.php +++ b/app/Controllers/View/ReportCardsController.php @@ -4,18 +4,21 @@ namespace App\Controllers\View; use App\Models\CalendarModel; use App\Models\AttendanceDataModel; +use App\Models\ReportCardAcknowledgementModel; use App\Services\SemesterRangeService; class ReportCardsController extends PrintablesBaseController { protected $calendarModel; protected $semesterRangeService; + protected $ackModel; public function __construct() { parent::__construct(); $this->calendarModel = new CalendarModel(); $this->semesterRangeService = new SemesterRangeService($this->configModel); + $this->ackModel = new ReportCardAcknowledgementModel(); } public function report_card() @@ -369,6 +372,24 @@ class ReportCardsController extends PrintablesBaseController $isNumeric = static fn($v) => $v !== null && $v !== '' && is_numeric($v); + $ackMap = []; + try { + $ackRows = $this->ackModel + ->whereIn('student_id', $studentIds) + ->where('school_year', $year) + ->where('semester', $sem) + ->orderBy('updated_at', 'DESC') + ->findAll(); + foreach ($ackRows as $row) { + $sid = (int) ($row['student_id'] ?? 0); + if ($sid > 0 && ! isset($ackMap[$sid])) { + $ackMap[$sid] = $row; + } + } + } catch (\Throwable $e) { + $ackMap = []; + } + $results = []; $completeCount = 0; $warningCount = 0; @@ -471,12 +492,16 @@ class ReportCardsController extends PrintablesBaseController $warningCount++; } + $ack = $sid > 0 ? ($ackMap[$sid] ?? null) : null; $results[] = [ 'id' => $sid, 'name' => $name !== '' ? $name : 'N/A', 'missing' => $missing, 'warnings' => $warnings, 'complete' => $isComplete, + 'viewed_at' => $ack['viewed_at'] ?? null, + 'signed_at' => $ack['signed_at'] ?? null, + 'signed_name' => $ack['signed_name'] ?? null, ]; } @@ -501,6 +526,37 @@ class ReportCardsController extends PrintablesBaseController ]); } + /** + * API: report card parent acknowledgement status + * GET params: student_id, school_year, semester + */ + public function reportCardAcknowledgement() + { + $studentId = (int) ($this->request->getGet('student_id') ?? 0); + if ($studentId <= 0) { + return $this->response->setJSON(['ok' => false, 'error' => 'Missing student_id'])->setStatusCode(400); + } + $schoolYear = trim((string) ($this->request->getGet('school_year') ?? $this->schoolYear ?? '')); + $semester = trim((string) ($this->request->getGet('semester') ?? $this->semester ?? '')); + + $row = $this->ackModel + ->where('student_id', $studentId) + ->where('school_year', $schoolYear) + ->where('semester', $semester) + ->orderBy('updated_at', 'DESC') + ->first(); + + return $this->response->setJSON([ + 'ok' => true, + 'student_id' => $studentId, + 'school_year' => $schoolYear, + 'semester' => $semester, + 'viewed_at' => $row['viewed_at'] ?? null, + 'signed_at' => $row['signed_at'] ?? null, + 'signed_name' => $row['signed_name'] ?? null, + ]); + } + protected function fetchStudentsByClass(int $sectionId, ?string $schoolYear) { $b = $this->studentClassModel diff --git a/app/Controllers/View/ScoreController.php b/app/Controllers/View/ScoreController.php index 4e05fba..ff24070 100644 --- a/app/Controllers/View/ScoreController.php +++ b/app/Controllers/View/ScoreController.php @@ -1378,6 +1378,7 @@ $students = $this->db->table('students') $releaseScores = (strcasecmp($semester, 'Fall') === 0) ? $releaseFall : ((strcasecmp($semester, 'Spring') === 0) ? $releaseSpring : $releaseAny); $scores[$selectedYear][$semester][$studentId] = [ + 'student_id' => $studentId, 'school_id' => $student['school_id'], 'student_firstname' => $student['firstname'], 'student_lastname' => $student['lastname'], diff --git a/app/Database/Migrations/2026-01-10-000007_AllowCompetitionWinnerRankTies.php b/app/Database/Migrations/2026-01-10-000007_AllowCompetitionWinnerRankTies.php index e7c6498..3729203 100644 --- a/app/Database/Migrations/2026-01-10-000007_AllowCompetitionWinnerRankTies.php +++ b/app/Database/Migrations/2026-01-10-000007_AllowCompetitionWinnerRankTies.php @@ -13,11 +13,11 @@ class AllowCompetitionWinnerRankTies extends Migration return; } - if ($db->indexExists('competition_winners', 'competition_id_class_section_id_rank')) { + if ($this->indexExists($db, 'competition_winners', 'competition_id_class_section_id_rank')) { $db->query('DROP INDEX competition_id_class_section_id_rank ON competition_winners'); } - if (!$db->indexExists('competition_winners', 'competition_id_class_section_id_rank')) { + if (! $this->indexExists($db, 'competition_winners', 'competition_id_class_section_id_rank')) { $db->query( 'CREATE INDEX competition_id_class_section_id_rank ON competition_winners (competition_id, class_section_id, rank)' ); @@ -31,7 +31,7 @@ class AllowCompetitionWinnerRankTies extends Migration return; } - if ($db->indexExists('competition_winners', 'competition_id_class_section_id_rank')) { + if ($this->indexExists($db, 'competition_winners', 'competition_id_class_section_id_rank')) { $db->query('DROP INDEX competition_id_class_section_id_rank ON competition_winners'); } @@ -39,4 +39,23 @@ class AllowCompetitionWinnerRankTies extends Migration 'ALTER TABLE competition_winners ADD UNIQUE KEY competition_id_class_section_id_rank (competition_id, class_section_id, rank)' ); } + + private function indexExists($db, string $table, string $index): bool + { + if (method_exists($db, 'indexExists')) { + return $db->indexExists($table, $index); + } + + $dbName = $db->getDatabase(); + $builder = $db->table('information_schema.STATISTICS'); + $row = $builder + ->select('INDEX_NAME') + ->where('TABLE_SCHEMA', $dbName) + ->where('TABLE_NAME', $table) + ->where('INDEX_NAME', $index) + ->get() + ->getRowArray(); + + return ! empty($row); + } } diff --git a/app/Database/Migrations/2026-02-05-000300_AddPageSelectionToPrintRequests.php b/app/Database/Migrations/2026-02-05-000300_AddPageSelectionToPrintRequests.php index 8af9a6b..70a47e5 100644 --- a/app/Database/Migrations/2026-02-05-000300_AddPageSelectionToPrintRequests.php +++ b/app/Database/Migrations/2026-02-05-000300_AddPageSelectionToPrintRequests.php @@ -1 +1,37 @@ -Print all \ No newline at end of file +db->tableExists('print_requests')) { + return; + } + + if (! $this->db->fieldExists('page_selection', 'print_requests')) { + $this->forge->addColumn('print_requests', [ + 'page_selection' => [ + 'type' => 'VARCHAR', + 'constraint' => 255, + 'null' => true, + 'after' => 'num_copies', + ], + ]); + } + } + + public function down() + { + if (! $this->db->tableExists('print_requests')) { + return; + } + + if ($this->db->fieldExists('page_selection', 'print_requests')) { + $this->forge->dropColumn('print_requests', 'page_selection'); + } + } +} diff --git a/app/Database/Migrations/2026-02-27-120000_CreateReportCardAcknowledgements.php b/app/Database/Migrations/2026-02-27-120000_CreateReportCardAcknowledgements.php new file mode 100644 index 0000000..54e49f3 --- /dev/null +++ b/app/Database/Migrations/2026-02-27-120000_CreateReportCardAcknowledgements.php @@ -0,0 +1,77 @@ +db->tableExists('report_card_acknowledgements')) { + return; + } + + $this->forge->addField([ + 'id' => [ + 'type' => 'INT', + 'constraint' => 11, + 'unsigned' => true, + 'auto_increment' => true, + ], + 'parent_id' => [ + 'type' => 'INT', + 'constraint' => 11, + 'unsigned' => true, + ], + 'student_id' => [ + 'type' => 'INT', + 'constraint' => 11, + 'unsigned' => true, + ], + 'school_year' => [ + 'type' => 'VARCHAR', + 'constraint' => 20, + ], + 'semester' => [ + 'type' => 'VARCHAR', + 'constraint' => 20, + ], + 'viewed_at' => [ + 'type' => 'DATETIME', + 'null' => true, + ], + 'signed_at' => [ + 'type' => 'DATETIME', + 'null' => true, + ], + 'signed_name' => [ + 'type' => 'VARCHAR', + 'constraint' => 120, + 'null' => true, + ], + 'signer_ip' => [ + 'type' => 'VARCHAR', + 'constraint' => 45, + 'null' => true, + ], + 'created_at' => [ + 'type' => 'DATETIME', + 'null' => true, + ], + 'updated_at' => [ + 'type' => 'DATETIME', + 'null' => true, + ], + ]); + + $this->forge->addKey('id', true); + $this->forge->addKey(['parent_id', 'student_id', 'school_year', 'semester'], false, true); + $this->forge->createTable('report_card_acknowledgements'); + } + + public function down() + { + $this->forge->dropTable('report_card_acknowledgements', true); + } +} diff --git a/app/Models/ReportCardAcknowledgementModel.php b/app/Models/ReportCardAcknowledgementModel.php new file mode 100644 index 0000000..0778bc1 --- /dev/null +++ b/app/Models/ReportCardAcknowledgementModel.php @@ -0,0 +1,27 @@ + @@ -90,6 +91,7 @@ $collapseId = 'progress-section-' . $sectionId; $headingId = 'progress-heading-' . $sectionId; $stat = $sectionStats[$sectionId] ?? null; + $subjectCount = (int) ($sectionSubjectCounts[$sectionId] ?? 0); if (! $stat) { if ($expectedDays === 0) { $stat = [ @@ -113,12 +115,14 @@ $submissionLabel = $expectedDays > 0 ? ('Submitted: ' . (int) $stat['submitted'] . ' / ' . (int) $expectedDays . ' (' . $percentLabel . ')') : 'Submitted: N/A'; + $subjectLabel = 'Subjects: ' . $subjectCount; ?>

+ +
+ +
+

Report Cards

+
+
+
+
diff --git a/app/Views/parent/report_cards.php b/app/Views/parent/report_cards.php new file mode 100644 index 0000000..40dd404 --- /dev/null +++ b/app/Views/parent/report_cards.php @@ -0,0 +1,72 @@ +extend('layout/main_layout') ?> +section('content') ?> +
+
+
+

Report Cards

+
+ +
+
+
+ + getFlashdata('error')): ?> +
getFlashdata('error')) ?>
+ + getFlashdata('success')): ?> +
getFlashdata('success')) ?>
+ + + +
No students available for report cards.
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
StudentClass SectionViewedSignatureAction
+ +
+ + + Not signed + +
+ View Report + +
+ + + +
+ +
+
+ +
+endSection() ?> diff --git a/app/Views/parent/scores.php b/app/Views/parent/scores.php index c515b36..f7cdd0e 100644 --- a/app/Views/parent/scores.php +++ b/app/Views/parent/scores.php @@ -1,7 +1,9 @@ extend('layout/main_layout') ?> section('content') ?>
-

Scores

+
+

Scores

+
@@ -73,6 +75,7 @@ $showExamScoresBySemester = $showExamScoresBySemester ?? []; Exam Semester Score + Report Card @@ -96,6 +99,32 @@ $showExamScoresBySemester = $showExamScoresBySemester ?? []; + + + 0) { + $reportYear = (string) ($selectedYear ?? ''); + $reportSemester = (string) ($semester ?? ''); + $reportDate = date('Y-m-d'); + $reportUrl = base_url('parent/report-cards/view/' . $reportStudentId); + $query = http_build_query([ + 'school_year' => $reportYear, + 'semester' => $reportSemester, + 'report_date' => $reportDate, + ]); + if ($query) { + $reportUrl .= '?' . $query; + } + } + ?> + 0): ?> + View + + Unavailable + + + diff --git a/app/Views/partials/navbar.php b/app/Views/partials/navbar.php index a6cb47c..942ec2a 100644 --- a/app/Views/partials/navbar.php +++ b/app/Views/partials/navbar.php @@ -334,6 +334,12 @@ switch ($role) { 'label' => 'Scores', 'title' => 'Review progressive academic score for the year (homeworks, projects and exams).', ], + [ + 'href' => base_url('/parent/report-cards'), + 'icon' => 'bi-file-earmark-text', + 'label' => 'Report Cards', + 'title' => 'View and acknowledge student report cards.', + ], [ 'href' => base_url('/parent/progress'), 'icon' => 'bi-journal-check', diff --git a/app/Views/printables_reports/report_card.php b/app/Views/printables_reports/report_card.php index d6cf4b7..3377849 100644 --- a/app/Views/printables_reports/report_card.php +++ b/app/Views/printables_reports/report_card.php @@ -48,6 +48,7 @@ Download
+
@@ -67,10 +68,12 @@ - + + + @@ -91,6 +94,7 @@ document.addEventListener('DOMContentLoaded', function(){ const API = ; const COMPLETENESS_API = ; + const ACK_API = ; // add cache-busting cb param const withCB = (u) => u + (u.includes('?') ? '&' : '?') + 'cb=' + Date.now(); @@ -119,6 +123,7 @@ document.addEventListener('DOMContentLoaded', function(){ const $completenessSummary = document.getElementById('completenessSummary'); const $completenessWrap = document.getElementById('completenessTableWrap'); const $completenessBody = document.getElementById('completenessBody'); + const $ackStatus = document.getElementById('ackStatus'); function opt(el, val, label) { const o = document.createElement('option'); o.value = String(val); o.textContent = label; el.appendChild(o); @@ -157,10 +162,40 @@ document.addEventListener('DOMContentLoaded', function(){ // Classes $class.innerHTML = ''; (data.classSections || []).forEach(c => opt($class, c.class_section_id || c.id, c.class_section_name)); + + updateAckStatus(); + } + + async function updateAckStatus() { + if (! $ackStatus) return; + const sid = $student.value; + const y = $year.value || ''; + const s = $sem.value || ''; + if (!sid) { + $ackStatus.textContent = ''; + return; + } + try { + const url = `${ACK_API}?student_id=${encodeURIComponent(sid)}&school_year=${encodeURIComponent(y)}&semester=${encodeURIComponent(s)}`; + const res = await fetch(url, { credentials: 'same-origin' }); + const data = await res.json(); + if (!res.ok || data?.ok === false) { + $ackStatus.textContent = 'Parent acknowledgement: unavailable'; + return; + } + const viewed = data.viewed_at ? `Viewed: ${data.viewed_at}` : 'Viewed: not yet'; + const signed = data.signed_at + ? `Signed: ${data.signed_at} (${data.signed_name || 'name missing'})` + : 'Signed: not yet'; + $ackStatus.textContent = `Parent acknowledgement — ${viewed} · ${signed}`; + } catch (err) { + $ackStatus.textContent = 'Parent acknowledgement: unavailable'; + } } $year.addEventListener('change', function(){ loadMeta(this.value, $sem.value).catch(console.error); }); $sem.addEventListener('change', function(){ loadMeta($year.value, this.value).catch(console.error); }); + $student.addEventListener('change', function(){ updateAckStatus(); }); $viewS.addEventListener('click', function(){ const sid = $student.value; const y = $year.value; const s=$sem.value; @@ -254,10 +289,18 @@ document.addEventListener('DOMContentLoaded', function(){ tdMissing.textContent = missing.length ? missing.join(', ') : 'None'; const tdWarnings = document.createElement('td'); tdWarnings.textContent = warningsList.length ? warningsList.join(', ') : 'None'; + const tdViewed = document.createElement('td'); + tdViewed.textContent = row.viewed_at ? row.viewed_at : 'Not viewed'; + const tdSigned = document.createElement('td'); + tdSigned.textContent = row.signed_at + ? `${row.signed_at}${row.signed_name ? ` (${row.signed_name})` : ''}` + : 'Not signed'; tr.appendChild(tdName); tr.appendChild(tdStatus); tr.appendChild(tdMissing); tr.appendChild(tdWarnings); + tr.appendChild(tdViewed); + tr.appendChild(tdSigned); $completenessBody.appendChild(tr); }); $completenessWrap.hidden = false; diff --git a/writable/cache/navbar_cd1336c7da8c3f064f0b3b9e0c0a2232 b/writable/cache/navbar_cd1336c7da8c3f064f0b3b9e0c0a2232 index d05281a..0f7ebe4 100644 --- a/writable/cache/navbar_cd1336c7da8c3f064f0b3b9e0c0a2232 +++ b/writable/cache/navbar_cd1336c7da8c3f064f0b3b9e0c0a2232 @@ -1 +1 @@ -a:3:{s:4:"time";i:1772167656;s:3:"ttl";i:300;s:4:"data";a:19:{i:0;a:12:{s:2:"id";s:2:"63";s:14:"menu_parent_id";N;s:5:"label";s:6:"Family";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-09 15:22:56";s:10:"updated_at";s:19:"2025-10-26 06:33:11";s:10:"deleted_at";N;s:8:"children";a:2:{i:0;a:12:{s:2:"id";s:2:"64";s:14:"menu_parent_id";s:2:"63";s:5:"label";s:16:"Family Managment";s:3:"url";s:12:"family/index";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-09 15:23:49";s:10:"updated_at";s:19:"2025-10-26 06:28:34";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"74";s:14:"menu_parent_id";s:2:"63";s:5:"label";s:13:"Family Update";s:3:"url";s:22:"families/import-legacy";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-26 06:29:11";s:10:"updated_at";s:19:"2025-10-26 06:29:11";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:1;a:12:{s:2:"id";s:2:"67";s:14:"menu_parent_id";N;s:5:"label";s:9:"Inventory";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-11 06:24:37";s:10:"updated_at";s:19:"2025-09-16 16:48:58";s:10:"deleted_at";N;s:8:"children";a:6:{i:0;a:12:{s:2:"id";s:2:"56";s:14:"menu_parent_id";s:2:"67";s:5:"label";s:5:"Books";s:3:"url";s:14:"inventory/book";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-08 19:13:48";s:10:"updated_at";s:19:"2025-10-05 03:43:38";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"72";s:14:"menu_parent_id";s:2:"67";s:5:"label";s:26:"Update Inventory Movements";s:3:"url";s:19:"inventory/movements";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-02 06:07:53";s:10:"updated_at";s:19:"2025-10-05 03:42:08";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"55";s:14:"menu_parent_id";s:2:"67";s:5:"label";s:19:"Classroom Equipment";s:3:"url";s:9:"inventory";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-08 18:56:08";s:10:"updated_at";s:19:"2025-09-16 16:47:32";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:3;a:12:{s:2:"id";s:2:"57";s:14:"menu_parent_id";s:2:"67";s:5:"label";s:16:"Kitchen Supplies";s:3:"url";s:17:"inventory/kitchen";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-08 19:14:24";s:10:"updated_at";s:19:"2025-09-16 16:48:23";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:4;a:12:{s:2:"id";s:2:"58";s:14:"menu_parent_id";s:2:"67";s:5:"label";s:15:"Office Supplies";s:3:"url";s:16:"inventory/office";s:10:"icon_class";N;s:6:"target";s:6:"_blank";s:10:"sort_order";s:1:"4";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-08 19:14:53";s:10:"updated_at";s:19:"2025-09-10 22:17:05";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:5;a:12:{s:2:"id";s:2:"66";s:14:"menu_parent_id";s:2:"67";s:5:"label";s:7:"Summary";s:3:"url";s:21:"inventory/summary-all";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"4";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-11 05:56:10";s:10:"updated_at";s:19:"2025-09-11 06:28:41";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:2;a:12:{s:2:"id";s:2:"83";s:14:"menu_parent_id";N;s:5:"label";s:15:"TimeOff Request";s:3:"url";s:22:"/administrator/absence";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-11-01 20:58:55";s:10:"updated_at";s:19:"2025-11-01 20:58:55";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:3;a:12:{s:2:"id";s:2:"86";s:14:"menu_parent_id";N;s:5:"label";s:11:"Competition";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-11 07:40:32";s:10:"updated_at";s:19:"2026-01-11 07:40:32";s:10:"deleted_at";N;s:8:"children";a:1:{i:0;a:12:{s:2:"id";s:2:"87";s:14:"menu_parent_id";s:2:"86";s:5:"label";s:17:"Competition Setup";s:3:"url";s:19:"competition-winners";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-11 07:41:19";s:10:"updated_at";s:19:"2026-01-11 07:41:19";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:4;a:12:{s:2:"id";s:2:"88";s:14:"menu_parent_id";N;s:5:"label";s:23:"Notification Management";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-13 19:48:58";s:10:"updated_at";s:19:"2026-01-13 19:48:58";s:10:"deleted_at";N;s:8:"children";a:1:{i:0;a:12:{s:2:"id";s:2:"89";s:14:"menu_parent_id";s:2:"88";s:5:"label";s:18:"Notification Setup";s:3:"url";s:35:"/administrator/notifications_alerts";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-13 19:49:35";s:10:"updated_at";s:19:"2026-01-13 19:49:35";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:5;a:12:{s:2:"id";s:2:"92";s:14:"menu_parent_id";N;s:5:"label";s:10:"Curriculum";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-18 07:23:26";s:10:"updated_at";s:19:"2026-01-18 07:23:26";s:10:"deleted_at";N;s:8:"children";a:2:{i:0;a:12:{s:2:"id";s:2:"91";s:14:"menu_parent_id";s:2:"92";s:5:"label";s:14:"Class Progress";s:3:"url";s:14:"admin/progress";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-15 04:38:48";s:10:"updated_at";s:19:"2026-01-18 07:24:37";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"93";s:14:"menu_parent_id";s:2:"92";s:5:"label";s:18:"Curriculum Subject";s:3:"url";s:32:"administrator/subject-curriculum";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-18 07:25:26";s:10:"updated_at";s:19:"2026-01-18 07:25:26";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:6;a:12:{s:2:"id";s:2:"94";s:14:"menu_parent_id";N;s:5:"label";s:19:"Teacher Submissions";s:3:"url";s:33:"administrator/teacher-submissions";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-25 22:20:24";s:10:"updated_at";s:19:"2026-01-25 22:20:24";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:7;a:12:{s:2:"id";s:2:"95";s:14:"menu_parent_id";N;s:5:"label";s:5:"Exams";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-29 01:51:29";s:10:"updated_at";s:19:"2026-01-29 01:51:29";s:10:"deleted_at";N;s:8:"children";a:1:{i:0;a:12:{s:2:"id";s:2:"96";s:14:"menu_parent_id";s:2:"95";s:5:"label";s:12:"Exams Drafts";s:3:"url";s:26:"/administrator/exam-drafts";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-29 01:52:20";s:10:"updated_at";s:19:"2026-01-29 01:52:20";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:8;a:12:{s:2:"id";s:1:"1";s:14:"menu_parent_id";N;s:5:"label";s:5:"Users";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"10";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:6:{i:0;a:12:{s:2:"id";s:2:"12";s:14:"menu_parent_id";s:1:"1";s:5:"label";s:20:"Active Notifications";s:3:"url";s:20:"notifications/active";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"13";s:14:"menu_parent_id";s:1:"1";s:5:"label";s:21:"Deleted Notifications";s:3:"url";s:21:"notifications/deleted";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"14";s:14:"menu_parent_id";s:1:"1";s:5:"label";s:14:"Login Activity";s:3:"url";s:19:"user/login_activity";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 02:55:24";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:3;a:12:{s:2:"id";s:2:"15";s:14:"menu_parent_id";s:1:"1";s:5:"label";s:9:"User List";s:3:"url";s:14:"user/user_list";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"4";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:4;a:12:{s:2:"id";s:2:"52";s:14:"menu_parent_id";s:1:"1";s:5:"label";s:14:"Navbar Builder";s:3:"url";s:11:"nav-builder";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"5";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:34:01";s:10:"updated_at";s:19:"2025-09-05 21:57:09";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:5;a:12:{s:2:"id";s:2:"76";s:14:"menu_parent_id";s:1:"1";s:5:"label";s:13:"IP Management";s:3:"url";s:21:"administrator/ip_bans";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"5";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-26 06:34:35";s:10:"updated_at";s:19:"2025-10-26 06:34:35";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:9;a:12:{s:2:"id";s:1:"2";s:14:"menu_parent_id";N;s:5:"label";s:5:"Roles";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"20";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 02:56:34";s:10:"deleted_at";N;s:8:"children";a:3:{i:0;a:12:{s:2:"id";s:2:"16";s:14:"menu_parent_id";s:1:"2";s:5:"label";s:16:"Assign User Role";s:3:"url";s:26:"rolepermission/assign_role";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 03:11:09";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"17";s:14:"menu_parent_id";s:1:"2";s:5:"label";s:15:"Role Management";s:3:"url";s:20:"rolepermission/roles";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 02:55:43";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"53";s:14:"menu_parent_id";s:1:"2";s:5:"label";s:21:"Permission Management";s:3:"url";s:31:"rolepermission/list_permissions";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-08 05:25:02";s:10:"updated_at";s:19:"2025-09-12 07:24:13";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:10;a:12:{s:2:"id";s:1:"3";s:14:"menu_parent_id";N;s:5:"label";s:13:"Configuration";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"30";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 02:54:57";s:10:"deleted_at";N;s:8:"children";a:2:{i:0;a:12:{s:2:"id";s:2:"84";s:14:"menu_parent_id";s:1:"3";s:5:"label";s:24:"Edit attendance Comments";s:3:"url";s:34:"administrator/attendance-templates";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-04 04:17:02";s:10:"updated_at";s:19:"2026-01-04 04:17:02";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"18";s:14:"menu_parent_id";s:1:"3";s:5:"label";s:22:"Add/Edit Configuration";s:3:"url";s:32:"configuration/configuration_view";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 02:52:20";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:11;a:12:{s:2:"id";s:1:"4";s:14:"menu_parent_id";N;s:5:"label";s:8:"Staffing";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"40";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:3:{i:0;a:12:{s:2:"id";s:2:"71";s:14:"menu_parent_id";s:1:"4";s:5:"label";s:16:"Staff Attendance";s:3:"url";s:30:"admin/teacher-attendance/month";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-27 04:29:24";s:10:"updated_at";s:19:"2025-09-28 05:39:08";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"19";s:14:"menu_parent_id";s:1:"4";s:5:"label";s:13:"Staff Profile";s:3:"url";s:11:"staff/index";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"20";s:14:"menu_parent_id";s:1:"4";s:5:"label";s:24:"Teacher Class Assignment";s:3:"url";s:38:"administrator/teacher_class_assignment";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:12;a:12:{s:2:"id";s:1:"5";s:14:"menu_parent_id";N;s:5:"label";s:7:"Parents";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"50";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:1:{i:0;a:12:{s:2:"id";s:2:"21";s:14:"menu_parent_id";s:1:"5";s:5:"label";s:14:"Parent Profile";s:3:"url";s:29:"administrator/parent_profiles";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:13;a:12:{s:2:"id";s:1:"6";s:14:"menu_parent_id";N;s:5:"label";s:15:"Student-Affairs";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"60";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:16:{i:0;a:12:{s:2:"id";s:2:"90";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:14:"Remove Student";s:3:"url";s:31:"/administrator/removed_students";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-14 03:53:43";s:10:"updated_at";s:19:"2026-01-14 03:53:43";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"97";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:14:"Placement Test";s:3:"url";s:17:"grading/placement";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-02-06 03:08:29";s:10:"updated_at";s:19:"2026-02-06 03:08:29";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"22";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:21:"Attendance Management";s:3:"url";s:30:"administrator/daily_attendance";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-27 05:10:47";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:3;a:12:{s:2:"id";s:2:"23";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:26:"Attendance Tracking System";s:3:"url";s:21:"attendance/violations";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-10-12 15:13:51";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:4;a:12:{s:2:"id";s:2:"24";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:16:"Attendance Scans";s:3:"url";s:16:"rfid_coming_soon";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:5;a:12:{s:2:"id";s:2:"25";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:12:"Classes List";s:3:"url";s:30:"administrator/class_assignment";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"4";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:6;a:12:{s:2:"id";s:2:"78";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:16:"Early Dismissals";s:3:"url";s:27:"attendance/early-dismissals";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"4";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-26 06:40:01";s:10:"updated_at";s:19:"2025-10-26 14:57:41";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:7;a:12:{s:2:"id";s:2:"26";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:17:"Emergency Contact";s:3:"url";s:31:"administrator/emergency_contact";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"5";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 02:56:05";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:8;a:12:{s:2:"id";s:2:"27";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:21:"Enrollment-Withdrawal";s:3:"url";s:37:"enroll_withdraw/enrollment_withdrawal";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"6";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-19 06:23:25";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:9;a:12:{s:2:"id";s:2:"28";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:20:"Incidents Management";s:3:"url";s:22:"flags/flags_management";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"7";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2026-01-29 04:26:10";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:10;a:12:{s:2:"id";s:2:"29";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:15:"School Calendar";s:3:"url";s:27:"administrator/calendar_view";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"8";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:11;a:12:{s:2:"id";s:2:"77";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:18:"Late Slips History";s:3:"url";s:13:"slips/preview";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"8";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-26 06:38:42";s:10:"updated_at";s:19:"2025-10-26 06:38:42";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:12;a:12:{s:2:"id";s:2:"30";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:14:"Score Analysis";s:3:"url";s:15:"report/combined";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"9";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2026-01-26 05:12:17";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:13;a:12:{s:2:"id";s:2:"31";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:16:"Score Management";s:3:"url";s:7:"grading";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"10";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2026-01-26 05:11:48";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:14;a:12:{s:2:"id";s:2:"32";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:24:"Student Class Assignment";s:3:"url";s:38:"administrator/student_class_assignment";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"11";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:15;a:12:{s:2:"id";s:2:"33";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:15:"Student Profile";s:3:"url";s:30:"administrator/student_profiles";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"12";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:14;a:12:{s:2:"id";s:1:"7";s:14:"menu_parent_id";N;s:5:"label";s:7:"Classes";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"70";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:3:{i:0;a:12:{s:2:"id";s:2:"79";s:14:"menu_parent_id";s:1:"7";s:5:"label";s:16:"Class Distribute";s:3:"url";s:38:"administrator/sections/auto-distribute";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-26 06:41:13";s:10:"updated_at";s:19:"2025-10-26 06:41:13";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"34";s:14:"menu_parent_id";s:1:"7";s:5:"label";s:12:"Classes List";s:3:"url";s:30:"administrator/class_assignment";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 03:08:21";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"80";s:14:"menu_parent_id";s:1:"7";s:5:"label";s:22:"Section Auto Generator";s:3:"url";s:39:"administrator/sections/promotion-totals";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-26 06:42:02";s:10:"updated_at";s:19:"2025-10-26 06:42:02";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:15;a:12:{s:2:"id";s:1:"8";s:14:"menu_parent_id";N;s:5:"label";s:13:"Communication";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"80";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 16:46:08";s:10:"deleted_at";N;s:8:"children";a:6:{i:0;a:12:{s:2:"id";s:2:"65";s:14:"menu_parent_id";s:1:"8";s:5:"label";s:12:"New Students";s:3:"url";s:29:"admin/enrollment/new-students";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-11 03:44:37";s:10:"updated_at";s:19:"2025-09-16 16:45:27";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"73";s:14:"menu_parent_id";s:1:"8";s:5:"label";s:24:"Whatsapp Link Management";s:3:"url";s:9:"whatsapp/";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-11 22:58:29";s:10:"updated_at";s:19:"2025-10-11 22:58:29";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"35";s:14:"menu_parent_id";s:1:"8";s:5:"label";s:22:"Parent Email Extractor";s:3:"url";s:29:"emails/parent_email_extractor";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 03:08:44";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:3;a:12:{s:2:"id";s:2:"36";s:14:"menu_parent_id";s:1:"8";s:5:"label";s:14:"Parent Profile";s:3:"url";s:29:"administrator/parent_profiles";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 16:44:58";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:4;a:12:{s:2:"id";s:2:"37";s:14:"menu_parent_id";s:1:"8";s:5:"label";s:15:"Student Profile";s:3:"url";s:30:"administrator/student_profiles";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 03:09:19";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:5;a:12:{s:2:"id";s:2:"81";s:14:"menu_parent_id";s:1:"8";s:5:"label";s:16:"Grading Tracking";s:3:"url";s:25:"grading/homework-tracking";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-26 06:43:11";s:10:"updated_at";s:19:"2025-10-26 14:35:52";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:16;a:12:{s:2:"id";s:1:"9";s:14:"menu_parent_id";N;s:5:"label";s:9:"Financial";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"90";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 16:56:16";s:10:"deleted_at";N;s:8:"children";a:11:{i:0;a:12:{s:2:"id";s:2:"68";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:17:"Add Extra Charges";s:3:"url";s:13:"admin/charges";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-21 05:05:12";s:10:"updated_at";s:19:"2025-09-21 05:05:12";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"69";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:14:"Manual Payment";s:3:"url";s:18:"payment/manual_pay";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-21 05:06:53";s:10:"updated_at";s:19:"2025-09-21 05:06:53";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"82";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:16:"Payment Tracking";s:3:"url";s:22:"payment/unpaid-parents";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-11-01 16:23:39";s:10:"updated_at";s:19:"2025-12-07 16:19:30";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:3;a:12:{s:2:"id";s:2:"38";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:19:"Discount Management";s:3:"url";s:14:"discounts/list";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 02:52:38";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:4;a:12:{s:2:"id";s:2:"39";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:19:"Expenses Management";s:3:"url";s:14:"expenses/index";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 16:57:45";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:5;a:12:{s:2:"id";s:2:"40";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:16:"Financial Report";s:3:"url";s:24:"payment/financial_report";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 16:58:15";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:6;a:12:{s:2:"id";s:2:"41";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:19:"Invoices Management";s:3:"url";s:34:"invoice_payment/invoice_management";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"4";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 16:57:07";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:7;a:12:{s:2:"id";s:2:"42";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:14:"Manual Payment";s:3:"url";s:18:"payment/manual_pay";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"5";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 16:58:41";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:8;a:12:{s:2:"id";s:2:"43";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:18:"PaypalTransactions";s:3:"url";s:33:"administrator/paypal_transactions";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"6";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:9;a:12:{s:2:"id";s:2:"44";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:17:"Refund Management";s:3:"url";s:12:"refunds/list";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"7";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 17:02:17";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:10;a:12:{s:2:"id";s:2:"45";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:24:"Reimbursement Management";s:3:"url";s:20:"reimbursements/index";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"8";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 17:01:41";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:17;a:12:{s:2:"id";s:2:"10";s:14:"menu_parent_id";N;s:5:"label";s:10:"Printables";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:3:"100";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:5:{i:0;a:12:{s:2:"id";s:2:"85";s:14:"menu_parent_id";s:2:"10";s:5:"label";s:17:"Print for teacher";s:3:"url";s:20:"admin/print-requests";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-07 04:29:16";s:10:"updated_at";s:19:"2026-01-07 04:29:16";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"46";s:14:"menu_parent_id";s:2:"10";s:5:"label";s:6:"Badges";s:3:"url";s:29:"printables_reports/badge_form";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 03:18:24";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"47";s:14:"menu_parent_id";s:2:"10";s:5:"label";s:10:"Class Prep";s:3:"url";s:10:"class-prep";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-27 04:31:03";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:3;a:12:{s:2:"id";s:2:"48";s:14:"menu_parent_id";s:2:"10";s:5:"label";s:12:"Report Cards";s:3:"url";s:30:"printables_reports/report_card";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:4;a:12:{s:2:"id";s:2:"49";s:14:"menu_parent_id";s:2:"10";s:5:"label";s:8:"Stickers";s:3:"url";s:27:"printables_reports/stickers";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"4";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:18;a:12:{s:2:"id";s:2:"11";s:14:"menu_parent_id";N;s:5:"label";s:16:"Event Management";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:3:"110";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:2:{i:0;a:12:{s:2:"id";s:2:"50";s:14:"menu_parent_id";s:2:"11";s:5:"label";s:8:"Calendar";s:3:"url";s:22:"administrator/calendar";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 03:20:09";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"51";s:14:"menu_parent_id";s:2:"11";s:5:"label";s:6:"Events";s:3:"url";s:20:"administrator/events";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}}}}} \ No newline at end of file +a:3:{s:4:"time";i:1772172244;s:3:"ttl";i:300;s:4:"data";a:19:{i:0;a:12:{s:2:"id";s:2:"63";s:14:"menu_parent_id";N;s:5:"label";s:6:"Family";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-09 15:22:56";s:10:"updated_at";s:19:"2025-10-26 06:33:11";s:10:"deleted_at";N;s:8:"children";a:2:{i:0;a:12:{s:2:"id";s:2:"64";s:14:"menu_parent_id";s:2:"63";s:5:"label";s:16:"Family Managment";s:3:"url";s:12:"family/index";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-09 15:23:49";s:10:"updated_at";s:19:"2025-10-26 06:28:34";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"74";s:14:"menu_parent_id";s:2:"63";s:5:"label";s:13:"Family Update";s:3:"url";s:22:"families/import-legacy";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-26 06:29:11";s:10:"updated_at";s:19:"2025-10-26 06:29:11";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:1;a:12:{s:2:"id";s:2:"67";s:14:"menu_parent_id";N;s:5:"label";s:9:"Inventory";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-11 06:24:37";s:10:"updated_at";s:19:"2025-09-16 16:48:58";s:10:"deleted_at";N;s:8:"children";a:6:{i:0;a:12:{s:2:"id";s:2:"56";s:14:"menu_parent_id";s:2:"67";s:5:"label";s:5:"Books";s:3:"url";s:14:"inventory/book";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-08 19:13:48";s:10:"updated_at";s:19:"2025-10-05 03:43:38";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"72";s:14:"menu_parent_id";s:2:"67";s:5:"label";s:26:"Update Inventory Movements";s:3:"url";s:19:"inventory/movements";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-02 06:07:53";s:10:"updated_at";s:19:"2025-10-05 03:42:08";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"55";s:14:"menu_parent_id";s:2:"67";s:5:"label";s:19:"Classroom Equipment";s:3:"url";s:9:"inventory";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-08 18:56:08";s:10:"updated_at";s:19:"2025-09-16 16:47:32";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:3;a:12:{s:2:"id";s:2:"57";s:14:"menu_parent_id";s:2:"67";s:5:"label";s:16:"Kitchen Supplies";s:3:"url";s:17:"inventory/kitchen";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-08 19:14:24";s:10:"updated_at";s:19:"2025-09-16 16:48:23";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:4;a:12:{s:2:"id";s:2:"58";s:14:"menu_parent_id";s:2:"67";s:5:"label";s:15:"Office Supplies";s:3:"url";s:16:"inventory/office";s:10:"icon_class";N;s:6:"target";s:6:"_blank";s:10:"sort_order";s:1:"4";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-08 19:14:53";s:10:"updated_at";s:19:"2025-09-10 22:17:05";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:5;a:12:{s:2:"id";s:2:"66";s:14:"menu_parent_id";s:2:"67";s:5:"label";s:7:"Summary";s:3:"url";s:21:"inventory/summary-all";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"4";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-11 05:56:10";s:10:"updated_at";s:19:"2025-09-11 06:28:41";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:2;a:12:{s:2:"id";s:2:"83";s:14:"menu_parent_id";N;s:5:"label";s:15:"TimeOff Request";s:3:"url";s:22:"/administrator/absence";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-11-01 20:58:55";s:10:"updated_at";s:19:"2025-11-01 20:58:55";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:3;a:12:{s:2:"id";s:2:"86";s:14:"menu_parent_id";N;s:5:"label";s:11:"Competition";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-11 07:40:32";s:10:"updated_at";s:19:"2026-01-11 07:40:32";s:10:"deleted_at";N;s:8:"children";a:1:{i:0;a:12:{s:2:"id";s:2:"87";s:14:"menu_parent_id";s:2:"86";s:5:"label";s:17:"Competition Setup";s:3:"url";s:19:"competition-winners";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-11 07:41:19";s:10:"updated_at";s:19:"2026-01-11 07:41:19";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:4;a:12:{s:2:"id";s:2:"88";s:14:"menu_parent_id";N;s:5:"label";s:23:"Notification Management";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-13 19:48:58";s:10:"updated_at";s:19:"2026-01-13 19:48:58";s:10:"deleted_at";N;s:8:"children";a:1:{i:0;a:12:{s:2:"id";s:2:"89";s:14:"menu_parent_id";s:2:"88";s:5:"label";s:18:"Notification Setup";s:3:"url";s:35:"/administrator/notifications_alerts";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-13 19:49:35";s:10:"updated_at";s:19:"2026-01-13 19:49:35";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:5;a:12:{s:2:"id";s:2:"92";s:14:"menu_parent_id";N;s:5:"label";s:10:"Curriculum";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-18 07:23:26";s:10:"updated_at";s:19:"2026-01-18 07:23:26";s:10:"deleted_at";N;s:8:"children";a:2:{i:0;a:12:{s:2:"id";s:2:"91";s:14:"menu_parent_id";s:2:"92";s:5:"label";s:14:"Class Progress";s:3:"url";s:14:"admin/progress";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-15 04:38:48";s:10:"updated_at";s:19:"2026-01-18 07:24:37";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"93";s:14:"menu_parent_id";s:2:"92";s:5:"label";s:18:"Curriculum Subject";s:3:"url";s:32:"administrator/subject-curriculum";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-18 07:25:26";s:10:"updated_at";s:19:"2026-01-18 07:25:26";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:6;a:12:{s:2:"id";s:2:"94";s:14:"menu_parent_id";N;s:5:"label";s:19:"Teacher Submissions";s:3:"url";s:33:"administrator/teacher-submissions";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-25 22:20:24";s:10:"updated_at";s:19:"2026-01-25 22:20:24";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:7;a:12:{s:2:"id";s:2:"95";s:14:"menu_parent_id";N;s:5:"label";s:5:"Exams";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-29 01:51:29";s:10:"updated_at";s:19:"2026-01-29 01:51:29";s:10:"deleted_at";N;s:8:"children";a:1:{i:0;a:12:{s:2:"id";s:2:"96";s:14:"menu_parent_id";s:2:"95";s:5:"label";s:12:"Exams Drafts";s:3:"url";s:26:"/administrator/exam-drafts";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-29 01:52:20";s:10:"updated_at";s:19:"2026-01-29 01:52:20";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:8;a:12:{s:2:"id";s:1:"1";s:14:"menu_parent_id";N;s:5:"label";s:5:"Users";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"10";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:6:{i:0;a:12:{s:2:"id";s:2:"12";s:14:"menu_parent_id";s:1:"1";s:5:"label";s:20:"Active Notifications";s:3:"url";s:20:"notifications/active";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"13";s:14:"menu_parent_id";s:1:"1";s:5:"label";s:21:"Deleted Notifications";s:3:"url";s:21:"notifications/deleted";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"14";s:14:"menu_parent_id";s:1:"1";s:5:"label";s:14:"Login Activity";s:3:"url";s:19:"user/login_activity";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 02:55:24";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:3;a:12:{s:2:"id";s:2:"15";s:14:"menu_parent_id";s:1:"1";s:5:"label";s:9:"User List";s:3:"url";s:14:"user/user_list";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"4";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:4;a:12:{s:2:"id";s:2:"52";s:14:"menu_parent_id";s:1:"1";s:5:"label";s:14:"Navbar Builder";s:3:"url";s:11:"nav-builder";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"5";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:34:01";s:10:"updated_at";s:19:"2025-09-05 21:57:09";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:5;a:12:{s:2:"id";s:2:"76";s:14:"menu_parent_id";s:1:"1";s:5:"label";s:13:"IP Management";s:3:"url";s:21:"administrator/ip_bans";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"5";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-26 06:34:35";s:10:"updated_at";s:19:"2025-10-26 06:34:35";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:9;a:12:{s:2:"id";s:1:"2";s:14:"menu_parent_id";N;s:5:"label";s:5:"Roles";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"20";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 02:56:34";s:10:"deleted_at";N;s:8:"children";a:3:{i:0;a:12:{s:2:"id";s:2:"16";s:14:"menu_parent_id";s:1:"2";s:5:"label";s:16:"Assign User Role";s:3:"url";s:26:"rolepermission/assign_role";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 03:11:09";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"17";s:14:"menu_parent_id";s:1:"2";s:5:"label";s:15:"Role Management";s:3:"url";s:20:"rolepermission/roles";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 02:55:43";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"53";s:14:"menu_parent_id";s:1:"2";s:5:"label";s:21:"Permission Management";s:3:"url";s:31:"rolepermission/list_permissions";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-08 05:25:02";s:10:"updated_at";s:19:"2025-09-12 07:24:13";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:10;a:12:{s:2:"id";s:1:"3";s:14:"menu_parent_id";N;s:5:"label";s:13:"Configuration";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"30";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 02:54:57";s:10:"deleted_at";N;s:8:"children";a:2:{i:0;a:12:{s:2:"id";s:2:"84";s:14:"menu_parent_id";s:1:"3";s:5:"label";s:24:"Edit attendance Comments";s:3:"url";s:34:"administrator/attendance-templates";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-04 04:17:02";s:10:"updated_at";s:19:"2026-01-04 04:17:02";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"18";s:14:"menu_parent_id";s:1:"3";s:5:"label";s:22:"Add/Edit Configuration";s:3:"url";s:32:"configuration/configuration_view";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 02:52:20";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:11;a:12:{s:2:"id";s:1:"4";s:14:"menu_parent_id";N;s:5:"label";s:8:"Staffing";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"40";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:3:{i:0;a:12:{s:2:"id";s:2:"71";s:14:"menu_parent_id";s:1:"4";s:5:"label";s:16:"Staff Attendance";s:3:"url";s:30:"admin/teacher-attendance/month";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-27 04:29:24";s:10:"updated_at";s:19:"2025-09-28 05:39:08";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"19";s:14:"menu_parent_id";s:1:"4";s:5:"label";s:13:"Staff Profile";s:3:"url";s:11:"staff/index";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"20";s:14:"menu_parent_id";s:1:"4";s:5:"label";s:24:"Teacher Class Assignment";s:3:"url";s:38:"administrator/teacher_class_assignment";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:12;a:12:{s:2:"id";s:1:"5";s:14:"menu_parent_id";N;s:5:"label";s:7:"Parents";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"50";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:1:{i:0;a:12:{s:2:"id";s:2:"21";s:14:"menu_parent_id";s:1:"5";s:5:"label";s:14:"Parent Profile";s:3:"url";s:29:"administrator/parent_profiles";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:13;a:12:{s:2:"id";s:1:"6";s:14:"menu_parent_id";N;s:5:"label";s:15:"Student-Affairs";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"60";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:16:{i:0;a:12:{s:2:"id";s:2:"90";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:14:"Remove Student";s:3:"url";s:31:"/administrator/removed_students";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-14 03:53:43";s:10:"updated_at";s:19:"2026-01-14 03:53:43";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"97";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:14:"Placement Test";s:3:"url";s:17:"grading/placement";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-02-06 03:08:29";s:10:"updated_at";s:19:"2026-02-06 03:08:29";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"22";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:21:"Attendance Management";s:3:"url";s:30:"administrator/daily_attendance";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-27 05:10:47";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:3;a:12:{s:2:"id";s:2:"23";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:26:"Attendance Tracking System";s:3:"url";s:21:"attendance/violations";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-10-12 15:13:51";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:4;a:12:{s:2:"id";s:2:"24";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:16:"Attendance Scans";s:3:"url";s:16:"rfid_coming_soon";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:5;a:12:{s:2:"id";s:2:"25";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:12:"Classes List";s:3:"url";s:30:"administrator/class_assignment";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"4";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:6;a:12:{s:2:"id";s:2:"78";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:16:"Early Dismissals";s:3:"url";s:27:"attendance/early-dismissals";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"4";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-26 06:40:01";s:10:"updated_at";s:19:"2025-10-26 14:57:41";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:7;a:12:{s:2:"id";s:2:"26";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:17:"Emergency Contact";s:3:"url";s:31:"administrator/emergency_contact";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"5";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 02:56:05";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:8;a:12:{s:2:"id";s:2:"27";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:21:"Enrollment-Withdrawal";s:3:"url";s:37:"enroll_withdraw/enrollment_withdrawal";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"6";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-19 06:23:25";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:9;a:12:{s:2:"id";s:2:"28";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:20:"Incidents Management";s:3:"url";s:22:"flags/flags_management";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"7";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2026-01-29 04:26:10";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:10;a:12:{s:2:"id";s:2:"29";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:15:"School Calendar";s:3:"url";s:27:"administrator/calendar_view";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"8";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:11;a:12:{s:2:"id";s:2:"77";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:18:"Late Slips History";s:3:"url";s:13:"slips/preview";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"8";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-26 06:38:42";s:10:"updated_at";s:19:"2025-10-26 06:38:42";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:12;a:12:{s:2:"id";s:2:"30";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:14:"Score Analysis";s:3:"url";s:15:"report/combined";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"9";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2026-01-26 05:12:17";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:13;a:12:{s:2:"id";s:2:"31";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:16:"Score Management";s:3:"url";s:7:"grading";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"10";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2026-01-26 05:11:48";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:14;a:12:{s:2:"id";s:2:"32";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:24:"Student Class Assignment";s:3:"url";s:38:"administrator/student_class_assignment";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"11";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:15;a:12:{s:2:"id";s:2:"33";s:14:"menu_parent_id";s:1:"6";s:5:"label";s:15:"Student Profile";s:3:"url";s:30:"administrator/student_profiles";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"12";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:14;a:12:{s:2:"id";s:1:"7";s:14:"menu_parent_id";N;s:5:"label";s:7:"Classes";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"70";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:3:{i:0;a:12:{s:2:"id";s:2:"79";s:14:"menu_parent_id";s:1:"7";s:5:"label";s:16:"Class Distribute";s:3:"url";s:38:"administrator/sections/auto-distribute";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-26 06:41:13";s:10:"updated_at";s:19:"2025-10-26 06:41:13";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"34";s:14:"menu_parent_id";s:1:"7";s:5:"label";s:12:"Classes List";s:3:"url";s:30:"administrator/class_assignment";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 03:08:21";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"80";s:14:"menu_parent_id";s:1:"7";s:5:"label";s:22:"Section Auto Generator";s:3:"url";s:39:"administrator/sections/promotion-totals";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-26 06:42:02";s:10:"updated_at";s:19:"2025-10-26 06:42:02";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:15;a:12:{s:2:"id";s:1:"8";s:14:"menu_parent_id";N;s:5:"label";s:13:"Communication";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"80";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 16:46:08";s:10:"deleted_at";N;s:8:"children";a:6:{i:0;a:12:{s:2:"id";s:2:"65";s:14:"menu_parent_id";s:1:"8";s:5:"label";s:12:"New Students";s:3:"url";s:29:"admin/enrollment/new-students";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-11 03:44:37";s:10:"updated_at";s:19:"2025-09-16 16:45:27";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"73";s:14:"menu_parent_id";s:1:"8";s:5:"label";s:24:"Whatsapp Link Management";s:3:"url";s:9:"whatsapp/";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-11 22:58:29";s:10:"updated_at";s:19:"2025-10-11 22:58:29";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"35";s:14:"menu_parent_id";s:1:"8";s:5:"label";s:22:"Parent Email Extractor";s:3:"url";s:29:"emails/parent_email_extractor";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 03:08:44";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:3;a:12:{s:2:"id";s:2:"36";s:14:"menu_parent_id";s:1:"8";s:5:"label";s:14:"Parent Profile";s:3:"url";s:29:"administrator/parent_profiles";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 16:44:58";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:4;a:12:{s:2:"id";s:2:"37";s:14:"menu_parent_id";s:1:"8";s:5:"label";s:15:"Student Profile";s:3:"url";s:30:"administrator/student_profiles";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 03:09:19";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:5;a:12:{s:2:"id";s:2:"81";s:14:"menu_parent_id";s:1:"8";s:5:"label";s:16:"Grading Tracking";s:3:"url";s:25:"grading/homework-tracking";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-10-26 06:43:11";s:10:"updated_at";s:19:"2025-10-26 14:35:52";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:16;a:12:{s:2:"id";s:1:"9";s:14:"menu_parent_id";N;s:5:"label";s:9:"Financial";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:2:"90";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 16:56:16";s:10:"deleted_at";N;s:8:"children";a:11:{i:0;a:12:{s:2:"id";s:2:"68";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:17:"Add Extra Charges";s:3:"url";s:13:"admin/charges";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-21 05:05:12";s:10:"updated_at";s:19:"2025-09-21 05:05:12";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"69";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:14:"Manual Payment";s:3:"url";s:18:"payment/manual_pay";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-21 05:06:53";s:10:"updated_at";s:19:"2025-09-21 05:06:53";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"82";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:16:"Payment Tracking";s:3:"url";s:22:"payment/unpaid-parents";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-11-01 16:23:39";s:10:"updated_at";s:19:"2025-12-07 16:19:30";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:3;a:12:{s:2:"id";s:2:"38";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:19:"Discount Management";s:3:"url";s:14:"discounts/list";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 02:52:38";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:4;a:12:{s:2:"id";s:2:"39";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:19:"Expenses Management";s:3:"url";s:14:"expenses/index";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 16:57:45";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:5;a:12:{s:2:"id";s:2:"40";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:16:"Financial Report";s:3:"url";s:24:"payment/financial_report";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 16:58:15";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:6;a:12:{s:2:"id";s:2:"41";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:19:"Invoices Management";s:3:"url";s:34:"invoice_payment/invoice_management";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"4";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 16:57:07";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:7;a:12:{s:2:"id";s:2:"42";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:14:"Manual Payment";s:3:"url";s:18:"payment/manual_pay";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"5";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 16:58:41";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:8;a:12:{s:2:"id";s:2:"43";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:18:"PaypalTransactions";s:3:"url";s:33:"administrator/paypal_transactions";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"6";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:9;a:12:{s:2:"id";s:2:"44";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:17:"Refund Management";s:3:"url";s:12:"refunds/list";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"7";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 17:02:17";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:10;a:12:{s:2:"id";s:2:"45";s:14:"menu_parent_id";s:1:"9";s:5:"label";s:24:"Reimbursement Management";s:3:"url";s:20:"reimbursements/index";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"8";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-16 17:01:41";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:17;a:12:{s:2:"id";s:2:"10";s:14:"menu_parent_id";N;s:5:"label";s:10:"Printables";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:3:"100";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:5:{i:0;a:12:{s:2:"id";s:2:"85";s:14:"menu_parent_id";s:2:"10";s:5:"label";s:17:"Print for teacher";s:3:"url";s:20:"admin/print-requests";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"0";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-01-07 04:29:16";s:10:"updated_at";s:19:"2026-01-07 04:29:16";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"46";s:14:"menu_parent_id";s:2:"10";s:5:"label";s:6:"Badges";s:3:"url";s:29:"printables_reports/badge_form";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 03:18:24";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"47";s:14:"menu_parent_id";s:2:"10";s:5:"label";s:10:"Class Prep";s:3:"url";s:10:"class-prep";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-27 04:31:03";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:3;a:12:{s:2:"id";s:2:"48";s:14:"menu_parent_id";s:2:"10";s:5:"label";s:12:"Report Cards";s:3:"url";s:30:"printables_reports/report_card";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:4;a:12:{s:2:"id";s:2:"49";s:14:"menu_parent_id";s:2:"10";s:5:"label";s:8:"Stickers";s:3:"url";s:27:"printables_reports/stickers";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"4";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}}}i:18;a:12:{s:2:"id";s:2:"11";s:14:"menu_parent_id";N;s:5:"label";s:16:"Event Management";s:3:"url";N;s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:3:"110";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:3:{i:0;a:12:{s:2:"id";s:2:"50";s:14:"menu_parent_id";s:2:"11";s:5:"label";s:8:"Calendar";s:3:"url";s:22:"administrator/calendar";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"1";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";s:19:"2025-09-09 03:20:09";s:10:"deleted_at";N;s:8:"children";a:0:{}}i:1;a:12:{s:2:"id";s:2:"51";s:14:"menu_parent_id";s:2:"11";s:5:"label";s:6:"Events";s:3:"url";s:20:"administrator/events";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"2";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2025-09-05 17:23:56";s:10:"updated_at";N;s:10:"deleted_at";N;s:8:"children";a:0:{}}i:2;a:12:{s:2:"id";s:2:"98";s:14:"menu_parent_id";s:2:"11";s:5:"label";s:19:"Competition Winners";s:3:"url";s:25:"admin/competition-winners";s:10:"icon_class";N;s:6:"target";N;s:10:"sort_order";s:1:"3";s:10:"is_enabled";s:1:"1";s:10:"created_at";s:19:"2026-02-27 05:50:42";s:10:"updated_at";s:19:"2026-02-27 05:50:42";s:10:"deleted_at";N;s:8:"children";a:0:{}}}}}} \ No newline at end of file diff --git a/writable/logs/log-2026-02-10.log b/writable/logs/log-2026-02-10.log deleted file mode 100644 index 6832ebe..0000000 --- a/writable/logs/log-2026-02-10.log +++ /dev/null @@ -1,66 +0,0 @@ -ERROR - 2026-02-10 07:23:30 --> mysqli_sql_exception: Column 'school_year' in where clause is ambiguous in /opt/lampp/htdocs/alrahma_school_sunday/vendor/codeigniter4/framework/system/Database/MySQLi/Connection.php:327 -Stack trace: -#0 /opt/lampp/htdocs/alrahma_school_sunday/vendor/codeigniter4/framework/system/Database/MySQLi/Connection.php(327): mysqli->query() -#1 /opt/lampp/htdocs/alrahma_school_sunday/vendor/codeigniter4/framework/system/Database/BaseConnection.php(729): CodeIgniter\Database\MySQLi\Connection->execute() -#2 /opt/lampp/htdocs/alrahma_school_sunday/vendor/codeigniter4/framework/system/Database/BaseConnection.php(646): CodeIgniter\Database\BaseConnection->simpleQuery() -#3 /opt/lampp/htdocs/alrahma_school_sunday/vendor/codeigniter4/framework/system/Database/BaseBuilder.php(1649): CodeIgniter\Database\BaseConnection->query() -#4 /opt/lampp/htdocs/alrahma_school_sunday/vendor/codeigniter4/framework/system/Model.php(286): CodeIgniter\Database\BaseBuilder->get() -#5 /opt/lampp/htdocs/alrahma_school_sunday/vendor/codeigniter4/framework/system/BaseModel.php(677): CodeIgniter\Model->doFindAll() -#6 /opt/lampp/htdocs/alrahma_school_sunday/app/Models/StudentClassModel.php(55): CodeIgniter\BaseModel->findAll() -#7 /opt/lampp/htdocs/alrahma_school_sunday/app/Controllers/View/AttendanceTrackingController.php(70): App\Models\StudentClassModel->findAll() -#8 /opt/lampp/htdocs/alrahma_school_sunday/vendor/codeigniter4/framework/system/CodeIgniter.php(933): App\Controllers\View\AttendanceTrackingController->pendingViolationsView() -#9 /opt/lampp/htdocs/alrahma_school_sunday/vendor/codeigniter4/framework/system/CodeIgniter.php(507): CodeIgniter\CodeIgniter->runController() -#10 /opt/lampp/htdocs/alrahma_school_sunday/vendor/codeigniter4/framework/system/CodeIgniter.php(354): CodeIgniter\CodeIgniter->handleRequest() -#11 /opt/lampp/htdocs/alrahma_school_sunday/vendor/codeigniter4/framework/system/Boot.php(363): CodeIgniter\CodeIgniter->run() -#12 /opt/lampp/htdocs/alrahma_school_sunday/vendor/codeigniter4/framework/system/Boot.php(68): CodeIgniter\Boot::runCodeIgniter() -#13 /opt/lampp/htdocs/alrahma_school_sunday/public/index.php(60): CodeIgniter\Boot::bootWeb() -#14 /opt/lampp/htdocs/alrahma_school_sunday/vendor/codeigniter4/framework/system/rewrite.php(44): require_once('...') -#15 {main} -CRITICAL - 2026-02-10 07:23:30 --> CodeIgniter\Database\Exceptions\DatabaseException: Column 'school_year' in where clause is ambiguous -[Method: GET, Route: attendance/violations] -in SYSTEMPATH/Database/BaseConnection.php on line 684. - 1 SYSTEMPATH/Database/BaseBuilder.php(1649): CodeIgniter\Database\BaseConnection->query() - 2 SYSTEMPATH/Model.php(286): CodeIgniter\Database\BaseBuilder->get() - 3 SYSTEMPATH/BaseModel.php(677): CodeIgniter\Model->doFindAll() - 4 APPPATH/Models/StudentClassModel.php(55): CodeIgniter\BaseModel->findAll() - 5 APPPATH/Controllers/View/AttendanceTrackingController.php(70): App\Models\StudentClassModel->findAll() - 6 SYSTEMPATH/CodeIgniter.php(933): App\Controllers\View\AttendanceTrackingController->pendingViolationsView() - 7 SYSTEMPATH/CodeIgniter.php(507): CodeIgniter\CodeIgniter->runController() - 8 SYSTEMPATH/CodeIgniter.php(354): CodeIgniter\CodeIgniter->handleRequest() - 9 SYSTEMPATH/Boot.php(363): CodeIgniter\CodeIgniter->run() -10 SYSTEMPATH/Boot.php(68): CodeIgniter\Boot::runCodeIgniter() -11 FCPATH/index.php(60): CodeIgniter\Boot::bootWeb() -12 SYSTEMPATH/rewrite.php(44): require_once('/opt/lampp/htdocs/alrahma_school_sunday/public/index.php') -CRITICAL - 2026-02-10 07:23:30 --> [Caused by] CodeIgniter\Database\Exceptions\DatabaseException: Column 'school_year' in where clause is ambiguous -in SYSTEMPATH/Database/MySQLi/Connection.php on line 332. - 1 SYSTEMPATH/Database/BaseConnection.php(729): CodeIgniter\Database\MySQLi\Connection->execute() - 2 SYSTEMPATH/Database/BaseConnection.php(646): CodeIgniter\Database\BaseConnection->simpleQuery() - 3 SYSTEMPATH/Database/BaseBuilder.php(1649): CodeIgniter\Database\BaseConnection->query() - 4 SYSTEMPATH/Model.php(286): CodeIgniter\Database\BaseBuilder->get() - 5 SYSTEMPATH/BaseModel.php(677): CodeIgniter\Model->doFindAll() - 6 APPPATH/Models/StudentClassModel.php(55): CodeIgniter\BaseModel->findAll() - 7 APPPATH/Controllers/View/AttendanceTrackingController.php(70): App\Models\StudentClassModel->findAll() - 8 SYSTEMPATH/CodeIgniter.php(933): App\Controllers\View\AttendanceTrackingController->pendingViolationsView() - 9 SYSTEMPATH/CodeIgniter.php(507): CodeIgniter\CodeIgniter->runController() -10 SYSTEMPATH/CodeIgniter.php(354): CodeIgniter\CodeIgniter->handleRequest() -11 SYSTEMPATH/Boot.php(363): CodeIgniter\CodeIgniter->run() -12 SYSTEMPATH/Boot.php(68): CodeIgniter\Boot::runCodeIgniter() -13 FCPATH/index.php(60): CodeIgniter\Boot::bootWeb() -14 SYSTEMPATH/rewrite.php(44): require_once('/opt/lampp/htdocs/alrahma_school_sunday/public/index.php') -CRITICAL - 2026-02-10 07:23:30 --> [Caused by] mysqli_sql_exception: Column 'school_year' in where clause is ambiguous -in SYSTEMPATH/Database/MySQLi/Connection.php on line 327. - 1 SYSTEMPATH/Database/MySQLi/Connection.php(327): mysqli->query() - 2 SYSTEMPATH/Database/BaseConnection.php(729): CodeIgniter\Database\MySQLi\Connection->execute() - 3 SYSTEMPATH/Database/BaseConnection.php(646): CodeIgniter\Database\BaseConnection->simpleQuery() - 4 SYSTEMPATH/Database/BaseBuilder.php(1649): CodeIgniter\Database\BaseConnection->query() - 5 SYSTEMPATH/Model.php(286): CodeIgniter\Database\BaseBuilder->get() - 6 SYSTEMPATH/BaseModel.php(677): CodeIgniter\Model->doFindAll() - 7 APPPATH/Models/StudentClassModel.php(55): CodeIgniter\BaseModel->findAll() - 8 APPPATH/Controllers/View/AttendanceTrackingController.php(70): App\Models\StudentClassModel->findAll() - 9 SYSTEMPATH/CodeIgniter.php(933): App\Controllers\View\AttendanceTrackingController->pendingViolationsView() -10 SYSTEMPATH/CodeIgniter.php(507): CodeIgniter\CodeIgniter->runController() -11 SYSTEMPATH/CodeIgniter.php(354): CodeIgniter\CodeIgniter->handleRequest() -12 SYSTEMPATH/Boot.php(363): CodeIgniter\CodeIgniter->run() -13 SYSTEMPATH/Boot.php(68): CodeIgniter\Boot::runCodeIgniter() -14 FCPATH/index.php(60): CodeIgniter\Boot::bootWeb() -15 SYSTEMPATH/rewrite.php(44): require_once('/opt/lampp/htdocs/alrahma_school_sunday/public/index.php') diff --git a/writable/logs/log-2026-02-25.log b/writable/logs/log-2026-02-25.log deleted file mode 100644 index 39e8720..0000000 --- a/writable/logs/log-2026-02-25.log +++ /dev/null @@ -1,3 +0,0 @@ -ERROR - 2026-02-25 21:13:03 --> No class section found for user ID: 2 -ERROR - 2026-02-25 21:13:45 --> No class section found for user ID: 1 -ERROR - 2026-02-25 21:24:56 --> No class section found for user ID: 2 diff --git a/writable/logs/log-2026-02-26.log b/writable/logs/log-2026-02-26.log deleted file mode 100644 index a3b8da3..0000000 --- a/writable/logs/log-2026-02-26.log +++ /dev/null @@ -1 +0,0 @@ -ERROR - 2026-02-26 19:10:40 --> No class section found for user ID: 1 diff --git a/writable/session/ci_session01fd4625b0c67ac15b18834dca2b16cb b/writable/session/ci_session01fd4625b0c67ac15b18834dca2b16cb index b5ec2df..210938a 100644 --- a/writable/session/ci_session01fd4625b0c67ac15b18834dca2b16cb +++ b/writable/session/ci_session01fd4625b0c67ac15b18834dca2b16cb @@ -1 +1 @@ -__ci_last_regenerate|i:1772167652;_ci_previous_url|s:36:"http://localhost:8080/admin/progress";user_id|s:1:"1";user_email|s:23:"larbi.elabidi@gmail.com";user_name|s:20:"Moulay Larbi Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772167655;roles|a:20:{i:0;s:5:"admin";i:1;s:13:"administrator";i:2;s:15:"csm_contributor";i:3;s:15:"fes_contributor";i:4;s:21:"financial_contributor";i:5;s:14:"fs_contributor";i:6;s:11:"head of csm";i:7;s:28:"head of department education";i:8;s:10:"head of fa";i:9;s:11:"head of fes";i:10;s:10:"head of fs";i:11;s:12:"head of itpd";i:12;s:16:"itpd contributor";i:13;s:6:"parent";i:14;s:9:"principal";i:15;s:15:"saf_contributor";i:16;s:10:"substitute";i:17;s:7:"teacher";i:18;s:17:"teacher_assistant";i:19;s:14:"vice principal";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:13:"administrator"; \ No newline at end of file +__ci_last_regenerate|i:1772168049;_ci_previous_url|s:36:"http://localhost:8080/admin/progress";user_id|s:1:"1";user_email|s:23:"larbi.elabidi@gmail.com";user_name|s:20:"Moulay Larbi Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772167655;roles|a:20:{i:0;s:5:"admin";i:1;s:13:"administrator";i:2;s:15:"csm_contributor";i:3;s:15:"fes_contributor";i:4;s:21:"financial_contributor";i:5;s:14:"fs_contributor";i:6;s:11:"head of csm";i:7;s:28:"head of department education";i:8;s:10:"head of fa";i:9;s:11:"head of fes";i:10;s:10:"head of fs";i:11;s:12:"head of itpd";i:12;s:16:"itpd contributor";i:13;s:6:"parent";i:14;s:9:"principal";i:15;s:15:"saf_contributor";i:16;s:10:"substitute";i:17;s:7:"teacher";i:18;s:17:"teacher_assistant";i:19;s:14:"vice principal";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:13:"administrator"; \ No newline at end of file diff --git a/writable/session/ci_session13e20cdfdb6621c5b09f29a82f029e57 b/writable/session/ci_session13e20cdfdb6621c5b09f29a82f029e57 new file mode 100644 index 0000000..8aae405 --- /dev/null +++ b/writable/session/ci_session13e20cdfdb6621c5b09f29a82f029e57 @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772171635;_ci_previous_url|s:35:"http://localhost:8080/parent/scores";user_id|s:1:"3";user_email|s:19:"kelabidi0@gmail.com";user_name|s:15:"Khadija Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772170259;roles|a:2:{i:0;s:7:"teacher";i:1;s:6:"parent";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:6:"parent";class_section_id|i:10;class_section_ids|a:1:{i:0;i:10;} \ No newline at end of file diff --git a/writable/session/ci_session15accf59fe089c23e568cb193e604b1a b/writable/session/ci_session15accf59fe089c23e568cb193e604b1a new file mode 100644 index 0000000..1b0e022 --- /dev/null +++ b/writable/session/ci_session15accf59fe089c23e568cb193e604b1a @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772173263;_ci_previous_url|s:35:"http://localhost:8080/parent/scores";user_id|s:1:"2";user_email|s:24:"moulay.elabidi@gmail.com";user_name|s:20:"Moulay Larbi Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772172575;roles|a:1:{i:0;s:6:"parent";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:6:"parent";class_section_id|N; \ No newline at end of file diff --git a/writable/session/ci_session28db9d4191c8557373ac41e16ea594a7 b/writable/session/ci_session28db9d4191c8557373ac41e16ea594a7 new file mode 100644 index 0000000..3f158b4 --- /dev/null +++ b/writable/session/ci_session28db9d4191c8557373ac41e16ea594a7 @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772168666;_ci_previous_url|s:42:"http://localhost:8080/admin/print-requests";user_id|s:1:"1";user_email|s:23:"larbi.elabidi@gmail.com";user_name|s:20:"Moulay Larbi Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772167655;roles|a:20:{i:0;s:5:"admin";i:1;s:13:"administrator";i:2;s:15:"csm_contributor";i:3;s:15:"fes_contributor";i:4;s:21:"financial_contributor";i:5;s:14:"fs_contributor";i:6;s:11:"head of csm";i:7;s:28:"head of department education";i:8;s:10:"head of fa";i:9;s:11:"head of fes";i:10;s:10:"head of fs";i:11;s:12:"head of itpd";i:12;s:16:"itpd contributor";i:13;s:6:"parent";i:14;s:9:"principal";i:15;s:15:"saf_contributor";i:16;s:10:"substitute";i:17;s:7:"teacher";i:18;s:17:"teacher_assistant";i:19;s:14:"vice principal";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:13:"administrator";class_section_id|i:21;class_section_ids|a:1:{i:0;i:21;} \ No newline at end of file diff --git a/writable/session/ci_session28fb8fb63570017f69429eedebb942ef b/writable/session/ci_session28fb8fb63570017f69429eedebb942ef new file mode 100644 index 0000000..accde71 --- /dev/null +++ b/writable/session/ci_session28fb8fb63570017f69429eedebb942ef @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772171325;_ci_previous_url|s:35:"http://localhost:8080/parent/scores";user_id|s:1:"3";user_email|s:19:"kelabidi0@gmail.com";user_name|s:15:"Khadija Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772170259;roles|a:2:{i:0;s:7:"teacher";i:1;s:6:"parent";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:6:"parent";class_section_id|i:10;class_section_ids|a:1:{i:0;i:10;} \ No newline at end of file diff --git a/writable/session/ci_session60e8aa014efc1e020759de78e578be33 b/writable/session/ci_session60e8aa014efc1e020759de78e578be33 new file mode 100644 index 0000000..d5005f2 --- /dev/null +++ b/writable/session/ci_session60e8aa014efc1e020759de78e578be33 @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772169271;_ci_previous_url|s:36:"http://localhost:8080/admin/progress";user_id|s:1:"1";user_email|s:23:"larbi.elabidi@gmail.com";user_name|s:20:"Moulay Larbi Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772168936;roles|a:20:{i:0;s:5:"admin";i:1;s:13:"administrator";i:2;s:15:"csm_contributor";i:3;s:15:"fes_contributor";i:4;s:21:"financial_contributor";i:5;s:14:"fs_contributor";i:6;s:11:"head of csm";i:7;s:28:"head of department education";i:8;s:10:"head of fa";i:9;s:11:"head of fes";i:10;s:10:"head of fs";i:11;s:12:"head of itpd";i:12;s:16:"itpd contributor";i:13;s:6:"parent";i:14;s:9:"principal";i:15;s:15:"saf_contributor";i:16;s:10:"substitute";i:17;s:7:"teacher";i:18;s:17:"teacher_assistant";i:19;s:14:"vice principal";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:13:"administrator"; \ No newline at end of file diff --git a/writable/session/ci_session655568293d5858415e3f5a32174490d7 b/writable/session/ci_session655568293d5858415e3f5a32174490d7 new file mode 100644 index 0000000..1b0e022 --- /dev/null +++ b/writable/session/ci_session655568293d5858415e3f5a32174490d7 @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772173263;_ci_previous_url|s:35:"http://localhost:8080/parent/scores";user_id|s:1:"2";user_email|s:24:"moulay.elabidi@gmail.com";user_name|s:20:"Moulay Larbi Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772172575;roles|a:1:{i:0;s:6:"parent";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:6:"parent";class_section_id|N; \ No newline at end of file diff --git a/writable/session/ci_session97bdada8c5a5254ff8e979f95353c509 b/writable/session/ci_session97bdada8c5a5254ff8e979f95353c509 new file mode 100644 index 0000000..c608de8 --- /dev/null +++ b/writable/session/ci_session97bdada8c5a5254ff8e979f95353c509 @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772172343;_ci_previous_url|s:35:"http://localhost:8080/parent/scores";user_id|s:1:"3";user_email|s:19:"kelabidi0@gmail.com";user_name|s:15:"Khadija Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772170259;roles|a:2:{i:0;s:7:"teacher";i:1;s:6:"parent";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:6:"parent";class_section_id|i:10;class_section_ids|a:1:{i:0;i:10;} \ No newline at end of file diff --git a/writable/session/ci_sessiona4a444a82ad686d0dc5a091c81d94170 b/writable/session/ci_sessiona4a444a82ad686d0dc5a091c81d94170 new file mode 100644 index 0000000..6331333 --- /dev/null +++ b/writable/session/ci_sessiona4a444a82ad686d0dc5a091c81d94170 @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772169728;_ci_previous_url|s:43:"http://localhost:8080/admin/progress/view/1";user_id|s:1:"1";user_email|s:23:"larbi.elabidi@gmail.com";user_name|s:20:"Moulay Larbi Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772168936;roles|a:20:{i:0;s:5:"admin";i:1;s:13:"administrator";i:2;s:15:"csm_contributor";i:3;s:15:"fes_contributor";i:4;s:21:"financial_contributor";i:5;s:14:"fs_contributor";i:6;s:11:"head of csm";i:7;s:28:"head of department education";i:8;s:10:"head of fa";i:9;s:11:"head of fes";i:10;s:10:"head of fs";i:11;s:12:"head of itpd";i:12;s:16:"itpd contributor";i:13;s:6:"parent";i:14;s:9:"principal";i:15;s:15:"saf_contributor";i:16;s:10:"substitute";i:17;s:7:"teacher";i:18;s:17:"teacher_assistant";i:19;s:14:"vice principal";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:13:"administrator"; \ No newline at end of file diff --git a/writable/session/ci_sessiona996af0961b7f64bfba73ae4960a7965 b/writable/session/ci_sessiona996af0961b7f64bfba73ae4960a7965 new file mode 100644 index 0000000..e6ac068 --- /dev/null +++ b/writable/session/ci_sessiona996af0961b7f64bfba73ae4960a7965 @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772170251;_ci_previous_url|s:36:"http://localhost:8080/admin/progress";user_id|s:1:"1";user_email|s:23:"larbi.elabidi@gmail.com";user_name|s:20:"Moulay Larbi Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772151602;roles|a:20:{i:0;s:5:"admin";i:1;s:13:"administrator";i:2;s:15:"csm_contributor";i:3;s:15:"fes_contributor";i:4;s:21:"financial_contributor";i:5;s:14:"fs_contributor";i:6;s:11:"head of csm";i:7;s:28:"head of department education";i:8;s:10:"head of fa";i:9;s:11:"head of fes";i:10;s:10:"head of fs";i:11;s:12:"head of itpd";i:12;s:16:"itpd contributor";i:13;s:6:"parent";i:14;s:9:"principal";i:15;s:15:"saf_contributor";i:16;s:10:"substitute";i:17;s:7:"teacher";i:18;s:17:"teacher_assistant";i:19;s:14:"vice principal";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:13:"administrator"; \ No newline at end of file diff --git a/writable/session/ci_sessionb439b9809878d7711491d477aa83ca5d b/writable/session/ci_sessionb439b9809878d7711491d477aa83ca5d new file mode 100644 index 0000000..2f5ea18 --- /dev/null +++ b/writable/session/ci_sessionb439b9809878d7711491d477aa83ca5d @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772172244;_ci_previous_url|s:52:"http://localhost:8080/printables_reports/report_card";user_id|s:1:"1";user_email|s:23:"larbi.elabidi@gmail.com";user_name|s:20:"Moulay Larbi Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772168936;roles|a:20:{i:0;s:5:"admin";i:1;s:13:"administrator";i:2;s:15:"csm_contributor";i:3;s:15:"fes_contributor";i:4;s:21:"financial_contributor";i:5;s:14:"fs_contributor";i:6;s:11:"head of csm";i:7;s:28:"head of department education";i:8;s:10:"head of fa";i:9;s:11:"head of fes";i:10;s:10:"head of fs";i:11;s:12:"head of itpd";i:12;s:16:"itpd contributor";i:13;s:6:"parent";i:14;s:9:"principal";i:15;s:15:"saf_contributor";i:16;s:10:"substitute";i:17;s:7:"teacher";i:18;s:17:"teacher_assistant";i:19;s:14:"vice principal";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:13:"administrator"; \ No newline at end of file diff --git a/writable/session/ci_sessionb5f9db7b39dedb66cb2dd08bcc069309 b/writable/session/ci_sessionb5f9db7b39dedb66cb2dd08bcc069309 index 800692c..13a2eb3 100644 --- a/writable/session/ci_sessionb5f9db7b39dedb66cb2dd08bcc069309 +++ b/writable/session/ci_sessionb5f9db7b39dedb66cb2dd08bcc069309 @@ -1 +1 @@ -__ci_last_regenerate|i:1772151598;_ci_previous_url|s:36:"http://localhost:8080/admin/progress";user_id|s:1:"1";user_email|s:23:"larbi.elabidi@gmail.com";user_name|s:20:"Moulay Larbi Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772151602;roles|a:20:{i:0;s:5:"admin";i:1;s:13:"administrator";i:2;s:15:"csm_contributor";i:3;s:15:"fes_contributor";i:4;s:21:"financial_contributor";i:5;s:14:"fs_contributor";i:6;s:11:"head of csm";i:7;s:28:"head of department education";i:8;s:10:"head of fa";i:9;s:11:"head of fes";i:10;s:10:"head of fs";i:11;s:12:"head of itpd";i:12;s:16:"itpd contributor";i:13;s:6:"parent";i:14;s:9:"principal";i:15;s:15:"saf_contributor";i:16;s:10:"substitute";i:17;s:7:"teacher";i:18;s:17:"teacher_assistant";i:19;s:14:"vice principal";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:13:"administrator"; \ No newline at end of file +__ci_last_regenerate|i:1772168444;_ci_previous_url|s:36:"http://localhost:8080/admin/progress";user_id|s:1:"1";user_email|s:23:"larbi.elabidi@gmail.com";user_name|s:20:"Moulay Larbi Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772151602;roles|a:20:{i:0;s:5:"admin";i:1;s:13:"administrator";i:2;s:15:"csm_contributor";i:3;s:15:"fes_contributor";i:4;s:21:"financial_contributor";i:5;s:14:"fs_contributor";i:6;s:11:"head of csm";i:7;s:28:"head of department education";i:8;s:10:"head of fa";i:9;s:11:"head of fes";i:10;s:10:"head of fs";i:11;s:12:"head of itpd";i:12;s:16:"itpd contributor";i:13;s:6:"parent";i:14;s:9:"principal";i:15;s:15:"saf_contributor";i:16;s:10:"substitute";i:17;s:7:"teacher";i:18;s:17:"teacher_assistant";i:19;s:14:"vice principal";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:13:"administrator"; \ No newline at end of file diff --git a/writable/session/ci_sessionbbe3696172b144f313d2ec3f954d10f3 b/writable/session/ci_sessionbbe3696172b144f313d2ec3f954d10f3 new file mode 100644 index 0000000..2f5ea18 --- /dev/null +++ b/writable/session/ci_sessionbbe3696172b144f313d2ec3f954d10f3 @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772172244;_ci_previous_url|s:52:"http://localhost:8080/printables_reports/report_card";user_id|s:1:"1";user_email|s:23:"larbi.elabidi@gmail.com";user_name|s:20:"Moulay Larbi Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772168936;roles|a:20:{i:0;s:5:"admin";i:1;s:13:"administrator";i:2;s:15:"csm_contributor";i:3;s:15:"fes_contributor";i:4;s:21:"financial_contributor";i:5;s:14:"fs_contributor";i:6;s:11:"head of csm";i:7;s:28:"head of department education";i:8;s:10:"head of fa";i:9;s:11:"head of fes";i:10;s:10:"head of fs";i:11;s:12:"head of itpd";i:12;s:16:"itpd contributor";i:13;s:6:"parent";i:14;s:9:"principal";i:15;s:15:"saf_contributor";i:16;s:10:"substitute";i:17;s:7:"teacher";i:18;s:17:"teacher_assistant";i:19;s:14:"vice principal";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:13:"administrator"; \ No newline at end of file diff --git a/writable/session/ci_sessionc94c11e1d9da69e0cdb692421e7b1672 b/writable/session/ci_sessionc94c11e1d9da69e0cdb692421e7b1672 new file mode 100644 index 0000000..2f0b94b --- /dev/null +++ b/writable/session/ci_sessionc94c11e1d9da69e0cdb692421e7b1672 @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772170606;_ci_previous_url|s:35:"http://localhost:8080/parent/scores";user_id|s:1:"3";user_email|s:19:"kelabidi0@gmail.com";user_name|s:15:"Khadija Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772170259;roles|a:2:{i:0;s:7:"teacher";i:1;s:6:"parent";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:6:"parent";class_section_id|i:10;class_section_ids|a:1:{i:0;i:10;} \ No newline at end of file diff --git a/writable/session/ci_sessioneb31c51a5591f18c9eebf66fb00ec27a b/writable/session/ci_sessioneb31c51a5591f18c9eebf66fb00ec27a new file mode 100644 index 0000000..0440987 --- /dev/null +++ b/writable/session/ci_sessioneb31c51a5591f18c9eebf66fb00ec27a @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772170913;_ci_previous_url|s:35:"http://localhost:8080/parent/scores";user_id|s:1:"3";user_email|s:19:"kelabidi0@gmail.com";user_name|s:15:"Khadija Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772170259;roles|a:2:{i:0;s:7:"teacher";i:1;s:6:"parent";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:6:"parent";class_section_id|i:10;class_section_ids|a:1:{i:0;i:10;} \ No newline at end of file diff --git a/writable/session/ci_sessionf79d092c32d1b7de11f536773504068d b/writable/session/ci_sessionf79d092c32d1b7de11f536773504068d new file mode 100644 index 0000000..35d3399 --- /dev/null +++ b/writable/session/ci_sessionf79d092c32d1b7de11f536773504068d @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772172006;_ci_previous_url|s:35:"http://localhost:8080/parent/scores";user_id|s:1:"3";user_email|s:19:"kelabidi0@gmail.com";user_name|s:15:"Khadija Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772170259;roles|a:2:{i:0;s:7:"teacher";i:1;s:6:"parent";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:6:"parent";class_section_id|i:10;class_section_ids|a:1:{i:0;i:10;} \ No newline at end of file diff --git a/writable/session/ci_sessionfdfc6c7d215d20cc59b91faab68fe350 b/writable/session/ci_sessionfdfc6c7d215d20cc59b91faab68fe350 new file mode 100644 index 0000000..e8879c1 --- /dev/null +++ b/writable/session/ci_sessionfdfc6c7d215d20cc59b91faab68fe350 @@ -0,0 +1 @@ +__ci_last_regenerate|i:1772171020;_ci_previous_url|s:36:"http://localhost:8080/admin/progress";user_id|s:1:"1";user_email|s:23:"larbi.elabidi@gmail.com";user_name|s:20:"Moulay Larbi Elabidi";user_type|s:7:"primary";is_logged_in|b:1;login_time|i:1772168936;roles|a:20:{i:0;s:5:"admin";i:1;s:13:"administrator";i:2;s:15:"csm_contributor";i:3;s:15:"fes_contributor";i:4;s:21:"financial_contributor";i:5;s:14:"fs_contributor";i:6;s:11:"head of csm";i:7;s:28:"head of department education";i:8;s:10:"head of fa";i:9;s:11:"head of fes";i:10;s:10:"head of fs";i:11;s:12:"head of itpd";i:12;s:16:"itpd contributor";i:13;s:6:"parent";i:14;s:9:"principal";i:15;s:15:"saf_contributor";i:16;s:10:"substitute";i:17;s:7:"teacher";i:18;s:17:"teacher_assistant";i:19;s:14:"vice principal";}semester|s:6:"Spring";school_year|s:9:"2025-2026";role|s:13:"administrator"; \ No newline at end of file
StudentStudent Status Missing WarningsViewedSigned