cleanup codeigniter code

This commit is contained in:
root
2026-06-04 02:55:19 -04:00
parent 4dde38004f
commit 1af02dadd3
31 changed files with 824 additions and 756 deletions
+1 -1
View File
@@ -5,7 +5,7 @@
"type": "module",
"scripts": {
"test:api": "node scripts/test-api.mjs",
"gen:ci-meta": "node scripts/gen-ci-route-meta.mjs",
"gen:view-meta": "node scripts/gen-view-route-meta.mjs",
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "eslint .",
+24 -7
View File
@@ -1,14 +1,31 @@
<?php
/** Stub CI helper so the partial can be included standalone. */
function base_url(string $path = ''): string
{
$path = ltrim($path, '/');
return $path === '' ? '/' : '/' . $path;
$root = dirname(__DIR__);
$policyHtmlPath = '/Volumes/ExternalApps/Documents/alrahma_sunday_school_api/resources/policies/school_policy.html';
if (!is_file($policyHtmlPath)) {
fwrite(STDERR, "Policy source not found: {$policyHtmlPath}\n");
exit(1);
}
$root = dirname(__DIR__);
$data = include $root . '/../app_codeigniter/app/Views/policy/school_policy_partial.php';
$html = file_get_contents($policyHtmlPath);
if ($html === false) {
fwrite(STDERR, "Failed to read policy source\n");
exit(1);
}
$data = [
'title' => 'School Policy',
'sections' => [
[
'subsections' => [
[
'body' => $html,
],
],
],
],
];
$outDir = $root . '/public/policy';
if (!is_dir($outDir)) {
-92
View File
@@ -1,92 +0,0 @@
/**
* Generates src/lib/ciRouteMeta.generated.ts from CodeIgniter app/Views/*.php files.
* Run: node scripts/gen-ci-route-meta.mjs
*/
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const viewsRoot = path.resolve(__dirname, '../../app_codeigniter/app/Views')
const outFile = path.resolve(__dirname, '../src/lib/ciRouteMeta.generated.ts')
const SKIP_DIRS = new Set([
'layout',
'partials',
'errors',
'pagination',
'docs',
])
function humanize(slug) {
const s = slug.replace(/\.php$/i, '').replace(/_/g, ' ')
return s.replace(/\b\w/g, (c) => c.toUpperCase())
}
function walk(dir, baseRel) {
const out = []
let entries = []
try {
entries = fs.readdirSync(dir, { withFileTypes: true })
} catch {
return out
}
for (const e of entries) {
const rel = path.join(baseRel, e.name)
const full = path.join(dir, e.name)
if (e.isDirectory()) {
if (SKIP_DIRS.has(e.name)) continue
out.push(...walk(full, rel))
} else if (e.isFile() && e.name.endsWith('.php')) {
out.push(rel.replace(/\\/g, '/'))
}
}
return out
}
function main() {
if (!fs.existsSync(viewsRoot)) {
console.error('Missing Views folder:', viewsRoot)
process.exit(1)
}
const files = walk(viewsRoot, '')
.filter((f) => !f.includes('/layout/'))
.sort()
const entries = []
for (const f of files) {
const parts = f.split('/')
const base = parts.pop().replace(/\.php$/i, '')
const section = parts.join('/') || '(root)'
const routeKey = [...parts, base].filter(Boolean).join('/')
const ciViewPath = f
const title = humanize(base)
entries.push({ routeKey, title, ciViewPath })
}
const lines = []
lines.push(`/** Auto-generated by scripts/gen-ci-route-meta.mjs — do not edit by hand. */`)
lines.push(``)
lines.push(`export type CiRouteMetaEntry = {`)
lines.push(` title: string`)
lines.push(` ciViewPath: string`)
lines.push(`}`)
lines.push(``)
lines.push(`export const ciRouteMeta: Record<string, CiRouteMetaEntry> = {`)
for (const { routeKey, title, ciViewPath } of entries) {
const safeTitle = title.replace(/\\/g, '\\\\').replace(/'/g, "\\'")
const safeView = ciViewPath.replace(/\\/g, '/')
lines.push(` '${routeKey}': { title: '${safeTitle}', ciViewPath: '${safeView}' },`)
}
lines.push(`}`)
lines.push(``)
fs.mkdirSync(path.dirname(outFile), { recursive: true })
fs.writeFileSync(outFile, lines.join('\n'), 'utf8')
console.log(`Wrote ${entries.length} entries → ${path.relative(process.cwd(), outFile)}`)
}
main()
+140
View File
@@ -0,0 +1,140 @@
/**
* Generates src/lib/viewRouteMeta.generated.ts from discovered PHP view files.
* Run: node scripts/gen-view-route-meta.mjs
*/
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const projectRoot = path.resolve(__dirname, '..')
const parentRoot = path.resolve(projectRoot, '..')
const outFile = path.resolve(projectRoot, 'src/lib/viewRouteMeta.generated.ts')
const SKIP_DIRS = new Set([
'layout',
'partials',
'errors',
'pagination',
'docs',
])
function humanize(slug) {
const normalized = slug.replace(/(\.blade)?\.php$/i, '').replace(/_/g, ' ')
return normalized.replace(/\b\w/g, (char) => char.toUpperCase())
}
function walk(dir, baseRel) {
const out = []
let entries = []
try {
entries = fs.readdirSync(dir, { withFileTypes: true })
} catch {
return out
}
for (const entry of entries) {
const rel = path.join(baseRel, entry.name)
const full = path.join(dir, entry.name)
if (entry.isDirectory()) {
if (SKIP_DIRS.has(entry.name)) continue
out.push(...walk(full, rel))
continue
}
if (entry.isFile() && /\.php$/i.test(entry.name)) {
out.push(rel.replace(/\\/g, '/'))
}
}
return out
}
function discoverViewRoots() {
const roots = []
const fromEnv = process.env.VIEW_SOURCE_ROOT?.trim()
if (fromEnv) {
roots.push(path.resolve(projectRoot, fromEnv))
}
let siblings = []
try {
siblings = fs.readdirSync(parentRoot, { withFileTypes: true })
.filter((entry) => entry.isDirectory())
.map((entry) => path.join(parentRoot, entry.name))
} catch {
siblings = []
}
for (const sibling of siblings) {
roots.push(path.join(sibling, 'app', 'Views'))
roots.push(path.join(sibling, 'resources', 'views'))
}
return [...new Set(roots)].filter((root) => fs.existsSync(root))
}
function resolveViewsRoot() {
let best = null
let bestCount = -1
for (const candidate of discoverViewRoots()) {
const count = walk(candidate, '').length
if (count > bestCount) {
best = candidate
bestCount = count
}
}
return best
}
function main() {
const viewsRoot = resolveViewsRoot()
if (!viewsRoot) {
console.error('Missing PHP view source folder. Set VIEW_SOURCE_ROOT to override discovery.')
process.exit(1)
}
const files = walk(viewsRoot, '')
.filter((file) => !file.includes('/layout/'))
.sort()
const entries = []
for (const file of files) {
const parts = file.split('/')
const base = parts.pop().replace(/(\.blade)?\.php$/i, '')
const routeKey = [...parts, base].filter(Boolean).join('/')
const sourceViewPath = file
const title = humanize(base)
entries.push({ routeKey, title, sourceViewPath })
}
const lines = []
lines.push('/** Auto-generated by scripts/gen-view-route-meta.mjs — do not edit by hand. */')
lines.push('')
lines.push('export type ViewRouteMetaEntry = {')
lines.push(' title: string')
lines.push(' sourceViewPath: string')
lines.push('}')
lines.push('')
lines.push('export const viewRouteMeta: Record<string, ViewRouteMetaEntry> = {')
for (const { routeKey, title, sourceViewPath } of entries) {
const safeTitle = title.replace(/\\/g, '\\\\').replace(/'/g, "\\'")
const safeView = sourceViewPath.replace(/\\/g, '/')
lines.push(` '${routeKey}': { title: '${safeTitle}', sourceViewPath: '${safeView}' },`)
}
lines.push('}')
lines.push('')
fs.mkdirSync(path.dirname(outFile), { recursive: true })
fs.writeFileSync(outFile, lines.join('\n'), 'utf8')
console.log(`Wrote ${entries.length} entries → ${path.relative(process.cwd(), outFile)}`)
}
main()
+6 -6
View File
@@ -71,11 +71,11 @@ const AppHome = lazy(() => import('./pages/AppHome').then((m) => ({ default: m.A
const AdminLandingDashboardPage = lazy(() =>
import('./pages/landing/AdminLandingDashboardPage').then((m) => ({ default: m.AdminLandingDashboardPage })),
)
const CiSitemapPage = lazy(() =>
import('./pages/CiSitemapPage').then((m) => ({ default: m.CiSitemapPage })),
const ViewRouteSitemapPage = lazy(() =>
import('./pages/ViewRouteSitemapPage').then((m) => ({ default: m.ViewRouteSitemapPage })),
)
const CiPlaceholderPage = lazy(() =>
import('./pages/CiPlaceholderPage').then((m) => ({ default: m.CiPlaceholderPage })),
const ViewRoutePlaceholderPage = lazy(() =>
import('./pages/ViewRoutePlaceholderPage').then((m) => ({ default: m.ViewRoutePlaceholderPage })),
)
const NavBuilderPage = lazy(() =>
import('./pages/NavBuilderPage').then((m) => ({ default: m.NavBuilderPage })),
@@ -1426,8 +1426,8 @@ export default function App() {
</Route>
<Route element={<ManagementLayout />}>
<Route path="browse" element={<CiSitemapPage />} />
<Route path="*" element={<CiPlaceholderPage />} />
<Route path="browse" element={<ViewRouteSitemapPage />} />
<Route path="*" element={<ViewRoutePlaceholderPage />} />
</Route>
</Route>
</Route>
+1 -1
View File
@@ -1,4 +1,4 @@
/** Northeast states — same labels as CodeIgniter user/register.php */
export const NE_STATES: { abbr: string; name: string }[] = [
{ abbr: 'CT', name: 'Connecticut' },
{ abbr: 'ME', name: 'Maine' },
+1 -1
View File
@@ -1,5 +1,5 @@
:root {
/* Mirrors CodeIgniter management_layout theme tokens */
--app-primary: #22a047;
--mgmt-primary: #22a047;
--mgmt-primary-hover: #1c863b;
-24
View File
@@ -1,24 +0,0 @@
import type { CiRouteMetaEntry } from './ciRouteMeta.generated'
/**
* CI routes that do not map 1:1 to a single Views/*.php filename (composed dashboards, aliases).
* Keys use snake_case segments like the generated registry.
*/
export const ciRouteManual: Record<string, CiRouteMetaEntry> = {
'teacher/dashboard': {
title: 'Teacher dashboard',
ciViewPath: '(TeacherController::dashboard — see Views/teacher/*.php)',
},
'administrator/dashboard': {
title: 'Administrator dashboard',
ciViewPath: '(Support/administrator dashboards — see Views/administrator/*.php)',
},
'administrator/administratordashboard': {
title: 'Administrator dashboard',
ciViewPath: 'administrator/administratordashboard.php',
},
'landing_page/guest_dashboard': {
title: 'Guest dashboard',
ciViewPath: 'landing_page/guest_dashboard.php',
},
}
-324
View File
@@ -1,324 +0,0 @@
/** Auto-generated by scripts/gen-ci-route-meta.mjs — do not edit by hand. */
export type CiRouteMetaEntry = {
title: string
ciViewPath: string
}
export const ciRouteMeta: Record<string, CiRouteMetaEntry> = {
'about': { title: 'About', ciViewPath: 'about.php' },
'account/choose_account': { title: 'Choose Account', ciViewPath: 'account/choose_account.php' },
'activate_account': { title: 'Activate Account', ciViewPath: 'activate_account.php' },
'admin/class_progress_list': { title: 'Class Progress List', ciViewPath: 'admin/class_progress_list.php' },
'admin/class_progress_view': { title: 'Class Progress View', ciViewPath: 'admin/class_progress_view.php' },
'admin/competition_winners/form': { title: 'Form', ciViewPath: 'admin/competition_winners/form.php' },
'admin/competition_winners/index': { title: 'Index', ciViewPath: 'admin/competition_winners/index.php' },
'admin/competition_winners/preview': { title: 'Preview', ciViewPath: 'admin/competition_winners/preview.php' },
'admin/competition_winners/scores': { title: 'Scores', ciViewPath: 'admin/competition_winners/scores.php' },
'admin/competition_winners/winners': { title: 'Winners', ciViewPath: 'admin/competition_winners/winners.php' },
'admin/student_score_card': { title: 'Student Score Card', ciViewPath: 'admin/student_score_card.php' },
'administrator/absence_vacation': { title: 'Absence Vacation', ciViewPath: 'administrator/absence_vacation.php' },
'administrator/academic_performance': { title: 'Academic Performance', ciViewPath: 'administrator/academic_performance.php' },
'administrator/admin_attendance_records': { title: 'Admin Attendance Records', ciViewPath: 'administrator/admin_attendance_records.php' },
'administrator/admin_profiles': { title: 'Admin Profiles', ciViewPath: 'administrator/admin_profiles.php' },
'administrator/administratordashboard': { title: 'Administratordashboard', ciViewPath: 'administrator/administratordashboard.php' },
'administrator/attendance': { title: 'Attendance', ciViewPath: 'administrator/attendance.php' },
'administrator/attendance_records': { title: 'Attendance Records', ciViewPath: 'administrator/attendance_records.php' },
'administrator/behavior_reports': { title: 'Behavior Reports', ciViewPath: 'administrator/behavior_reports.php' },
'administrator/broadcast_email': { title: 'Broadcast Email', ciViewPath: 'administrator/broadcast_email.php' },
'administrator/budget_reports': { title: 'Budget Reports', ciViewPath: 'administrator/budget_reports.php' },
'administrator/calendar': { title: 'Calendar', ciViewPath: 'administrator/calendar.php' },
'administrator/calendar_add_event': { title: 'Calendar Add Event', ciViewPath: 'administrator/calendar_add_event.php' },
'administrator/calendar_edit': { title: 'Calendar Edit', ciViewPath: 'administrator/calendar_edit.php' },
'administrator/calendar_view': { title: 'Calendar View', ciViewPath: 'administrator/calendar_view.php' },
'administrator/class_assignment': { title: 'Class Assignment', ciViewPath: 'administrator/class_assignment.php' },
'administrator/class_section': { title: 'Class Section', ciViewPath: 'administrator/class_section.php' },
'administrator/class_warning_modal': { title: 'Class Warning Modal', ciViewPath: 'administrator/class_warning_modal.php' },
'administrator/communication_logs': { title: 'Communication Logs', ciViewPath: 'administrator/communication_logs.php' },
'administrator/course_materials': { title: 'Course Materials', ciViewPath: 'administrator/course_materials.php' },
'administrator/create_parent': { title: 'Create Parent', ciViewPath: 'administrator/create_parent.php' },
'administrator/daily_attendance': { title: 'Daily Attendance', ciViewPath: 'administrator/daily_attendance.php' },
'administrator/daily_attendance_analysis': { title: 'Daily Attendance Analysis', ciViewPath: 'administrator/daily_attendance_analysis.php' },
'administrator/edit_parent': { title: 'Edit Parent', ciViewPath: 'administrator/edit_parent.php' },
'administrator/edit_teacher': { title: 'Edit Teacher', ciViewPath: 'administrator/edit_teacher.php' },
'administrator/emergency_contact/edit': { title: 'Edit', ciViewPath: 'administrator/emergency_contact/edit.php' },
'administrator/emergency_contact/index': { title: 'Index', ciViewPath: 'administrator/emergency_contact/index.php' },
'administrator/events/create_event': { title: 'Create Event', ciViewPath: 'administrator/events/create_event.php' },
'administrator/events/edit_event': { title: 'Edit Event', ciViewPath: 'administrator/events/edit_event.php' },
'administrator/events/event_charges': { title: 'Event Charges', ciViewPath: 'administrator/events/event_charges.php' },
'administrator/events/event_list': { title: 'Event List', ciViewPath: 'administrator/events/event_list.php' },
'administrator/exam_drafts': { title: 'Exam Drafts', ciViewPath: 'administrator/exam_drafts.php' },
'administrator/expense_management': { title: 'Expense Management', ciViewPath: 'administrator/expense_management.php' },
'administrator/fee_collection': { title: 'Fee Collection', ciViewPath: 'administrator/fee_collection.php' },
'administrator/fee_payment_records': { title: 'Fee Payment Records', ciViewPath: 'administrator/fee_payment_records.php' },
'administrator/feedback_complaints': { title: 'Feedback Complaints', ciViewPath: 'administrator/feedback_complaints.php' },
'administrator/grades': { title: 'Grades', ciViewPath: 'administrator/grades.php' },
'administrator/grading_management': { title: 'Grading Management', ciViewPath: 'administrator/grading_management.php' },
'administrator/health_records': { title: 'Health Records', ciViewPath: 'administrator/health_records.php' },
'administrator/index': { title: 'Index', ciViewPath: 'administrator/index.php' },
'administrator/ip_bans': { title: 'Ip Bans', ciViewPath: 'administrator/ip_bans.php' },
'administrator/late_slip_logs': { title: 'Late Slip Logs', ciViewPath: 'administrator/late_slip_logs.php' },
'administrator/manage_users': { title: 'Manage Users', ciViewPath: 'administrator/manage_users.php' },
'administrator/notifications_alerts': { title: 'Notifications Alerts', ciViewPath: 'administrator/notifications_alerts.php' },
'administrator/parent': { title: 'Parent', ciViewPath: 'administrator/parent.php' },
'administrator/parent_profile': { title: 'Parent Profile', ciViewPath: 'administrator/parent_profile.php' },
'administrator/paypal_transactions': { title: 'Paypal Transactions', ciViewPath: 'administrator/paypal_transactions.php' },
'administrator/payroll_management': { title: 'Payroll Management', ciViewPath: 'administrator/payroll_management.php' },
'administrator/performance_reviews': { title: 'Performance Reviews', ciViewPath: 'administrator/performance_reviews.php' },
'administrator/print_notification_admins': { title: 'Print Notification Admins', ciViewPath: 'administrator/print_notification_admins.php' },
'administrator/removed_students': { title: 'Removed Students', ciViewPath: 'administrator/removed_students.php' },
'administrator/scholarship_information': { title: 'Scholarship Information', ciViewPath: 'administrator/scholarship_information.php' },
'administrator/search_results': { title: 'Search Results', ciViewPath: 'administrator/search_results.php' },
'administrator/sections_auto_distribute': { title: 'Sections Auto Distribute', ciViewPath: 'administrator/sections_auto_distribute.php' },
'administrator/settings': { title: 'Settings', ciViewPath: 'administrator/settings.php' },
'administrator/student_class_assignment': { title: 'Student Class Assignment', ciViewPath: 'administrator/student_class_assignment.php' },
'administrator/student_profiles': { title: 'Student Profiles', ciViewPath: 'administrator/student_profiles.php' },
'administrator/subject_curriculum': { title: 'Subject Curriculum', ciViewPath: 'administrator/subject_curriculum.php' },
'administrator/teacher_class_assignment': { title: 'Teacher Class Assignment', ciViewPath: 'administrator/teacher_class_assignment.php' },
'administrator/teacher_submissions': { title: 'Teacher Submissions', ciViewPath: 'administrator/teacher_submissions.php' },
'administrator/teachers': { title: 'Teachers', ciViewPath: 'administrator/teachers.php' },
'appointment': { title: 'Appointment', ciViewPath: 'appointment.php' },
'attendance/admins_attendance_form': { title: 'Admins Attendance Form', ciViewPath: 'attendance/admins_attendance_form.php' },
'attendance/attendance_tracking': { title: 'Attendance Tracking', ciViewPath: 'attendance/attendance_tracking.php' },
'attendance/compose_email': { title: 'Compose Email', ciViewPath: 'attendance/compose_email.php' },
'attendance/early_dismissals': { title: 'Early Dismissals', ciViewPath: 'attendance/early_dismissals.php' },
'attendance/early_dismissals_add': { title: 'Early Dismissals Add', ciViewPath: 'attendance/early_dismissals_add.php' },
'attendance/edit_modal': { title: 'Edit Modal', ciViewPath: 'attendance/edit_modal.php' },
'attendance/parent_reports': { title: 'Parent Reports', ciViewPath: 'attendance/parent_reports.php' },
'attendance/teacher_attendance_form': { title: 'Teacher Attendance Form', ciViewPath: 'attendance/teacher_attendance_form.php' },
'attendance/teacher_attendance_month': { title: 'Teacher Attendance Month', ciViewPath: 'attendance/teacher_attendance_month.php' },
'attendance/view': { title: 'View', ciViewPath: 'attendance/view.php' },
'attendance/violations_notified': { title: 'Violations Notified', ciViewPath: 'attendance/violations_notified.php' },
'attendance/violations_pending': { title: 'Violations Pending', ciViewPath: 'attendance/violations_pending.php' },
'attendance_templates/index': { title: 'Index', ciViewPath: 'attendance_templates/index.php' },
'auth/select_role': { title: 'Select Role', ciViewPath: 'auth/select_role.php' },
'calendar': { title: 'Calendar', ciViewPath: 'calendar.php' },
'call_to_action': { title: 'Call To Action', ciViewPath: 'call_to_action.php' },
'class_prep/list': { title: 'List', ciViewPath: 'class_prep/list.php' },
'class_prep/print': { title: 'Print', ciViewPath: 'class_prep/print.php' },
'classes': { title: 'Classes', ciViewPath: 'classes.php' },
'communications/index': { title: 'Index', ciViewPath: 'communications/index.php' },
'configuration/configuration_view': { title: 'Configuration View', ciViewPath: 'configuration/configuration_view.php' },
'contact': { title: 'Contact', ciViewPath: 'contact.php' },
'contact_process': { title: 'Contact Process', ciViewPath: 'contact_process.php' },
'discounts/apply_voucher': { title: 'Apply Voucher', ciViewPath: 'discounts/apply_voucher.php' },
'discounts/create': { title: 'Create', ciViewPath: 'discounts/create.php' },
'discounts/list': { title: 'List', ciViewPath: 'discounts/list.php' },
'emails/_wrap_layout': { title: ' Wrap Layout', ciViewPath: 'emails/_wrap_layout.php' },
'emails/admin_student_registered': { title: 'Admin Student Registered', ciViewPath: 'emails/admin_student_registered.php' },
'emails/below_sixty_performance': { title: 'Below Sixty Performance', ciViewPath: 'emails/below_sixty_performance.php' },
'emails/broadcast_wrapper': { title: 'Broadcast Wrapper', ciViewPath: 'emails/broadcast_wrapper.php' },
'emails/calendar_notification': { title: 'Calendar Notification', ciViewPath: 'emails/calendar_notification.php' },
'emails/custom_html': { title: 'Custom Html', ciViewPath: 'emails/custom_html.php' },
'emails/dismissal': { title: 'Dismissal', ciViewPath: 'emails/dismissal.php' },
'emails/event_broadcast': { title: 'Event Broadcast', ciViewPath: 'emails/event_broadcast.php' },
'emails/extra_charge_notice': { title: 'Extra Charge Notice', ciViewPath: 'emails/extra_charge_notice.php' },
'emails/final_warning': { title: 'Final Warning', ciViewPath: 'emails/final_warning.php' },
'emails/follow_up': { title: 'Follow Up', ciViewPath: 'emails/follow_up.php' },
'emails/parent_attendance_admin': { title: 'Parent Attendance Admin', ciViewPath: 'emails/parent_attendance_admin.php' },
'emails/parent_attendance_parent': { title: 'Parent Attendance Parent', ciViewPath: 'emails/parent_attendance_parent.php' },
'emails/parent_email_extractor': { title: 'Parent Email Extractor', ciViewPath: 'emails/parent_email_extractor.php' },
'emails/payment_receipt': { title: 'Payment Receipt', ciViewPath: 'emails/payment_receipt.php' },
'emails/reset_password': { title: 'Reset Password', ciViewPath: 'emails/reset_password.php' },
'emails/status_admission_review': { title: 'Status Admission Review', ciViewPath: 'emails/status_admission_review.php' },
'emails/status_denied': { title: 'Status Denied', ciViewPath: 'emails/status_denied.php' },
'emails/status_enrolled': { title: 'Status Enrolled', ciViewPath: 'emails/status_enrolled.php' },
'emails/status_not_enrolled': { title: 'Status Not Enrolled', ciViewPath: 'emails/status_not_enrolled.php' },
'emails/status_payment_pending': { title: 'Status Payment Pending', ciViewPath: 'emails/status_payment_pending.php' },
'emails/status_refund_pending': { title: 'Status Refund Pending', ciViewPath: 'emails/status_refund_pending.php' },
'emails/status_waitlist': { title: 'Status Waitlist', ciViewPath: 'emails/status_waitlist.php' },
'emails/status_withdraw_review': { title: 'Status Withdraw Review', ciViewPath: 'emails/status_withdraw_review.php' },
'emails/status_withdrawn': { title: 'Status Withdrawn', ciViewPath: 'emails/status_withdrawn.php' },
'emails/student_removed': { title: 'Student Removed', ciViewPath: 'emails/student_removed.php' },
'emails/support_new_account': { title: 'Support New Account', ciViewPath: 'emails/support_new_account.php' },
'emails/welcome_parent': { title: 'Welcome Parent', ciViewPath: 'emails/welcome_parent.php' },
'emails/welcome_staff': { title: 'Welcome Staff', ciViewPath: 'emails/welcome_staff.php' },
'emails/welcome_user': { title: 'Welcome User', ciViewPath: 'emails/welcome_user.php' },
'emails/whatsapp_group_invitation': { title: 'Whatsapp Group Invitation', ciViewPath: 'emails/whatsapp_group_invitation.php' },
'emails/whatsapp_invite': { title: 'Whatsapp Invite', ciViewPath: 'emails/whatsapp_invite.php' },
'enroll_withdraw/enrollment_withdrawal': { title: 'Enrollment Withdrawal', ciViewPath: 'enroll_withdraw/enrollment_withdrawal.php' },
'enroll_withdraw/new-students': { title: 'New-Students', ciViewPath: 'enroll_withdraw/new-students.php' },
'expenses/create': { title: 'Create', ciViewPath: 'expenses/create.php' },
'expenses/edit': { title: 'Edit', ciViewPath: 'expenses/edit.php' },
'expenses/index': { title: 'Index', ciViewPath: 'expenses/index.php' },
'facility': { title: 'Facility', ciViewPath: 'facility.php' },
'family/card': { title: 'Card', ciViewPath: 'family/card.php' },
'family/compose_email': { title: 'Compose Email', ciViewPath: 'family/compose_email.php' },
'family/index': { title: 'Index', ciViewPath: 'family/index.php' },
'flags/flags_management': { title: 'Flags Management', ciViewPath: 'flags/flags_management.php' },
'flags/incident_analysis': { title: 'Incident Analysis', ciViewPath: 'flags/incident_analysis.php' },
'flags/processed_flags': { title: 'Processed Flags', ciViewPath: 'flags/processed_flags.php' },
'footer': { title: 'Footer', ciViewPath: 'footer.php' },
'grading/below_sixty': { title: 'Below Sixty', ciViewPath: 'grading/below_sixty.php' },
'grading/below_sixty_email_editor': { title: 'Below Sixty Email Editor', ciViewPath: 'grading/below_sixty_email_editor.php' },
'grading/comments': { title: 'Comments', ciViewPath: 'grading/comments.php' },
'grading/final': { title: 'Final', ciViewPath: 'grading/final.php' },
'grading/grading_main': { title: 'Grading Main', ciViewPath: 'grading/grading_main.php' },
'grading/homework': { title: 'Homework', ciViewPath: 'grading/homework.php' },
'grading/homework_tracking': { title: 'Homework Tracking', ciViewPath: 'grading/homework_tracking.php' },
'grading/midterm': { title: 'Midterm', ciViewPath: 'grading/midterm.php' },
'grading/participation': { title: 'Participation', ciViewPath: 'grading/participation.php' },
'grading/placement': { title: 'Placement', ciViewPath: 'grading/placement.php' },
'grading/placement_batch': { title: 'Placement Batch', ciViewPath: 'grading/placement_batch.php' },
'grading/placement_index': { title: 'Placement Index', ciViewPath: 'grading/placement_index.php' },
'grading/project': { title: 'Project', ciViewPath: 'grading/project.php' },
'grading/quiz': { title: 'Quiz', ciViewPath: 'grading/quiz.php' },
'grading/schedule_meeting': { title: 'Schedule Meeting', ciViewPath: 'grading/schedule_meeting.php' },
'grading/test': { title: 'Test', ciViewPath: 'grading/test.php' },
'header': { title: 'Header', ciViewPath: 'header.php' },
'home': { title: 'Home', ciViewPath: 'home.php' },
'index': { title: 'Index', ciViewPath: 'index.php' },
'inventory/adjust_form': { title: 'Adjust Form', ciViewPath: 'inventory/adjust_form.php' },
'inventory/book/form': { title: 'Form', ciViewPath: 'inventory/book/form.php' },
'inventory/book/index': { title: 'Index', ciViewPath: 'inventory/book/index.php' },
'inventory/classroom/audit_form': { title: 'Audit Form', ciViewPath: 'inventory/classroom/audit_form.php' },
'inventory/classroom/form': { title: 'Form', ciViewPath: 'inventory/classroom/form.php' },
'inventory/classroom/index': { title: 'Index', ciViewPath: 'inventory/classroom/index.php' },
'inventory/kitchen/form': { title: 'Form', ciViewPath: 'inventory/kitchen/form.php' },
'inventory/kitchen/index': { title: 'Index', ciViewPath: 'inventory/kitchen/index.php' },
'inventory/movements/edit': { title: 'Edit', ciViewPath: 'inventory/movements/edit.php' },
'inventory/movements/form': { title: 'Form', ciViewPath: 'inventory/movements/form.php' },
'inventory/movements/index': { title: 'Index', ciViewPath: 'inventory/movements/index.php' },
'inventory/office/form': { title: 'Form', ciViewPath: 'inventory/office/form.php' },
'inventory/office/index': { title: 'Index', ciViewPath: 'inventory/office/index.php' },
'inventory/summary': { title: 'Summary', ciViewPath: 'inventory/summary.php' },
'inventory/teacher_distribute': { title: 'Teacher Distribute', ciViewPath: 'inventory/teacher_distribute.php' },
'invoice_payment/invoice_management': { title: 'Invoice Management', ciViewPath: 'invoice_payment/invoice_management.php' },
'invoice_payment/pdf_template': { title: 'Pdf Template', ciViewPath: 'invoice_payment/pdf_template.php' },
'landing_page/admin_dashboard': { title: 'Admin Dashboard', ciViewPath: 'landing_page/admin_dashboard.php' },
'landing_page/guest_dashboard': { title: 'Guest Dashboard', ciViewPath: 'landing_page/guest_dashboard.php' },
'landing_page/parent_dashboard': { title: 'Parent Dashboard', ciViewPath: 'landing_page/parent_dashboard.php' },
'landing_page/student_dashboard': { title: 'Student Dashboard', ciViewPath: 'landing_page/student_dashboard.php' },
'landing_page/teacher_dashboard': { title: 'Teacher Dashboard', ciViewPath: 'landing_page/teacher_dashboard.php' },
'nav_builder/edit': { title: 'Edit', ciViewPath: 'nav_builder/edit.php' },
'nav_builder/index': { title: 'Index', ciViewPath: 'nav_builder/index.php' },
'navbar': { title: 'Navbar', ciViewPath: 'navbar.php' },
'notifications/list_active': { title: 'List Active', ciViewPath: 'notifications/list_active.php' },
'notifications/list_deleted': { title: 'List Deleted', ciViewPath: 'notifications/list_deleted.php' },
'parent/add_second_parent': { title: 'Add Second Parent', ciViewPath: 'parent/add_second_parent.php' },
'parent/assignments': { title: 'Assignments', ciViewPath: 'parent/assignments.php' },
'parent/attendance': { title: 'Attendance', ciViewPath: 'parent/attendance.php' },
'parent/calendar': { title: 'Calendar', ciViewPath: 'parent/calendar.php' },
'parent/class_progress_list': { title: 'Class Progress List', ciViewPath: 'parent/class_progress_list.php' },
'parent/class_progress_view': { title: 'Class Progress View', ciViewPath: 'parent/class_progress_view.php' },
'parent/classes': { title: 'Classes', ciViewPath: 'parent/classes.php' },
'parent/contact': { title: 'Contact', ciViewPath: 'parent/contact.php' },
'parent/edit_emergency_contact': { title: 'Edit Emergency Contact', ciViewPath: 'parent/edit_emergency_contact.php' },
'parent/edit_student_modal': { title: 'Edit Student Modal', ciViewPath: 'parent/edit_student_modal.php' },
'parent/enroll_classes': { title: 'Enroll Classes', ciViewPath: 'parent/enroll_classes.php' },
'parent/enroll_failure': { title: 'Enroll Failure', ciViewPath: 'parent/enroll_failure.php' },
'parent/enroll_success': { title: 'Enroll Success', ciViewPath: 'parent/enroll_success.php' },
'parent/event_participation': { title: 'Event Participation', ciViewPath: 'parent/event_participation.php' },
'parent/invoice_payment': { title: 'Invoice Payment', ciViewPath: 'parent/invoice_payment.php' },
'parent/no_kids_registred': { title: 'No Kids Registred', ciViewPath: 'parent/no_kids_registred.php' },
'parent/parent_message': { title: 'Parent Message', ciViewPath: 'parent/parent_message.php' },
'parent/payment_success': { title: 'Payment Success', ciViewPath: 'parent/payment_success.php' },
'parent/payment_view': { title: 'Payment View', ciViewPath: 'parent/payment_view.php' },
'parent/register_student': { title: 'Register Student', ciViewPath: 'parent/register_student.php' },
'parent/report_attendance': { title: 'Report Attendance', ciViewPath: 'parent/report_attendance.php' },
'parent/report_cards': { title: 'Report Cards', ciViewPath: 'parent/report_cards.php' },
'parent/scores': { title: 'Scores', ciViewPath: 'parent/scores.php' },
'parent/success_message': { title: 'Success Message', ciViewPath: 'parent/success_message.php' },
'parent/withdraw_success': { title: 'Withdraw Success', ciViewPath: 'parent/withdraw_success.php' },
'payment/_list_modal': { title: ' List Modal', ciViewPath: 'payment/_list_modal.php' },
'payment/discount': { title: 'Discount', ciViewPath: 'payment/discount.php' },
'payment/extra_charges': { title: 'Extra Charges', ciViewPath: 'payment/extra_charges.php' },
'payment/financial_report': { title: 'Financial Report', ciViewPath: 'payment/financial_report.php' },
'payment/financial_report_summary': { title: 'Financial Report Summary', ciViewPath: 'payment/financial_report_summary.php' },
'payment/manual_pay': { title: 'Manual Pay', ciViewPath: 'payment/manual_pay.php' },
'payment/manual_payment': { title: 'Manual Payment', ciViewPath: 'payment/manual_payment.php' },
'payment/notification_management': { title: 'Notification Management', ciViewPath: 'payment/notification_management.php' },
'payment/payment_redirect': { title: 'Payment Redirect', ciViewPath: 'payment/payment_redirect.php' },
'payment/unpaid_parents': { title: 'Unpaid Parents', ciViewPath: 'payment/unpaid_parents.php' },
'payment_list': { title: 'Payment List', ciViewPath: 'payment_list.php' },
'policy/picture_policy': { title: 'Picture Policy', ciViewPath: 'policy/picture_policy.php' },
'policy/picture_policy_partial': { title: 'Picture Policy Partial', ciViewPath: 'policy/picture_policy_partial.php' },
'policy/school_policy': { title: 'School Policy', ciViewPath: 'policy/school_policy.php' },
'policy/school_policy_partial': { title: 'School Policy Partial', ciViewPath: 'policy/school_policy_partial.php' },
'preferences': { title: 'Preferences', ciViewPath: 'preferences.php' },
'print_requests/admin_index': { title: 'Admin Index', ciViewPath: 'print_requests/admin_index.php' },
'print_requests/teacher_index': { title: 'Teacher Index', ciViewPath: 'print_requests/teacher_index.php' },
'printables_reports/badge_form': { title: 'Badge Form', ciViewPath: 'printables_reports/badge_form.php' },
'printables_reports/report_card': { title: 'Report Card', ciViewPath: 'printables_reports/report_card.php' },
'printables_reports/sticker_form': { title: 'Sticker Form', ciViewPath: 'printables_reports/sticker_form.php' },
'profile': { title: 'Profile', ciViewPath: 'profile.php' },
'refunds/list': { title: 'List', ciViewPath: 'refunds/list.php' },
'reimbursements/create': { title: 'Create', ciViewPath: 'reimbursements/create.php' },
'reimbursements/edit': { title: 'Edit', ciViewPath: 'reimbursements/edit.php' },
'reimbursements/index': { title: 'Index', ciViewPath: 'reimbursements/index.php' },
'reimbursements/under_processing': { title: 'Under Processing', ciViewPath: 'reimbursements/under_processing.php' },
'rfid/rfid_coming_soon': { title: 'Rfid Coming Soon', ciViewPath: 'rfid/rfid_coming_soon.php' },
'rfid/rfid_log_view': { title: 'Rfid Log View', ciViewPath: 'rfid/rfid_log_view.php' },
'rolepermission/add_permission': { title: 'Add Permission', ciViewPath: 'rolepermission/add_permission.php' },
'rolepermission/add_role': { title: 'Add Role', ciViewPath: 'rolepermission/add_role.php' },
'rolepermission/assign_role': { title: 'Assign Role', ciViewPath: 'rolepermission/assign_role.php' },
'rolepermission/edit_permission': { title: 'Edit Permission', ciViewPath: 'rolepermission/edit_permission.php' },
'rolepermission/edit_role': { title: 'Edit Role', ciViewPath: 'rolepermission/edit_role.php' },
'rolepermission/edit_role_permissions': { title: 'Edit Role Permissions', ciViewPath: 'rolepermission/edit_role_permissions.php' },
'rolepermission/list_roles': { title: 'List Roles', ciViewPath: 'rolepermission/list_roles.php' },
'rolepermission/permissionList': { title: 'PermissionList', ciViewPath: 'rolepermission/permissionList.php' },
'score_analysis/score_prediction': { title: 'Score Prediction', ciViewPath: 'score_analysis/score_prediction.php' },
'slips/preview_list': { title: 'Preview List', ciViewPath: 'slips/preview_list.php' },
'slips/slip_pdf': { title: 'Slip Pdf', ciViewPath: 'slips/slip_pdf.php' },
'spinner': { title: 'Spinner', ciViewPath: 'spinner.php' },
'staff/create': { title: 'Create', ciViewPath: 'staff/create.php' },
'staff/edit': { title: 'Edit', ciViewPath: 'staff/edit.php' },
'staff/index': { title: 'Index', ciViewPath: 'staff/index.php' },
'student/score_card': { title: 'Score Card', ciViewPath: 'student/score_card.php' },
'student/score_card_list': { title: 'Score Card List', ciViewPath: 'student/score_card_list.php' },
'success': { title: 'Success', ciViewPath: 'success.php' },
'support': { title: 'Support', ciViewPath: 'support.php' },
'support_requests': { title: 'Support Requests', ciViewPath: 'support_requests.php' },
'swagger_ui': { title: 'Swagger Ui', ciViewPath: 'swagger_ui.php' },
'teacher/absence_vacation': { title: 'Absence Vacation', ciViewPath: 'teacher/absence_vacation.php' },
'teacher/add_final_exam': { title: 'Add Final Exam', ciViewPath: 'teacher/add_final_exam.php' },
'teacher/add_homework': { title: 'Add Homework', ciViewPath: 'teacher/add_homework.php' },
'teacher/add_midterm_exam': { title: 'Add Midterm Exam', ciViewPath: 'teacher/add_midterm_exam.php' },
'teacher/add_participation': { title: 'Add Participation', ciViewPath: 'teacher/add_participation.php' },
'teacher/add_project': { title: 'Add Project', ciViewPath: 'teacher/add_project.php' },
'teacher/add_quiz': { title: 'Add Quiz', ciViewPath: 'teacher/add_quiz.php' },
'teacher/add_quiz_column_form': { title: 'Add Quiz Column Form', ciViewPath: 'teacher/add_quiz_column_form.php' },
'teacher/calendar': { title: 'Calendar', ciViewPath: 'teacher/calendar.php' },
'teacher/class_progress_history': { title: 'Class Progress History', ciViewPath: 'teacher/class_progress_history.php' },
'teacher/class_progress_submit': { title: 'Class Progress Submit', ciViewPath: 'teacher/class_progress_submit.php' },
'teacher/class_progress_view': { title: 'Class Progress View', ciViewPath: 'teacher/class_progress_view.php' },
'teacher/class_view': { title: 'Class View', ciViewPath: 'teacher/class_view.php' },
'teacher/competition_scores/index': { title: 'Index', ciViewPath: 'teacher/competition_scores/index.php' },
'teacher/competition_scores/scores': { title: 'Scores', ciViewPath: 'teacher/competition_scores/scores.php' },
'teacher/drafts': { title: 'Drafts', ciViewPath: 'teacher/drafts.php' },
'teacher/exam_drafts': { title: 'Exam Drafts', ciViewPath: 'teacher/exam_drafts.php' },
'teacher/homework_list': { title: 'Homework List', ciViewPath: 'teacher/homework_list.php' },
'teacher/inbox': { title: 'Inbox', ciViewPath: 'teacher/inbox.php' },
'teacher/no_classes': { title: 'No Classes', ciViewPath: 'teacher/no_classes.php' },
'teacher/scores': { title: 'Scores', ciViewPath: 'teacher/scores.php' },
'teacher/select_semester': { title: 'Select Semester', ciViewPath: 'teacher/select_semester.php' },
'teacher/sent': { title: 'Sent', ciViewPath: 'teacher/sent.php' },
'teacher/showupdate_attendance': { title: 'Showupdate Attendance', ciViewPath: 'teacher/showupdate_attendance.php' },
'teacher/teacher_assignment': { title: 'Teacher Assignment', ciViewPath: 'teacher/teacher_assignment.php' },
'teacher/teacher_contactus': { title: 'Teacher Contactus', ciViewPath: 'teacher/teacher_contactus.php' },
'teacher/teacher_message': { title: 'Teacher Message', ciViewPath: 'teacher/teacher_message.php' },
'teacher/teacher_navbar': { title: 'Teacher Navbar', ciViewPath: 'teacher/teacher_navbar.php' },
'teacher/teacher_support': { title: 'Teacher Support', ciViewPath: 'teacher/teacher_support.php' },
'teacher/trash': { title: 'Trash', ciViewPath: 'teacher/trash.php' },
'team': { title: 'Team', ciViewPath: 'team.php' },
'testimonial': { title: 'Testimonial', ciViewPath: 'testimonial.php' },
'user/create': { title: 'Create', ciViewPath: 'user/create.php' },
'user/edit': { title: 'Edit', ciViewPath: 'user/edit.php' },
'user/forgot_password': { title: 'Forgot Password', ciViewPath: 'user/forgot_password.php' },
'user/login': { title: 'Login', ciViewPath: 'user/login.php' },
'user/login_activity': { title: 'Login Activity', ciViewPath: 'user/login_activity.php' },
'user/password_reset_confirmation': { title: 'Password Reset Confirmation', ciViewPath: 'user/password_reset_confirmation.php' },
'user/password_set_success': { title: 'Password Set Success', ciViewPath: 'user/password_set_success.php' },
'user/register': { title: 'Register', ciViewPath: 'user/register.php' },
'user/reset_password': { title: 'Reset Password', ciViewPath: 'user/reset_password.php' },
'user/set_authorized_user_password': { title: 'Set Authorized User Password', ciViewPath: 'user/set_authorized_user_password.php' },
'user/set_password': { title: 'Set Password', ciViewPath: 'user/set_password.php' },
'user/user_list': { title: 'User List', ciViewPath: 'user/user_list.php' },
'user/welcome_back': { title: 'Welcome Back', ciViewPath: 'user/welcome_back.php' },
'welcome_message': { title: 'Welcome Message', ciViewPath: 'welcome_message.php' },
'whatsapp/manage_links': { title: 'Manage Links', ciViewPath: 'whatsapp/manage_links.php' },
'whatsapp/parent_contacts': { title: 'Parent Contacts', ciViewPath: 'whatsapp/parent_contacts.php' },
'whatsapp/parent_contacts_by_class': { title: 'Parent Contacts By Class', ciViewPath: 'whatsapp/parent_contacts_by_class.php' },
'winners/competitions/index': { title: 'Index', ciViewPath: 'winners/competitions/index.php' },
'winners/competitions/show': { title: 'Show', ciViewPath: 'winners/competitions/show.php' },
}
-1
View File
@@ -1,4 +1,3 @@
/** Map legacy CodeIgniter-style paths (as stored on roles / nav items) to this SPA. */
export function spaPathFromCiUrl(url: string | null | undefined): string | null {
if (url == null) return null
@@ -1,13 +1,13 @@
import { type CiRouteMetaEntry, ciRouteMeta } from './ciRouteMeta.generated'
import { ciRouteManual } from './ciRouteManual'
import { type ViewRouteMetaEntry, viewRouteMeta } from './viewRouteMeta.generated'
import { viewRouteManual } from './viewRouteManual'
/** CI registry keys whose folder layout does not match the SPA route (see `App.tsx`). */
const CI_REGISTRY_APP_PATH_OVERRIDES: Record<string, string> = {
/** view registry keys whose folder layout does not match the SPA route (see `App.tsx`). */
const VIEW_REGISTRY_APP_PATH_OVERRIDES: Record<string, string> = {
// Nested views map to flat `/app/teacher/competition-scores` (+ dynamic detail route).
'teacher/competition_scores/index': '/app/teacher/competition-scores',
'teacher/competition_scores/scores': '/app/teacher/competition-scores',
'landing_page/admin_dashboard': '/app/landing-page/admin-dashboard',
/** CI `landing_page/teacher_dashboard.php` → SPA (underscore segment per legacy URL). */
/** view `landing_page/teacher_dashboard.php` → SPA (underscore segment per legacy URL). */
'landing_page/teacher_dashboard': '/app/teacher_dashboard',
'flags/flags_management': '/app/administrator/flags/management',
'flags/processed_flags': '/app/administrator/flags/processed',
@@ -22,7 +22,7 @@ const CI_REGISTRY_APP_PATH_OVERRIDES: Record<string, string> = {
'grading/midterm': '/app/grading/scores/midterm',
'grading/participation': '/app/grading/participation',
'grading/placement': '/app/grading/placement',
/** Batch id is in the URL segment in CI; dynamic route uses `spaPathFromCiUrl` / placement-index when no id. */
/** Batch id is in the URL segment in view; dynamic route uses `spaPathFromCiUrl` / placement-index when no id. */
'grading/placement_batch': '/app/grading/placement-index',
'grading/placement_index': '/app/grading/placement-index',
'grading/project': '/app/grading/scores/project',
@@ -49,12 +49,12 @@ const CI_REGISTRY_APP_PATH_OVERRIDES: Record<string, string> = {
'attendance/violations_notified': '/app/attendance/violations/notified',
'attendance/early_dismissals': '/app/attendance/early-dismissals',
'attendance/early_dismissals_add': '/app/attendance/early-dismissals/new',
/** CI `enroll_withdraw/new-students.php` — registered students list (JWT `registered-new-students`). */
/** view `enroll_withdraw/new-students.php` — registered students list (JWT `registered-new-students`). */
'enroll_withdraw/new-students': '/app/admin/enrollment/new-students',
'enroll_withdraw/new_students': '/app/admin/enrollment/new-students',
'administrator/sections_auto_distribute': '/app/administrator/sections/auto-distribute',
'administrator/sections_promotion_totals': '/app/administrator/sections/promotion-totals',
/** CI `administrator/events/event_list.php` — school calendar list (`GET .../school-calendar/events`). */
/** view `administrator/events/event_list.php` — school calendar list (`GET .../school-calendar/events`). */
'administrator/events/event_list': '/app/administrator/events',
'administrator/events': '/app/administrator/events',
'invoice_payment/invoice_management': '/app/administrator/invoice-payment',
@@ -108,8 +108,8 @@ const CI_REGISTRY_APP_PATH_OVERRIDES: Record<string, string> = {
'winners/competitions/index': '/app/winners/competitions',
}
/** Match CI `app/Views/...` keys: lowercase, hyphens in URL map to underscores. */
export function getCiMeta(splat: string): CiRouteMetaEntry | null {
/** Match view `app/Views/...` keys: lowercase, hyphens in URL map to underscores. */
export function getViewRouteMeta(splat: string): ViewRouteMetaEntry | null {
const raw = splat
.trim()
.replace(/^\/+|\/+$/g, '')
@@ -117,14 +117,14 @@ export function getCiMeta(splat: string): CiRouteMetaEntry | null {
if (!raw) return null
const withUnderscores = raw.replace(/-/g, '_')
return (
ciRouteManual[withUnderscores] ?? ciRouteMeta[withUnderscores] ?? null
viewRouteManual[withUnderscores] ?? viewRouteMeta[withUnderscores] ?? null
)
}
/** Build canonical SPA path from a registry key (snake segments) using kebab-case segments. */
export function ciRegistryKeyToAppPath(routeKey: string): string {
export function registryKeyToAppPath(routeKey: string): string {
const normalized = routeKey.trim().toLowerCase()
const override = CI_REGISTRY_APP_PATH_OVERRIDES[normalized]
const override = VIEW_REGISTRY_APP_PATH_OVERRIDES[normalized]
if (override) return override
const parts = routeKey.split('/').map((seg) => seg.replace(/_/g, '-'))
+24
View File
@@ -0,0 +1,24 @@
import type { ViewRouteMetaEntry } from './viewRouteMeta.generated'
/**
* Routes that do not map 1:1 to a single source view file (composed dashboards, aliases).
* Keys use snake_case segments like the generated registry.
*/
export const viewRouteManual: Record<string, ViewRouteMetaEntry> = {
'teacher/dashboard': {
title: 'Teacher dashboard',
sourceViewPath: '(TeacherController::dashboard — see Views/teacher/*.php)',
},
'administrator/dashboard': {
title: 'Administrator dashboard',
sourceViewPath: '(Support/administrator dashboards — see Views/administrator/*.php)',
},
'administrator/administratordashboard': {
title: 'Administrator dashboard',
sourceViewPath: 'administrator/administratordashboard.php',
},
'landing_page/guest_dashboard': {
title: 'Guest dashboard',
sourceViewPath: 'landing_page/guest_dashboard.php',
},
}
+338
View File
@@ -0,0 +1,338 @@
/** Auto-generated by scripts/gen-view-route-meta.mjs — do not edit by hand. */
export type ViewRouteMetaEntry = {
title: string
sourceViewPath: string
}
export const viewRouteMeta: Record<string, ViewRouteMetaEntry> = {
'about': { title: 'About', sourceViewPath: 'about.php' },
'account/choose_account': { title: 'Choose Account', sourceViewPath: 'account/choose_account.php' },
'activate_account': { title: 'Activate Account', sourceViewPath: 'activate_account.php' },
'admin/certificates/audit_log': { title: 'Audit Log', sourceViewPath: 'admin/certificates/audit_log.php' },
'admin/certificates/index': { title: 'Index', sourceViewPath: 'admin/certificates/index.php' },
'admin/class_progress_list': { title: 'Class Progress List', sourceViewPath: 'admin/class_progress_list.php' },
'admin/class_progress_view': { title: 'Class Progress View', sourceViewPath: 'admin/class_progress_view.php' },
'admin/competition_winners/form': { title: 'Form', sourceViewPath: 'admin/competition_winners/form.php' },
'admin/competition_winners/index': { title: 'Index', sourceViewPath: 'admin/competition_winners/index.php' },
'admin/competition_winners/preview': { title: 'Preview', sourceViewPath: 'admin/competition_winners/preview.php' },
'admin/competition_winners/scores': { title: 'Scores', sourceViewPath: 'admin/competition_winners/scores.php' },
'admin/competition_winners/winners': { title: 'Winners', sourceViewPath: 'admin/competition_winners/winners.php' },
'admin/student_score_card': { title: 'Student Score Card', sourceViewPath: 'admin/student_score_card.php' },
'administrator/absence_vacation': { title: 'Absence Vacation', sourceViewPath: 'administrator/absence_vacation.php' },
'administrator/academic_performance': { title: 'Academic Performance', sourceViewPath: 'administrator/academic_performance.php' },
'administrator/admin_attendance_records': { title: 'Admin Attendance Records', sourceViewPath: 'administrator/admin_attendance_records.php' },
'administrator/admin_profiles': { title: 'Admin Profiles', sourceViewPath: 'administrator/admin_profiles.php' },
'administrator/administratordashboard': { title: 'Administratordashboard', sourceViewPath: 'administrator/administratordashboard.php' },
'administrator/attendance': { title: 'Attendance', sourceViewPath: 'administrator/attendance.php' },
'administrator/attendance_records': { title: 'Attendance Records', sourceViewPath: 'administrator/attendance_records.php' },
'administrator/behavior_reports': { title: 'Behavior Reports', sourceViewPath: 'administrator/behavior_reports.php' },
'administrator/broadcast_email': { title: 'Broadcast Email', sourceViewPath: 'administrator/broadcast_email.php' },
'administrator/budget_reports': { title: 'Budget Reports', sourceViewPath: 'administrator/budget_reports.php' },
'administrator/calendar': { title: 'Calendar', sourceViewPath: 'administrator/calendar.php' },
'administrator/calendar_add_event': { title: 'Calendar Add Event', sourceViewPath: 'administrator/calendar_add_event.php' },
'administrator/calendar_edit': { title: 'Calendar Edit', sourceViewPath: 'administrator/calendar_edit.php' },
'administrator/calendar_view': { title: 'Calendar View', sourceViewPath: 'administrator/calendar_view.php' },
'administrator/class_assignment': { title: 'Class Assignment', sourceViewPath: 'administrator/class_assignment.php' },
'administrator/class_section': { title: 'Class Section', sourceViewPath: 'administrator/class_section.php' },
'administrator/class_warning_modal': { title: 'Class Warning Modal', sourceViewPath: 'administrator/class_warning_modal.php' },
'administrator/communication_logs': { title: 'Communication Logs', sourceViewPath: 'administrator/communication_logs.php' },
'administrator/course_materials': { title: 'Course Materials', sourceViewPath: 'administrator/course_materials.php' },
'administrator/create_parent': { title: 'Create Parent', sourceViewPath: 'administrator/create_parent.php' },
'administrator/daily_attendance': { title: 'Daily Attendance', sourceViewPath: 'administrator/daily_attendance.php' },
'administrator/daily_attendance_analysis': { title: 'Daily Attendance Analysis', sourceViewPath: 'administrator/daily_attendance_analysis.php' },
'administrator/edit_parent': { title: 'Edit Parent', sourceViewPath: 'administrator/edit_parent.php' },
'administrator/edit_teacher': { title: 'Edit Teacher', sourceViewPath: 'administrator/edit_teacher.php' },
'administrator/emergency_contact/edit': { title: 'Edit', sourceViewPath: 'administrator/emergency_contact/edit.php' },
'administrator/emergency_contact/index': { title: 'Index', sourceViewPath: 'administrator/emergency_contact/index.php' },
'administrator/events/create_event': { title: 'Create Event', sourceViewPath: 'administrator/events/create_event.php' },
'administrator/events/edit_event': { title: 'Edit Event', sourceViewPath: 'administrator/events/edit_event.php' },
'administrator/events/event_charges': { title: 'Event Charges', sourceViewPath: 'administrator/events/event_charges.php' },
'administrator/events/event_charges_pdf': { title: 'Event Charges Pdf', sourceViewPath: 'administrator/events/event_charges_pdf.php' },
'administrator/events/event_list': { title: 'Event List', sourceViewPath: 'administrator/events/event_list.php' },
'administrator/exam_drafts': { title: 'Exam Drafts', sourceViewPath: 'administrator/exam_drafts.php' },
'administrator/exam_management': { title: 'Exam Management', sourceViewPath: 'administrator/exam_management.php' },
'administrator/expense_management': { title: 'Expense Management', sourceViewPath: 'administrator/expense_management.php' },
'administrator/fee_collection': { title: 'Fee Collection', sourceViewPath: 'administrator/fee_collection.php' },
'administrator/fee_payment_records': { title: 'Fee Payment Records', sourceViewPath: 'administrator/fee_payment_records.php' },
'administrator/feedback_complaints': { title: 'Feedback Complaints', sourceViewPath: 'administrator/feedback_complaints.php' },
'administrator/grades': { title: 'Grades', sourceViewPath: 'administrator/grades.php' },
'administrator/grading_management': { title: 'Grading Management', sourceViewPath: 'administrator/grading_management.php' },
'administrator/health_records': { title: 'Health Records', sourceViewPath: 'administrator/health_records.php' },
'administrator/index': { title: 'Index', sourceViewPath: 'administrator/index.php' },
'administrator/ip_bans': { title: 'Ip Bans', sourceViewPath: 'administrator/ip_bans.php' },
'administrator/late_slip_logs': { title: 'Late Slip Logs', sourceViewPath: 'administrator/late_slip_logs.php' },
'administrator/manage_users': { title: 'Manage Users', sourceViewPath: 'administrator/manage_users.php' },
'administrator/notifications_alerts': { title: 'Notifications Alerts', sourceViewPath: 'administrator/notifications_alerts.php' },
'administrator/parent': { title: 'Parent', sourceViewPath: 'administrator/parent.php' },
'administrator/parent_profile': { title: 'Parent Profile', sourceViewPath: 'administrator/parent_profile.php' },
'administrator/payroll_management': { title: 'Payroll Management', sourceViewPath: 'administrator/payroll_management.php' },
'administrator/performance_reviews': { title: 'Performance Reviews', sourceViewPath: 'administrator/performance_reviews.php' },
'administrator/print_notification_admins': { title: 'Print Notification Admins', sourceViewPath: 'administrator/print_notification_admins.php' },
'administrator/removed_students': { title: 'Removed Students', sourceViewPath: 'administrator/removed_students.php' },
'administrator/scholarship_information': { title: 'Scholarship Information', sourceViewPath: 'administrator/scholarship_information.php' },
'administrator/search_results': { title: 'Search Results', sourceViewPath: 'administrator/search_results.php' },
'administrator/sections_auto_distribute': { title: 'Sections Auto Distribute', sourceViewPath: 'administrator/sections_auto_distribute.php' },
'administrator/settings': { title: 'Settings', sourceViewPath: 'administrator/settings.php' },
'administrator/student_class_assignment': { title: 'Student Class Assignment', sourceViewPath: 'administrator/student_class_assignment.php' },
'administrator/student_profiles': { title: 'Student Profiles', sourceViewPath: 'administrator/student_profiles.php' },
'administrator/subject_curriculum': { title: 'Subject Curriculum', sourceViewPath: 'administrator/subject_curriculum.php' },
'administrator/teacher_class_assignment': { title: 'Teacher Class Assignment', sourceViewPath: 'administrator/teacher_class_assignment.php' },
'administrator/teacher_profiles': { title: 'Teacher Profiles', sourceViewPath: 'administrator/teacher_profiles.php' },
'administrator/teacher_submissions': { title: 'Teacher Submissions', sourceViewPath: 'administrator/teacher_submissions.php' },
'administrator/teachers': { title: 'Teachers', sourceViewPath: 'administrator/teachers.php' },
'administrator/trophy': { title: 'Trophy', sourceViewPath: 'administrator/trophy.php' },
'administrator/trophy_final': { title: 'Trophy Final', sourceViewPath: 'administrator/trophy_final.php' },
'administrator/trophy_winners': { title: 'Trophy Winners', sourceViewPath: 'administrator/trophy_winners.php' },
'administrator/tuition_forecast': { title: 'Tuition Forecast', sourceViewPath: 'administrator/tuition_forecast.php' },
'appointment': { title: 'Appointment', sourceViewPath: 'appointment.php' },
'attendance/admins_attendance_form': { title: 'Admins Attendance Form', sourceViewPath: 'attendance/admins_attendance_form.php' },
'attendance/attendance_tracking': { title: 'Attendance Tracking', sourceViewPath: 'attendance/attendance_tracking.php' },
'attendance/compose_email': { title: 'Compose Email', sourceViewPath: 'attendance/compose_email.php' },
'attendance/early_dismissals': { title: 'Early Dismissals', sourceViewPath: 'attendance/early_dismissals.php' },
'attendance/early_dismissals_add': { title: 'Early Dismissals Add', sourceViewPath: 'attendance/early_dismissals_add.php' },
'attendance/edit_modal': { title: 'Edit Modal', sourceViewPath: 'attendance/edit_modal.php' },
'attendance/parent_reports': { title: 'Parent Reports', sourceViewPath: 'attendance/parent_reports.php' },
'attendance/teacher_attendance_form': { title: 'Teacher Attendance Form', sourceViewPath: 'attendance/teacher_attendance_form.php' },
'attendance/teacher_attendance_month': { title: 'Teacher Attendance Month', sourceViewPath: 'attendance/teacher_attendance_month.php' },
'attendance/view': { title: 'View', sourceViewPath: 'attendance/view.php' },
'attendance/violations_notified': { title: 'Violations Notified', sourceViewPath: 'attendance/violations_notified.php' },
'attendance/violations_pending': { title: 'Violations Pending', sourceViewPath: 'attendance/violations_pending.php' },
'attendance_templates/index': { title: 'Index', sourceViewPath: 'attendance_templates/index.php' },
'auth/select_role': { title: 'Select Role', sourceViewPath: 'auth/select_role.php' },
'calendar': { title: 'Calendar', sourceViewPath: 'calendar.php' },
'call_to_action': { title: 'Call To Action', sourceViewPath: 'call_to_action.php' },
'certificates/verify': { title: 'Verify', sourceViewPath: 'certificates/verify.php' },
'class_prep/list': { title: 'List', sourceViewPath: 'class_prep/list.php' },
'class_prep/print': { title: 'Print', sourceViewPath: 'class_prep/print.php' },
'classes': { title: 'Classes', sourceViewPath: 'classes.php' },
'communications/index': { title: 'Index', sourceViewPath: 'communications/index.php' },
'configuration/configuration_view': { title: 'Configuration View', sourceViewPath: 'configuration/configuration_view.php' },
'contact': { title: 'Contact', sourceViewPath: 'contact.php' },
'contact_process': { title: 'Contact Process', sourceViewPath: 'contact_process.php' },
'discounts/apply_voucher': { title: 'Apply Voucher', sourceViewPath: 'discounts/apply_voucher.php' },
'discounts/create': { title: 'Create', sourceViewPath: 'discounts/create.php' },
'discounts/list': { title: 'List', sourceViewPath: 'discounts/list.php' },
'discounts/reverse_discount': { title: 'Reverse Discount', sourceViewPath: 'discounts/reverse_discount.php' },
'emails/_wrap_layout': { title: ' Wrap Layout', sourceViewPath: 'emails/_wrap_layout.php' },
'emails/admin_student_registered': { title: 'Admin Student Registered', sourceViewPath: 'emails/admin_student_registered.php' },
'emails/below_sixty_decision': { title: 'Below Sixty Decision', sourceViewPath: 'emails/below_sixty_decision.php' },
'emails/below_sixty_performance': { title: 'Below Sixty Performance', sourceViewPath: 'emails/below_sixty_performance.php' },
'emails/broadcast_wrapper': { title: 'Broadcast Wrapper', sourceViewPath: 'emails/broadcast_wrapper.php' },
'emails/calendar_notification': { title: 'Calendar Notification', sourceViewPath: 'emails/calendar_notification.php' },
'emails/custom_html': { title: 'Custom Html', sourceViewPath: 'emails/custom_html.php' },
'emails/dismissal': { title: 'Dismissal', sourceViewPath: 'emails/dismissal.php' },
'emails/event_broadcast': { title: 'Event Broadcast', sourceViewPath: 'emails/event_broadcast.php' },
'emails/extra_charge_notice': { title: 'Extra Charge Notice', sourceViewPath: 'emails/extra_charge_notice.php' },
'emails/final_warning': { title: 'Final Warning', sourceViewPath: 'emails/final_warning.php' },
'emails/follow_up': { title: 'Follow Up', sourceViewPath: 'emails/follow_up.php' },
'emails/parent_attendance_admin': { title: 'Parent Attendance Admin', sourceViewPath: 'emails/parent_attendance_admin.php' },
'emails/parent_attendance_parent': { title: 'Parent Attendance Parent', sourceViewPath: 'emails/parent_attendance_parent.php' },
'emails/parent_email_extractor': { title: 'Parent Email Extractor', sourceViewPath: 'emails/parent_email_extractor.php' },
'emails/payment_receipt': { title: 'Payment Receipt', sourceViewPath: 'emails/payment_receipt.php' },
'emails/reset_password': { title: 'Reset Password', sourceViewPath: 'emails/reset_password.php' },
'emails/status_admission_review': { title: 'Status Admission Review', sourceViewPath: 'emails/status_admission_review.php' },
'emails/status_denied': { title: 'Status Denied', sourceViewPath: 'emails/status_denied.php' },
'emails/status_enrolled': { title: 'Status Enrolled', sourceViewPath: 'emails/status_enrolled.php' },
'emails/status_not_enrolled': { title: 'Status Not Enrolled', sourceViewPath: 'emails/status_not_enrolled.php' },
'emails/status_payment_pending': { title: 'Status Payment Pending', sourceViewPath: 'emails/status_payment_pending.php' },
'emails/status_refund_pending': { title: 'Status Refund Pending', sourceViewPath: 'emails/status_refund_pending.php' },
'emails/status_waitlist': { title: 'Status Waitlist', sourceViewPath: 'emails/status_waitlist.php' },
'emails/status_withdraw_review': { title: 'Status Withdraw Review', sourceViewPath: 'emails/status_withdraw_review.php' },
'emails/status_withdrawn': { title: 'Status Withdrawn', sourceViewPath: 'emails/status_withdrawn.php' },
'emails/student_removed': { title: 'Student Removed', sourceViewPath: 'emails/student_removed.php' },
'emails/support_new_account': { title: 'Support New Account', sourceViewPath: 'emails/support_new_account.php' },
'emails/welcome_parent': { title: 'Welcome Parent', sourceViewPath: 'emails/welcome_parent.php' },
'emails/welcome_staff': { title: 'Welcome Staff', sourceViewPath: 'emails/welcome_staff.php' },
'emails/welcome_user': { title: 'Welcome User', sourceViewPath: 'emails/welcome_user.php' },
'emails/whatsapp_group_invitation': { title: 'Whatsapp Group Invitation', sourceViewPath: 'emails/whatsapp_group_invitation.php' },
'emails/whatsapp_invite': { title: 'Whatsapp Invite', sourceViewPath: 'emails/whatsapp_invite.php' },
'enroll_withdraw/enrollment_withdrawal': { title: 'Enrollment Withdrawal', sourceViewPath: 'enroll_withdraw/enrollment_withdrawal.php' },
'enroll_withdraw/new-students': { title: 'New-Students', sourceViewPath: 'enroll_withdraw/new-students.php' },
'expenses/create': { title: 'Create', sourceViewPath: 'expenses/create.php' },
'expenses/edit': { title: 'Edit', sourceViewPath: 'expenses/edit.php' },
'expenses/index': { title: 'Index', sourceViewPath: 'expenses/index.php' },
'facility': { title: 'Facility', sourceViewPath: 'facility.php' },
'family/card': { title: 'Card', sourceViewPath: 'family/card.php' },
'family/compose_email': { title: 'Compose Email', sourceViewPath: 'family/compose_email.php' },
'family/index': { title: 'Index', sourceViewPath: 'family/index.php' },
'flags/flags_management': { title: 'Flags Management', sourceViewPath: 'flags/flags_management.php' },
'flags/incident_analysis': { title: 'Incident Analysis', sourceViewPath: 'flags/incident_analysis.php' },
'flags/processed_flags': { title: 'Processed Flags', sourceViewPath: 'flags/processed_flags.php' },
'footer': { title: 'Footer', sourceViewPath: 'footer.php' },
'grading/all_decisions': { title: 'All Decisions', sourceViewPath: 'grading/all_decisions.php' },
'grading/below_sixty': { title: 'Below Sixty', sourceViewPath: 'grading/below_sixty.php' },
'grading/below_sixty_decision_email_editor': { title: 'Below Sixty Decision Email Editor', sourceViewPath: 'grading/below_sixty_decision_email_editor.php' },
'grading/below_sixty_decisions': { title: 'Below Sixty Decisions', sourceViewPath: 'grading/below_sixty_decisions.php' },
'grading/below_sixty_email_editor': { title: 'Below Sixty Email Editor', sourceViewPath: 'grading/below_sixty_email_editor.php' },
'grading/comments': { title: 'Comments', sourceViewPath: 'grading/comments.php' },
'grading/final': { title: 'Final', sourceViewPath: 'grading/final.php' },
'grading/grading_main': { title: 'Grading Main', sourceViewPath: 'grading/grading_main.php' },
'grading/homework': { title: 'Homework', sourceViewPath: 'grading/homework.php' },
'grading/homework_tracking': { title: 'Homework Tracking', sourceViewPath: 'grading/homework_tracking.php' },
'grading/midterm': { title: 'Midterm', sourceViewPath: 'grading/midterm.php' },
'grading/participation': { title: 'Participation', sourceViewPath: 'grading/participation.php' },
'grading/placement': { title: 'Placement', sourceViewPath: 'grading/placement.php' },
'grading/placement_batch': { title: 'Placement Batch', sourceViewPath: 'grading/placement_batch.php' },
'grading/placement_index': { title: 'Placement Index', sourceViewPath: 'grading/placement_index.php' },
'grading/project': { title: 'Project', sourceViewPath: 'grading/project.php' },
'grading/quiz': { title: 'Quiz', sourceViewPath: 'grading/quiz.php' },
'grading/schedule_meeting': { title: 'Schedule Meeting', sourceViewPath: 'grading/schedule_meeting.php' },
'grading/test': { title: 'Test', sourceViewPath: 'grading/test.php' },
'header': { title: 'Header', sourceViewPath: 'header.php' },
'home': { title: 'Home', sourceViewPath: 'home.php' },
'index': { title: 'Index', sourceViewPath: 'index.php' },
'inventory/adjust_form': { title: 'Adjust Form', sourceViewPath: 'inventory/adjust_form.php' },
'inventory/book/form': { title: 'Form', sourceViewPath: 'inventory/book/form.php' },
'inventory/book/index': { title: 'Index', sourceViewPath: 'inventory/book/index.php' },
'inventory/classroom/audit_form': { title: 'Audit Form', sourceViewPath: 'inventory/classroom/audit_form.php' },
'inventory/classroom/form': { title: 'Form', sourceViewPath: 'inventory/classroom/form.php' },
'inventory/classroom/index': { title: 'Index', sourceViewPath: 'inventory/classroom/index.php' },
'inventory/kitchen/form': { title: 'Form', sourceViewPath: 'inventory/kitchen/form.php' },
'inventory/kitchen/index': { title: 'Index', sourceViewPath: 'inventory/kitchen/index.php' },
'inventory/movements/edit': { title: 'Edit', sourceViewPath: 'inventory/movements/edit.php' },
'inventory/movements/form': { title: 'Form', sourceViewPath: 'inventory/movements/form.php' },
'inventory/movements/index': { title: 'Index', sourceViewPath: 'inventory/movements/index.php' },
'inventory/office/form': { title: 'Form', sourceViewPath: 'inventory/office/form.php' },
'inventory/office/index': { title: 'Index', sourceViewPath: 'inventory/office/index.php' },
'inventory/summary': { title: 'Summary', sourceViewPath: 'inventory/summary.php' },
'inventory/teacher_distribute': { title: 'Teacher Distribute', sourceViewPath: 'inventory/teacher_distribute.php' },
'invoice_payment/invoice_management': { title: 'Invoice Management', sourceViewPath: 'invoice_payment/invoice_management.php' },
'invoice_payment/pdf_template': { title: 'Pdf Template', sourceViewPath: 'invoice_payment/pdf_template.php' },
'landing_page/admin_dashboard': { title: 'Admin Dashboard', sourceViewPath: 'landing_page/admin_dashboard.php' },
'landing_page/guest_dashboard': { title: 'Guest Dashboard', sourceViewPath: 'landing_page/guest_dashboard.php' },
'landing_page/parent_dashboard': { title: 'Parent Dashboard', sourceViewPath: 'landing_page/parent_dashboard.php' },
'landing_page/student_dashboard': { title: 'Student Dashboard', sourceViewPath: 'landing_page/student_dashboard.php' },
'landing_page/teacher_dashboard': { title: 'Teacher Dashboard', sourceViewPath: 'landing_page/teacher_dashboard.php' },
'nav_builder/edit': { title: 'Edit', sourceViewPath: 'nav_builder/edit.php' },
'nav_builder/index': { title: 'Index', sourceViewPath: 'nav_builder/index.php' },
'navbar': { title: 'Navbar', sourceViewPath: 'navbar.php' },
'notifications/list_active': { title: 'List Active', sourceViewPath: 'notifications/list_active.php' },
'notifications/list_deleted': { title: 'List Deleted', sourceViewPath: 'notifications/list_deleted.php' },
'parent/add_second_parent': { title: 'Add Second Parent', sourceViewPath: 'parent/add_second_parent.php' },
'parent/assignments': { title: 'Assignments', sourceViewPath: 'parent/assignments.php' },
'parent/attendance': { title: 'Attendance', sourceViewPath: 'parent/attendance.php' },
'parent/calendar': { title: 'Calendar', sourceViewPath: 'parent/calendar.php' },
'parent/class_progress_list': { title: 'Class Progress List', sourceViewPath: 'parent/class_progress_list.php' },
'parent/class_progress_view': { title: 'Class Progress View', sourceViewPath: 'parent/class_progress_view.php' },
'parent/classes': { title: 'Classes', sourceViewPath: 'parent/classes.php' },
'parent/contact': { title: 'Contact', sourceViewPath: 'parent/contact.php' },
'parent/edit_emergency_contact': { title: 'Edit Emergency Contact', sourceViewPath: 'parent/edit_emergency_contact.php' },
'parent/edit_student_modal': { title: 'Edit Student Modal', sourceViewPath: 'parent/edit_student_modal.php' },
'parent/enroll_classes': { title: 'Enroll Classes', sourceViewPath: 'parent/enroll_classes.php' },
'parent/enroll_failure': { title: 'Enroll Failure', sourceViewPath: 'parent/enroll_failure.php' },
'parent/enroll_success': { title: 'Enroll Success', sourceViewPath: 'parent/enroll_success.php' },
'parent/event_participation': { title: 'Event Participation', sourceViewPath: 'parent/event_participation.php' },
'parent/invoice_payment': { title: 'Invoice Payment', sourceViewPath: 'parent/invoice_payment.php' },
'parent/no_kids_registred': { title: 'No Kids Registred', sourceViewPath: 'parent/no_kids_registred.php' },
'parent/parent_message': { title: 'Parent Message', sourceViewPath: 'parent/parent_message.php' },
'parent/payment_success': { title: 'Payment Success', sourceViewPath: 'parent/payment_success.php' },
'parent/payment_view': { title: 'Payment View', sourceViewPath: 'parent/payment_view.php' },
'parent/register_student': { title: 'Register Student', sourceViewPath: 'parent/register_student.php' },
'parent/report_attendance': { title: 'Report Attendance', sourceViewPath: 'parent/report_attendance.php' },
'parent/report_cards': { title: 'Report Cards', sourceViewPath: 'parent/report_cards.php' },
'parent/scores': { title: 'Scores', sourceViewPath: 'parent/scores.php' },
'parent/success_message': { title: 'Success Message', sourceViewPath: 'parent/success_message.php' },
'parent/withdraw_success': { title: 'Withdraw Success', sourceViewPath: 'parent/withdraw_success.php' },
'payment/_list_modal': { title: ' List Modal', sourceViewPath: 'payment/_list_modal.php' },
'payment/discount': { title: 'Discount', sourceViewPath: 'payment/discount.php' },
'payment/extra_charges': { title: 'Extra Charges', sourceViewPath: 'payment/extra_charges.php' },
'payment/financial_report': { title: 'Financial Report', sourceViewPath: 'payment/financial_report.php' },
'payment/financial_report_summary': { title: 'Financial Report Summary', sourceViewPath: 'payment/financial_report_summary.php' },
'payment/manual_pay': { title: 'Manual Pay', sourceViewPath: 'payment/manual_pay.php' },
'payment/manual_payment': { title: 'Manual Payment', sourceViewPath: 'payment/manual_payment.php' },
'payment/notification_management': { title: 'Notification Management', sourceViewPath: 'payment/notification_management.php' },
'payment/unpaid_parents': { title: 'Unpaid Parents', sourceViewPath: 'payment/unpaid_parents.php' },
'payment_list': { title: 'Payment List', sourceViewPath: 'payment_list.php' },
'policy/picture_policy': { title: 'Picture Policy', sourceViewPath: 'policy/picture_policy.php' },
'policy/picture_policy_partial': { title: 'Picture Policy Partial', sourceViewPath: 'policy/picture_policy_partial.php' },
'policy/school_policy': { title: 'School Policy', sourceViewPath: 'policy/school_policy.php' },
'policy/school_policy_partial': { title: 'School Policy Partial', sourceViewPath: 'policy/school_policy_partial.php' },
'preferences': { title: 'Preferences', sourceViewPath: 'preferences.php' },
'print_requests/admin_index': { title: 'Admin Index', sourceViewPath: 'print_requests/admin_index.php' },
'print_requests/teacher_index': { title: 'Teacher Index', sourceViewPath: 'print_requests/teacher_index.php' },
'printables_reports/badge_form': { title: 'Badge Form', sourceViewPath: 'printables_reports/badge_form.php' },
'printables_reports/certificates': { title: 'Certificates', sourceViewPath: 'printables_reports/certificates.php' },
'printables_reports/report_card': { title: 'Report Card', sourceViewPath: 'printables_reports/report_card.php' },
'printables_reports/sticker_form': { title: 'Sticker Form', sourceViewPath: 'printables_reports/sticker_form.php' },
'profile': { title: 'Profile', sourceViewPath: 'profile.php' },
'refunds/list': { title: 'List', sourceViewPath: 'refunds/list.php' },
'reimbursements/create': { title: 'Create', sourceViewPath: 'reimbursements/create.php' },
'reimbursements/edit': { title: 'Edit', sourceViewPath: 'reimbursements/edit.php' },
'reimbursements/index': { title: 'Index', sourceViewPath: 'reimbursements/index.php' },
'reimbursements/under_processing': { title: 'Under Processing', sourceViewPath: 'reimbursements/under_processing.php' },
'rfid/rfid_coming_soon': { title: 'Rfid Coming Soon', sourceViewPath: 'rfid/rfid_coming_soon.php' },
'rfid/rfid_log_view': { title: 'Rfid Log View', sourceViewPath: 'rfid/rfid_log_view.php' },
'rolepermission/add_permission': { title: 'Add Permission', sourceViewPath: 'rolepermission/add_permission.php' },
'rolepermission/add_role': { title: 'Add Role', sourceViewPath: 'rolepermission/add_role.php' },
'rolepermission/assign_role': { title: 'Assign Role', sourceViewPath: 'rolepermission/assign_role.php' },
'rolepermission/edit_permission': { title: 'Edit Permission', sourceViewPath: 'rolepermission/edit_permission.php' },
'rolepermission/edit_role': { title: 'Edit Role', sourceViewPath: 'rolepermission/edit_role.php' },
'rolepermission/edit_role_permissions': { title: 'Edit Role Permissions', sourceViewPath: 'rolepermission/edit_role_permissions.php' },
'rolepermission/list_roles': { title: 'List Roles', sourceViewPath: 'rolepermission/list_roles.php' },
'rolepermission/permissionList': { title: 'PermissionList', sourceViewPath: 'rolepermission/permissionList.php' },
'score_analysis/score_prediction': { title: 'Score Prediction', sourceViewPath: 'score_analysis/score_prediction.php' },
'slips/preview_list': { title: 'Preview List', sourceViewPath: 'slips/preview_list.php' },
'slips/slip_pdf': { title: 'Slip Pdf', sourceViewPath: 'slips/slip_pdf.php' },
'spinner': { title: 'Spinner', sourceViewPath: 'spinner.php' },
'staff/create': { title: 'Create', sourceViewPath: 'staff/create.php' },
'staff/edit': { title: 'Edit', sourceViewPath: 'staff/edit.php' },
'staff/index': { title: 'Index', sourceViewPath: 'staff/index.php' },
'student/score_card': { title: 'Score Card', sourceViewPath: 'student/score_card.php' },
'student/score_card_list': { title: 'Score Card List', sourceViewPath: 'student/score_card_list.php' },
'success': { title: 'Success', sourceViewPath: 'success.php' },
'support': { title: 'Support', sourceViewPath: 'support.php' },
'support_requests': { title: 'Support Requests', sourceViewPath: 'support_requests.php' },
'swagger_ui': { title: 'Swagger Ui', sourceViewPath: 'swagger_ui.php' },
'teacher/absence_vacation': { title: 'Absence Vacation', sourceViewPath: 'teacher/absence_vacation.php' },
'teacher/add_final_exam': { title: 'Add Final Exam', sourceViewPath: 'teacher/add_final_exam.php' },
'teacher/add_homework': { title: 'Add Homework', sourceViewPath: 'teacher/add_homework.php' },
'teacher/add_midterm_exam': { title: 'Add Midterm Exam', sourceViewPath: 'teacher/add_midterm_exam.php' },
'teacher/add_participation': { title: 'Add Participation', sourceViewPath: 'teacher/add_participation.php' },
'teacher/add_project': { title: 'Add Project', sourceViewPath: 'teacher/add_project.php' },
'teacher/add_quiz': { title: 'Add Quiz', sourceViewPath: 'teacher/add_quiz.php' },
'teacher/add_quiz_column_form': { title: 'Add Quiz Column Form', sourceViewPath: 'teacher/add_quiz_column_form.php' },
'teacher/calendar': { title: 'Calendar', sourceViewPath: 'teacher/calendar.php' },
'teacher/class_progress_history': { title: 'Class Progress History', sourceViewPath: 'teacher/class_progress_history.php' },
'teacher/class_progress_submit': { title: 'Class Progress Submit', sourceViewPath: 'teacher/class_progress_submit.php' },
'teacher/class_progress_view': { title: 'Class Progress View', sourceViewPath: 'teacher/class_progress_view.php' },
'teacher/class_view': { title: 'Class View', sourceViewPath: 'teacher/class_view.php' },
'teacher/competition_scores/index': { title: 'Index', sourceViewPath: 'teacher/competition_scores/index.php' },
'teacher/competition_scores/scores': { title: 'Scores', sourceViewPath: 'teacher/competition_scores/scores.php' },
'teacher/drafts': { title: 'Drafts', sourceViewPath: 'teacher/drafts.php' },
'teacher/exam_drafts': { title: 'Exam Drafts', sourceViewPath: 'teacher/exam_drafts.php' },
'teacher/homework_list': { title: 'Homework List', sourceViewPath: 'teacher/homework_list.php' },
'teacher/inbox': { title: 'Inbox', sourceViewPath: 'teacher/inbox.php' },
'teacher/no_classes': { title: 'No Classes', sourceViewPath: 'teacher/no_classes.php' },
'teacher/scores': { title: 'Scores', sourceViewPath: 'teacher/scores.php' },
'teacher/select_semester': { title: 'Select Semester', sourceViewPath: 'teacher/select_semester.php' },
'teacher/sent': { title: 'Sent', sourceViewPath: 'teacher/sent.php' },
'teacher/showupdate_attendance': { title: 'Showupdate Attendance', sourceViewPath: 'teacher/showupdate_attendance.php' },
'teacher/teacher_assignment': { title: 'Teacher Assignment', sourceViewPath: 'teacher/teacher_assignment.php' },
'teacher/teacher_contactus': { title: 'Teacher Contactus', sourceViewPath: 'teacher/teacher_contactus.php' },
'teacher/teacher_message': { title: 'Teacher Message', sourceViewPath: 'teacher/teacher_message.php' },
'teacher/teacher_navbar': { title: 'Teacher Navbar', sourceViewPath: 'teacher/teacher_navbar.php' },
'teacher/teacher_support': { title: 'Teacher Support', sourceViewPath: 'teacher/teacher_support.php' },
'teacher/trash': { title: 'Trash', sourceViewPath: 'teacher/trash.php' },
'team': { title: 'Team', sourceViewPath: 'team.php' },
'testimonial': { title: 'Testimonial', sourceViewPath: 'testimonial.php' },
'user/create': { title: 'Create', sourceViewPath: 'user/create.php' },
'user/edit': { title: 'Edit', sourceViewPath: 'user/edit.php' },
'user/forgot_password': { title: 'Forgot Password', sourceViewPath: 'user/forgot_password.php' },
'user/login': { title: 'Login', sourceViewPath: 'user/login.php' },
'user/login_activity': { title: 'Login Activity', sourceViewPath: 'user/login_activity.php' },
'user/password_reset_confirmation': { title: 'Password Reset Confirmation', sourceViewPath: 'user/password_reset_confirmation.php' },
'user/password_set_success': { title: 'Password Set Success', sourceViewPath: 'user/password_set_success.php' },
'user/register': { title: 'Register', sourceViewPath: 'user/register.php' },
'user/reset_password': { title: 'Reset Password', sourceViewPath: 'user/reset_password.php' },
'user/set_authorized_user_password': { title: 'Set Authorized User Password', sourceViewPath: 'user/set_authorized_user_password.php' },
'user/set_password': { title: 'Set Password', sourceViewPath: 'user/set_password.php' },
'user/user_list': { title: 'User List', sourceViewPath: 'user/user_list.php' },
'user/welcome_back': { title: 'Welcome Back', sourceViewPath: 'user/welcome_back.php' },
'welcome_message': { title: 'Welcome Message', sourceViewPath: 'welcome_message.php' },
'whatsapp/manage_links': { title: 'Manage Links', sourceViewPath: 'whatsapp/manage_links.php' },
'whatsapp/parent_contacts': { title: 'Parent Contacts', sourceViewPath: 'whatsapp/parent_contacts.php' },
'whatsapp/parent_contacts_by_class': { title: 'Parent Contacts By Class', sourceViewPath: 'whatsapp/parent_contacts_by_class.php' },
'winners/competitions/index': { title: 'Index', sourceViewPath: 'winners/competitions/index.php' },
'winners/competitions/show': { title: 'Show', sourceViewPath: 'winners/competitions/show.php' },
}
-47
View File
@@ -1,47 +0,0 @@
import { Link, useParams } from 'react-router-dom'
import { getCiMeta } from '../lib/ciRouteLookup'
/** Fallback for CI-style paths not yet ported to dedicated React pages. */
export function CiPlaceholderPage() {
const params = useParams()
const star = params['*'] ?? ''
const segments = star.split('/').filter(Boolean)
const meta = getCiMeta(star)
const title = meta?.title ?? 'Section placeholder'
return (
<div>
<nav aria-label="breadcrumb">
<ol className="breadcrumb">
<li className="breadcrumb-item">
<Link to="/app/home">Home</Link>
</li>
{segments.map((s, i) => (
<li
key={`${s}-${i}`}
className={`breadcrumb-item ${i === segments.length - 1 ? 'active' : ''}`}
aria-current={i === segments.length - 1 ? 'page' : undefined}
>
{s}
</li>
))}
</ol>
</nav>
<h2 className="h4 mb-3">{title}</h2>
<p className="text-muted small mb-3">
Implement this screen using the matching routes in <code>app_laravel/routes/api.php</code>{' '}
(JWT <code>Authorization: Bearer</code>). See also <Link to="/docs">API docs</Link>.
</p>
<p className="small mb-3">
SPA path: <code>/app/{star || '…'}</code>
</p>
<p className="small mb-0">
<Link to="/app/browse">Browse all CI view routes</Link>
{' · '}
</p>
</div>
)
}
-1
View File
@@ -2,7 +2,6 @@ import { type FormEvent, useEffect, useRef, useState } from 'react'
import { Link } from 'react-router-dom'
import { requestForgotPassword } from '../api/passwordFlow'
/** Mirrors CodeIgniter `user/forgot_password.php` + confirmation modal from `password_reset_confirmation.php`. */
export function ForgotPasswordPage() {
const [email, setEmail] = useState('')
const [error, setError] = useState<string | null>(null)
-1
View File
@@ -1,4 +1,3 @@
/* Ported from CodeIgniter `Views/index.php` — scoped to avoid overriding global layout. */
.home-landing {
--home-primary: #3a8fd1;
--home-secondary: #2c5e8a;
+1 -1
View File
@@ -12,7 +12,7 @@ function userMayLoadAdministratorHomeMetrics(user: AuthUser | null): boolean {
return Boolean(r.administrator || r.admin || r.super_admin)
}
/** Carousel + sections ported from CodeIgniter `Views/index.php` (Al Rahma public home). */
/** Carousel + sections adapted from the previous public home content. */
const CAROUSEL_SLIDES = [
{
image: '/images/carousel-1.png',
-1
View File
@@ -4,7 +4,6 @@ import { fetchDashboardRoute } from '../api/session'
import { useAuth } from '../auth/AuthProvider'
import { spaPathFromCiUrl } from '../lib/ciSpaPaths'
/** Matches CodeIgniter `Views/user/login.php` (JWT via `/api/v1/auth/login`). */
export function LoginPage() {
const { login } = useAuth()
const navigate = useNavigate()
-1
View File
@@ -15,7 +15,6 @@ function formatUsPhone(input: string): string {
return `${raw.slice(0, 3)}-${raw.slice(3, 6)}-${raw.slice(6)}`
}
/** Matches CodeIgniter `Views/user/register.php` + Laravel `POST /api/v1/auth/register` (captcha flow). */
export function RegisterPage() {
const navigate = useNavigate()
+49
View File
@@ -0,0 +1,49 @@
import { Link, useParams } from 'react-router-dom'
import { getViewRouteMeta } from '../lib/viewRouteLookup'
/** Fallback for mapped source-view paths not yet ported to dedicated React pages. */
export function ViewRoutePlaceholderPage() {
const params = useParams()
const star = params['*'] ?? ''
const segments = star.split('/').filter(Boolean)
const meta = getViewRouteMeta(star)
const title = meta?.title ?? 'Section placeholder'
return (
<div>
<nav aria-label="breadcrumb">
<ol className="breadcrumb">
<li className="breadcrumb-item">
<Link to="/app/home">Home</Link>
</li>
{segments.map((segment, index) => (
<li
key={
segment + '-' + index
}
className={
'breadcrumb-item ' + (index === segments.length - 1 ? 'active' : '')
}
aria-current={index === segments.length - 1 ? 'page' : undefined}
>
{segment}
</li>
))}
</ol>
</nav>
<h2 className="h4 mb-3">{title}</h2>
<p className="text-muted small mb-3">
Implement this screen using the matching Laravel routes and API endpoints (JWT{' '}
<code>Authorization: Bearer</code>). See also <Link to="/docs">API docs</Link>.
</p>
<p className="small mb-3">
SPA path: <code>/app/{star || '…'}</code>
</p>
<p className="small mb-0">
<Link to="/app/browse">Browse all mapped view routes</Link>
</p>
</div>
)
}
@@ -1,20 +1,19 @@
import { useMemo } from 'react'
import { Link } from 'react-router-dom'
import { ciRouteMeta } from '../lib/ciRouteMeta.generated'
import { ciRegistryKeyToAppPath } from '../lib/ciRouteLookup'
import { viewRouteMeta } from '../lib/viewRouteMeta.generated'
import { registryKeyToAppPath } from '../lib/viewRouteLookup'
/** Browse every CodeIgniter view file mapped under `/app/…` (parity placeholders unless a dedicated route exists). */
export function CiSitemapPage() {
export function ViewRouteSitemapPage() {
const grouped = useMemo(() => {
const g = new Map<string, { key: string; title: string }[]>()
for (const key of Object.keys(ciRouteMeta).sort()) {
const groups = new Map<string, { key: string; title: string }[]>()
for (const key of Object.keys(viewRouteMeta).sort()) {
const top = key.includes('/') ? key.slice(0, key.indexOf('/')) : key
const title = ciRouteMeta[key]?.title ?? key
const list = g.get(top) ?? []
const title = viewRouteMeta[key]?.title ?? key
const list = groups.get(top) ?? []
list.push({ key, title })
g.set(top, list)
groups.set(top, list)
}
return [...g.entries()].sort(([a], [b]) => a.localeCompare(b))
return [...groups.entries()].sort(([a], [b]) => a.localeCompare(b))
}, [])
return (
@@ -25,15 +24,15 @@ export function CiSitemapPage() {
<Link to="/app/home">Home</Link>
</li>
<li className="breadcrumb-item active" aria-current="page">
CI views
View routes
</li>
</ol>
</nav>
<p className="text-muted small mb-4">
Generated from <code>app_codeigniter/app/Views/**/*.php</code>. Each link opens the parity
route under <code>/app/</code>; unimplemented screens use the section placeholder with the
matching view path. Regenerate: <code>npm run gen:ci-meta</code>.
Generated from discovered PHP view sources. Each link opens the mapped route under{' '}
<code>/app/</code>; unimplemented screens use the section placeholder with the matching
source view path. Regenerate: <code>npm run gen:view-meta</code>.
</p>
<div className="row g-4">
@@ -44,7 +43,7 @@ export function CiSitemapPage() {
<ul className="list-unstyled mb-0 px-2 py-2" style={{ maxHeight: 280, overflow: 'auto' }}>
{items.map(({ key, title }) => (
<li key={key} className="small py-1">
<Link to={ciRegistryKeyToAppPath(key)}>{title}</Link>
<Link to={registryKeyToAppPath(key)}>{title}</Link>
<div className="text-muted" style={{ fontSize: '0.75rem' }}>
<code>{key.replace(/\//g, ' / ')}</code>
</div>
-1
View File
@@ -1,4 +1,3 @@
/* Mirrors CodeIgniter `layout/email_layout.php` — scoped for admin preview only */
.email-preview-root {
font-family: Arial, sans-serif;
background-color: #f9f9f9;
@@ -26,7 +26,7 @@ export function EmailTemplatePreviewPage() {
<h2 className="h5 mb-0">{entry.title}</h2>
</div>
<p className="small text-muted mb-3">
CI: <code>{entry.ciView}</code>
Source template: <code>{entry.sourceTemplatePath}</code>
</p>
<EmailPreviewLayout>{entry.render()}</EmailPreviewLayout>
</div>
+7 -5
View File
@@ -8,8 +8,8 @@ export function EmailTemplatesIndexPage() {
<div className="container-fluid py-3">
<h2 className="h4 mb-3">Email templates (preview)</h2>
<p className="text-muted small mb-4">
React previews matching CodeIgniter <code>Views/emails/*.php</code>. Laravel should render the same HTML for
outgoing mail; this UI is for QA and copy review.
React previews matching the current PHP email templates. Laravel should render the same HTML
for outgoing mail; this UI is for QA and copy review.
</p>
<div className="mb-3">
<Link to="/app/administrator/parent-email-extractor" className="btn btn-outline-primary btn-sm">
@@ -21,7 +21,7 @@ export function EmailTemplatesIndexPage() {
<thead>
<tr>
<th>Template</th>
<th>CI view</th>
<th>Source template</th>
<th />
</tr>
</thead>
@@ -32,10 +32,12 @@ export function EmailTemplatesIndexPage() {
<tr key={slug}>
<td>{row.title}</td>
<td>
<code className="small">{row.ciView}</code>
<code className="small">{row.sourceTemplatePath}</code>
</td>
<td className="text-end">
<Link className="btn btn-sm btn-outline-secondary" to={`/app/administrator/email-templates/${slug}`}>
<Link className="btn btn-sm btn-outline-secondary" to={
'/app/administrator/email-templates/' + slug
}>
Preview
</Link>
</td>
+32 -32
View File
@@ -71,164 +71,164 @@ export type EmailTemplateSlug =
export type RegistryEntry = {
title: string
ciView: string
sourceTemplatePath: string
render: () => JSX.Element
}
export const EMAIL_TEMPLATE_REGISTRY: Record<EmailTemplateSlug, RegistryEntry> = {
'final-warning': {
title: 'Final attendance warning',
ciView: 'app/Views/emails/final_warning.php',
sourceTemplatePath: 'emails/final_warning.php',
render: () => <FinalWarningBody />,
},
'follow-up': {
title: 'Attendance follow-up',
ciView: 'app/Views/emails/follow_up.php',
sourceTemplatePath: 'emails/follow_up.php',
render: () => <FollowUpBody />,
},
dismissal: {
title: 'Dismissal (absences)',
ciView: 'app/Views/emails/dismissal.php',
sourceTemplatePath: 'emails/dismissal.php',
render: () => <DismissalBody />,
},
'parent-attendance-admin': {
title: 'Parent attendance — admin notification',
ciView: 'app/Views/emails/parent_attendance_admin.php',
sourceTemplatePath: 'emails/parent_attendance_admin.php',
render: () => <ParentAttendanceAdminBody />,
},
'parent-attendance-parent': {
title: 'Parent attendance — confirmation to parent',
ciView: 'app/Views/emails/parent_attendance_parent.php',
sourceTemplatePath: 'emails/parent_attendance_parent.php',
render: () => <ParentAttendanceParentBody />,
},
'below-sixty-performance': {
title: 'Below 60 performance',
ciView: 'app/Views/emails/below_sixty_performance.php',
sourceTemplatePath: 'emails/below_sixty_performance.php',
render: () => <BelowSixtyPerformanceBody />,
},
'payment-receipt': {
title: 'Payment receipt',
ciView: 'app/Views/emails/payment_receipt.php',
sourceTemplatePath: 'emails/payment_receipt.php',
render: () => <PaymentReceiptBody />,
},
'extra-charge-notice': {
title: 'Extra charge notice',
ciView: 'app/Views/emails/extra_charge_notice.php',
sourceTemplatePath: 'emails/extra_charge_notice.php',
render: () => <ExtraChargeNoticeBody />,
},
'reset-password': {
title: 'Reset password',
ciView: 'app/Views/emails/reset_password.php',
sourceTemplatePath: 'emails/reset_password.php',
render: () => <ResetPasswordBody />,
},
'welcome-parent': {
title: 'Welcome — parent activation',
ciView: 'app/Views/emails/welcome_parent.php',
sourceTemplatePath: 'emails/welcome_parent.php',
render: () => <WelcomeParentBody />,
},
'welcome-staff': {
title: 'Welcome — staff activation',
ciView: 'app/Views/emails/welcome_staff.php',
sourceTemplatePath: 'emails/welcome_staff.php',
render: () => <WelcomeStaffBody />,
},
'welcome-user': {
title: 'Welcome — generic user',
ciView: 'app/Views/emails/welcome_user.php',
sourceTemplatePath: 'emails/welcome_user.php',
render: () => <WelcomeUserBody />,
},
'student-removed': {
title: 'Student removed',
ciView: 'app/Views/emails/student_removed.php',
sourceTemplatePath: 'emails/student_removed.php',
render: () => <StudentRemovedBody />,
},
'support-new-account': {
title: 'Support — new account alert',
ciView: 'app/Views/emails/support_new_account.php',
sourceTemplatePath: 'emails/support_new_account.php',
render: () => <SupportNewAccountBody />,
},
'admin-student-registered': {
title: 'Admin — student registered',
ciView: 'app/Views/emails/admin_student_registered.php',
sourceTemplatePath: 'emails/admin_student_registered.php',
render: () => <AdminStudentRegisteredBody />,
},
'status-admission-review': {
title: 'Status — admission under review',
ciView: 'app/Views/emails/status_admission_review.php',
sourceTemplatePath: 'emails/status_admission_review.php',
render: () => <StatusAdmissionReviewBody />,
},
'status-denied': {
title: 'Status — admission denied',
ciView: 'app/Views/emails/status_denied.php',
sourceTemplatePath: 'emails/status_denied.php',
render: () => <StatusDeniedBody />,
},
'status-enrolled': {
title: 'Status — enrolled',
ciView: 'app/Views/emails/status_enrolled.php',
sourceTemplatePath: 'emails/status_enrolled.php',
render: () => <StatusEnrolledBody />,
},
'status-not-enrolled': {
title: 'Status — not enrolled',
ciView: 'app/Views/emails/status_not_enrolled.php',
sourceTemplatePath: 'emails/status_not_enrolled.php',
render: () => <StatusNotEnrolledBody />,
},
'status-payment-pending': {
title: 'Status — payment pending',
ciView: 'app/Views/emails/status_payment_pending.php',
sourceTemplatePath: 'emails/status_payment_pending.php',
render: () => <StatusPaymentPendingBody />,
},
'status-refund-pending': {
title: 'Status — refund pending',
ciView: 'app/Views/emails/status_refund_pending.php',
sourceTemplatePath: 'emails/status_refund_pending.php',
render: () => <StatusRefundPendingBody />,
},
'status-waitlist': {
title: 'Status — waitlist',
ciView: 'app/Views/emails/status_waitlist.php',
sourceTemplatePath: 'emails/status_waitlist.php',
render: () => <StatusWaitlistBody />,
},
'status-withdraw-review': {
title: 'Status — withdraw under review',
ciView: 'app/Views/emails/status_withdraw_review.php',
sourceTemplatePath: 'emails/status_withdraw_review.php',
render: () => <StatusWithdrawReviewBody />,
},
'status-withdrawn': {
title: 'Status — withdrawn',
ciView: 'app/Views/emails/status_withdrawn.php',
sourceTemplatePath: 'emails/status_withdrawn.php',
render: () => <StatusWithdrawnBody />,
},
'calendar-notification': {
title: 'Calendar notification',
ciView: 'app/Views/emails/calendar_notification.php',
sourceTemplatePath: 'emails/calendar_notification.php',
render: () => <CalendarNotificationBody />,
},
'event-broadcast': {
title: 'Event broadcast',
ciView: 'app/Views/emails/event_broadcast.php',
sourceTemplatePath: 'emails/event_broadcast.php',
render: () => <EventBroadcastBody />,
},
'custom-html': {
title: 'Custom HTML body',
ciView: 'app/Views/emails/custom_html.php',
sourceTemplatePath: 'emails/custom_html.php',
render: () => <CustomHtmlBody />,
},
'wrap-layout-sample': {
title: 'Wrap layout ($body_html)',
ciView: 'app/Views/emails/_wrap_layout.php',
sourceTemplatePath: 'emails/_wrap_layout.php',
render: () => <WrapLayoutSampleBody />,
},
'broadcast-wrapper-sample': {
title: 'Broadcast wrapper ($content)',
ciView: 'app/Views/emails/broadcast_wrapper.php',
sourceTemplatePath: 'emails/broadcast_wrapper.php',
render: () => <BroadcastWrapperSampleBody />,
},
'whatsapp-invite': {
title: 'WhatsApp invite',
ciView: 'app/Views/emails/whatsapp_invite.php',
sourceTemplatePath: 'emails/whatsapp_invite.php',
render: () => <WhatsAppInviteBody />,
},
'whatsapp-group-invitation': {
title: 'WhatsApp group invitation (draft text)',
ciView: 'app/Views/emails/whatsapp_group_invitation.php',
sourceTemplatePath: 'emails/whatsapp_group_invitation.php',
render: () => <WhatsAppGroupInvitationDraftBody />,
},
}
+1 -1
View File
@@ -1,6 +1,6 @@
import { Link } from 'react-router-dom'
/** Port of CodeIgniter `Views/errors/access_denied.php`. */
export function AccessDeniedPage() {
return (
<div className="container mt-5">
-1
View File
@@ -1,6 +1,5 @@
import { Link } from 'react-router-dom'
/** Port of CodeIgniter `Views/errors/invalid_token.php` (registration token invalid/expired). */
export function InvalidTokenPage() {
return (
<div className="registration-form container mt-5 mb-5">
@@ -1,9 +1,5 @@
import { useEffect, useMemo, useState } from 'react'
/**
* Vendor / retailor UX from CodeIgniter `expenses/create.php` and `edit.php`
* (dropdown + Other text field).
*/
export function ExpenseVendorFields({
retailors,
initialRetailor,
-1
View File
@@ -4,7 +4,6 @@ export type ParentParitySpec = {
title: string
/** File name under `app/Views/parent/` (e.g. `calendar.php`). */
ciViewFile: string
/** Example CodeIgniter URL paths (with leading slash). */
legacyCiRoutes?: string[]
}
-1
View File
@@ -1,3 +1,2 @@
/** Barrel for CodeIgniter `Views/teacher/*` React parity screens. */
export * from './TeacherCorePages'
export * from './TeacherRestPages'
-1
View File
@@ -1,4 +1,3 @@
/* Mirrors app_codeigniter/public/assets/css/register-form.css for auth/register pages */
.ci-auth-bg {
background-color: #deffe1;