cleanup codeigniter code
This commit is contained in:
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test:api": "node scripts/test-api.mjs",
|
"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",
|
"dev": "vite",
|
||||||
"build": "tsc -b && vite build",
|
"build": "tsc -b && vite build",
|
||||||
"lint": "eslint .",
|
"lint": "eslint .",
|
||||||
|
|||||||
@@ -1,14 +1,31 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/** Stub CI helper so the partial can be included standalone. */
|
$root = dirname(__DIR__);
|
||||||
function base_url(string $path = ''): string
|
$policyHtmlPath = '/Volumes/ExternalApps/Documents/alrahma_sunday_school_api/resources/policies/school_policy.html';
|
||||||
{
|
|
||||||
$path = ltrim($path, '/');
|
if (!is_file($policyHtmlPath)) {
|
||||||
return $path === '' ? '/' : '/' . $path;
|
fwrite(STDERR, "Policy source not found: {$policyHtmlPath}\n");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
$root = dirname(__DIR__);
|
$html = file_get_contents($policyHtmlPath);
|
||||||
$data = include $root . '/../app_codeigniter/app/Views/policy/school_policy_partial.php';
|
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';
|
$outDir = $root . '/public/policy';
|
||||||
if (!is_dir($outDir)) {
|
if (!is_dir($outDir)) {
|
||||||
|
|||||||
@@ -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()
|
|
||||||
@@ -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
@@ -71,11 +71,11 @@ const AppHome = lazy(() => import('./pages/AppHome').then((m) => ({ default: m.A
|
|||||||
const AdminLandingDashboardPage = lazy(() =>
|
const AdminLandingDashboardPage = lazy(() =>
|
||||||
import('./pages/landing/AdminLandingDashboardPage').then((m) => ({ default: m.AdminLandingDashboardPage })),
|
import('./pages/landing/AdminLandingDashboardPage').then((m) => ({ default: m.AdminLandingDashboardPage })),
|
||||||
)
|
)
|
||||||
const CiSitemapPage = lazy(() =>
|
const ViewRouteSitemapPage = lazy(() =>
|
||||||
import('./pages/CiSitemapPage').then((m) => ({ default: m.CiSitemapPage })),
|
import('./pages/ViewRouteSitemapPage').then((m) => ({ default: m.ViewRouteSitemapPage })),
|
||||||
)
|
)
|
||||||
const CiPlaceholderPage = lazy(() =>
|
const ViewRoutePlaceholderPage = lazy(() =>
|
||||||
import('./pages/CiPlaceholderPage').then((m) => ({ default: m.CiPlaceholderPage })),
|
import('./pages/ViewRoutePlaceholderPage').then((m) => ({ default: m.ViewRoutePlaceholderPage })),
|
||||||
)
|
)
|
||||||
const NavBuilderPage = lazy(() =>
|
const NavBuilderPage = lazy(() =>
|
||||||
import('./pages/NavBuilderPage').then((m) => ({ default: m.NavBuilderPage })),
|
import('./pages/NavBuilderPage').then((m) => ({ default: m.NavBuilderPage })),
|
||||||
@@ -1426,8 +1426,8 @@ export default function App() {
|
|||||||
</Route>
|
</Route>
|
||||||
|
|
||||||
<Route element={<ManagementLayout />}>
|
<Route element={<ManagementLayout />}>
|
||||||
<Route path="browse" element={<CiSitemapPage />} />
|
<Route path="browse" element={<ViewRouteSitemapPage />} />
|
||||||
<Route path="*" element={<CiPlaceholderPage />} />
|
<Route path="*" element={<ViewRoutePlaceholderPage />} />
|
||||||
</Route>
|
</Route>
|
||||||
</Route>
|
</Route>
|
||||||
</Route>
|
</Route>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/** Northeast states — same labels as CodeIgniter user/register.php */
|
|
||||||
export const NE_STATES: { abbr: string; name: string }[] = [
|
export const NE_STATES: { abbr: string; name: string }[] = [
|
||||||
{ abbr: 'CT', name: 'Connecticut' },
|
{ abbr: 'CT', name: 'Connecticut' },
|
||||||
{ abbr: 'ME', name: 'Maine' },
|
{ abbr: 'ME', name: 'Maine' },
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
:root {
|
:root {
|
||||||
/* Mirrors CodeIgniter management_layout theme tokens */
|
|
||||||
--app-primary: #22a047;
|
--app-primary: #22a047;
|
||||||
--mgmt-primary: #22a047;
|
--mgmt-primary: #22a047;
|
||||||
--mgmt-primary-hover: #1c863b;
|
--mgmt-primary-hover: #1c863b;
|
||||||
|
|||||||
@@ -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',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -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,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 {
|
export function spaPathFromCiUrl(url: string | null | undefined): string | null {
|
||||||
if (url == null) return null
|
if (url == null) return null
|
||||||
|
|||||||
@@ -1,132 +1,132 @@
|
|||||||
import { type CiRouteMetaEntry, ciRouteMeta } from './ciRouteMeta.generated'
|
import { type ViewRouteMetaEntry, viewRouteMeta } from './viewRouteMeta.generated'
|
||||||
import { ciRouteManual } from './ciRouteManual'
|
import { viewRouteManual } from './viewRouteManual'
|
||||||
|
|
||||||
/** CI registry keys whose folder layout does not match the SPA route (see `App.tsx`). */
|
/** view registry keys whose folder layout does not match the SPA route (see `App.tsx`). */
|
||||||
const CI_REGISTRY_APP_PATH_OVERRIDES: Record<string, string> = {
|
const VIEW_REGISTRY_APP_PATH_OVERRIDES: Record<string, string> = {
|
||||||
// Nested views map to flat `/app/teacher/competition-scores` (+ dynamic detail route).
|
// Nested views map to flat `/app/teacher/competition-scores` (+ dynamic detail route).
|
||||||
'teacher/competition_scores/index': '/app/teacher/competition-scores',
|
'teacher/competition_scores/index': '/app/teacher/competition-scores',
|
||||||
'teacher/competition_scores/scores': '/app/teacher/competition-scores',
|
'teacher/competition_scores/scores': '/app/teacher/competition-scores',
|
||||||
'landing_page/admin_dashboard': '/app/landing-page/admin-dashboard',
|
'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',
|
'landing_page/teacher_dashboard': '/app/teacher_dashboard',
|
||||||
'flags/flags_management': '/app/administrator/flags/management',
|
'flags/flags_management': '/app/administrator/flags/management',
|
||||||
'flags/processed_flags': '/app/administrator/flags/processed',
|
'flags/processed_flags': '/app/administrator/flags/processed',
|
||||||
'flags/incident_analysis': '/app/administrator/flags/incident-analysis',
|
'flags/incident_analysis': '/app/administrator/flags/incident-analysis',
|
||||||
'grading/grading_main': '/app/grading',
|
'grading/grading_main': '/app/grading',
|
||||||
'grading/below_sixty': '/app/grading/below-60',
|
'grading/below_sixty': '/app/grading/below-60',
|
||||||
'grading/below_sixty_email_editor': '/app/grading/below-60/email-editor',
|
'grading/below_sixty_email_editor': '/app/grading/below-60/email-editor',
|
||||||
'grading/comments': '/app/grading/scores/comments',
|
'grading/comments': '/app/grading/scores/comments',
|
||||||
'grading/final': '/app/grading/scores/final',
|
'grading/final': '/app/grading/scores/final',
|
||||||
'grading/homework': '/app/grading/scores/homework',
|
'grading/homework': '/app/grading/scores/homework',
|
||||||
'grading/homework_tracking': '/app/grading/homework-tracking',
|
'grading/homework_tracking': '/app/grading/homework-tracking',
|
||||||
'grading/midterm': '/app/grading/scores/midterm',
|
'grading/midterm': '/app/grading/scores/midterm',
|
||||||
'grading/participation': '/app/grading/participation',
|
'grading/participation': '/app/grading/participation',
|
||||||
'grading/placement': '/app/grading/placement',
|
'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_batch': '/app/grading/placement-index',
|
||||||
'grading/placement_index': '/app/grading/placement-index',
|
'grading/placement_index': '/app/grading/placement-index',
|
||||||
'grading/project': '/app/grading/scores/project',
|
'grading/project': '/app/grading/scores/project',
|
||||||
'grading/quiz': '/app/grading/scores/quiz',
|
'grading/quiz': '/app/grading/scores/quiz',
|
||||||
'grading/schedule_meeting': '/app/grading/schedule-meeting',
|
'grading/schedule_meeting': '/app/grading/schedule-meeting',
|
||||||
'grading/test': '/app/grading/scores/test',
|
'grading/test': '/app/grading/scores/test',
|
||||||
'inventory/book/index': '/app/inventory/book',
|
'inventory/book/index': '/app/inventory/book',
|
||||||
'inventory/book/form': '/app/inventory/book/create',
|
'inventory/book/form': '/app/inventory/book/create',
|
||||||
'inventory/classroom/index': '/app/administrator/inventory/classroom',
|
'inventory/classroom/index': '/app/administrator/inventory/classroom',
|
||||||
'inventory/classroom/form': '/app/administrator/inventory/classroom/create',
|
'inventory/classroom/form': '/app/administrator/inventory/classroom/create',
|
||||||
'inventory/classroom/audit_form': '/app/administrator/inventory/classroom',
|
'inventory/classroom/audit_form': '/app/administrator/inventory/classroom',
|
||||||
'inventory/kitchen/index': '/app/administrator/inventory/kitchen',
|
'inventory/kitchen/index': '/app/administrator/inventory/kitchen',
|
||||||
'inventory/kitchen/form': '/app/administrator/inventory/kitchen/create',
|
'inventory/kitchen/form': '/app/administrator/inventory/kitchen/create',
|
||||||
'inventory/office/index': '/app/administrator/inventory/office',
|
'inventory/office/index': '/app/administrator/inventory/office',
|
||||||
'inventory/office/form': '/app/administrator/inventory/office/create',
|
'inventory/office/form': '/app/administrator/inventory/office/create',
|
||||||
'inventory/movements/index': '/app/administrator/inventory/movements',
|
'inventory/movements/index': '/app/administrator/inventory/movements',
|
||||||
'inventory/movements/form': '/app/administrator/inventory/movements/create',
|
'inventory/movements/form': '/app/administrator/inventory/movements/create',
|
||||||
'inventory/movements/edit': '/app/administrator/inventory/movements',
|
'inventory/movements/edit': '/app/administrator/inventory/movements',
|
||||||
'inventory/summary': '/app/administrator/inventory/summary',
|
'inventory/summary': '/app/administrator/inventory/summary',
|
||||||
'inventory/adjust_form': '/app/administrator/inventory/summary',
|
'inventory/adjust_form': '/app/administrator/inventory/summary',
|
||||||
'inventory/teacher_distribute': '/app/teacher/inventory/book-distribute',
|
'inventory/teacher_distribute': '/app/teacher/inventory/book-distribute',
|
||||||
'attendance/teacher_attendance_month': '/app/admin/teacher-attendance/month',
|
'attendance/teacher_attendance_month': '/app/admin/teacher-attendance/month',
|
||||||
'attendance/violations_pending': '/app/attendance/violations/pending',
|
'attendance/violations_pending': '/app/attendance/violations/pending',
|
||||||
'attendance/violations_notified': '/app/attendance/violations/notified',
|
'attendance/violations_notified': '/app/attendance/violations/notified',
|
||||||
'attendance/early_dismissals': '/app/attendance/early-dismissals',
|
'attendance/early_dismissals': '/app/attendance/early-dismissals',
|
||||||
'attendance/early_dismissals_add': '/app/attendance/early-dismissals/new',
|
'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',
|
||||||
'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_auto_distribute': '/app/administrator/sections/auto-distribute',
|
||||||
'administrator/sections_promotion_totals': '/app/administrator/sections/promotion-totals',
|
'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/event_list': '/app/administrator/events',
|
||||||
'administrator/events': '/app/administrator/events',
|
'administrator/events': '/app/administrator/events',
|
||||||
'invoice_payment/invoice_management': '/app/administrator/invoice-payment',
|
'invoice_payment/invoice_management': '/app/administrator/invoice-payment',
|
||||||
/** PDF is generated server-side; SPA preview lives under invoice-payment/pdf/:id */
|
/** PDF is generated server-side; SPA preview lives under invoice-payment/pdf/:id */
|
||||||
'invoice_payment/pdf_template': '/app/administrator/invoice-payment',
|
'invoice_payment/pdf_template': '/app/administrator/invoice-payment',
|
||||||
'notifications/list_active': '/app/notifications/active',
|
'notifications/list_active': '/app/notifications/active',
|
||||||
'notifications/list_deleted': '/app/notifications/deleted',
|
'notifications/list_deleted': '/app/notifications/deleted',
|
||||||
'payment/manual_pay': '/app/administrator/payment/manual-pay',
|
'payment/manual_pay': '/app/administrator/payment/manual-pay',
|
||||||
'payment/manual_payment': '/app/administrator/payment/manual-payment',
|
'payment/manual_payment': '/app/administrator/payment/manual-payment',
|
||||||
'payment/notification_management': '/app/administrator/payment/notification-management',
|
'payment/notification_management': '/app/administrator/payment/notification-management',
|
||||||
'payment/unpaid_parents': '/app/payment/unpaid-parents',
|
'payment/unpaid_parents': '/app/payment/unpaid-parents',
|
||||||
'payment/discount': '/app/administrator/payment/discount-apply-student',
|
'payment/discount': '/app/administrator/payment/discount-apply-student',
|
||||||
'payment/extra_charges': '/app/admin/charges',
|
'payment/extra_charges': '/app/admin/charges',
|
||||||
'payment/financial_report': '/app/administrator/payment/financial-report',
|
'payment/financial_report': '/app/administrator/payment/financial-report',
|
||||||
'payment/financial_report_summary': '/app/administrator/payment/financial-report-summary',
|
'payment/financial_report_summary': '/app/administrator/payment/financial-report-summary',
|
||||||
'payment/payment_redirect': '/app/parent/payment-redirect',
|
'payment/payment_redirect': '/app/parent/payment-redirect',
|
||||||
'policy/school_policy': '/school-policy',
|
'policy/school_policy': '/school-policy',
|
||||||
'policy/picture_policy': '/picture-policy',
|
'policy/picture_policy': '/picture-policy',
|
||||||
'print_requests/admin_index': '/app/admin/print-requests',
|
'print_requests/admin_index': '/app/admin/print-requests',
|
||||||
'print_requests/teacher_index': '/app/teacher/print-requests',
|
'print_requests/teacher_index': '/app/teacher/print-requests',
|
||||||
'printables_reports/sticker_form': '/app/printables_reports/stickers',
|
'printables_reports/sticker_form': '/app/printables_reports/stickers',
|
||||||
'printables_reports/stickers': '/app/printables_reports/stickers',
|
'printables_reports/stickers': '/app/printables_reports/stickers',
|
||||||
'printables_reports/badge_form': '/app/administrator/printables/badges',
|
'printables_reports/badge_form': '/app/administrator/printables/badges',
|
||||||
'printables_reports/report_card': '/app/administrator/printables/report-cards',
|
'printables_reports/report_card': '/app/administrator/printables/report-cards',
|
||||||
'reimbursements/index': '/app/administrator/reimbursements',
|
'reimbursements/index': '/app/administrator/reimbursements',
|
||||||
'reimbursements/create': '/app/administrator/reimbursements/create',
|
'reimbursements/create': '/app/administrator/reimbursements/create',
|
||||||
'reimbursements/edit': '/app/administrator/reimbursements',
|
'reimbursements/edit': '/app/administrator/reimbursements',
|
||||||
'reimbursements/under_processing': '/app/administrator/reimbursements/under-processing',
|
'reimbursements/under_processing': '/app/administrator/reimbursements/under-processing',
|
||||||
'report/combined': '/app/report/combined',
|
'report/combined': '/app/report/combined',
|
||||||
'rfid/rfid_coming_soon': '/app/rfid_coming_soon',
|
'rfid/rfid_coming_soon': '/app/rfid_coming_soon',
|
||||||
'rolepermission/list_roles': '/app/rolepermission/roles',
|
'rolepermission/list_roles': '/app/rolepermission/roles',
|
||||||
'rolepermission/permissionList': '/app/rolepermission/list_permissions',
|
'rolepermission/permissionList': '/app/rolepermission/list_permissions',
|
||||||
'rolepermission/list_permissions': '/app/rolepermission/list_permissions',
|
'rolepermission/list_permissions': '/app/rolepermission/list_permissions',
|
||||||
'rolepermission/add_permission': '/app/rolepermission/permissions/create',
|
'rolepermission/add_permission': '/app/rolepermission/permissions/create',
|
||||||
'rolepermission/add_role': '/app/rolepermission/roles/create',
|
'rolepermission/add_role': '/app/rolepermission/roles/create',
|
||||||
'rolepermission/assign_role': '/app/rolepermission/assign',
|
'rolepermission/assign_role': '/app/rolepermission/assign',
|
||||||
'rolepermission/edit_permission': '/app/rolepermission/list_permissions',
|
'rolepermission/edit_permission': '/app/rolepermission/list_permissions',
|
||||||
'rolepermission/edit_role': '/app/rolepermission/roles',
|
'rolepermission/edit_role': '/app/rolepermission/roles',
|
||||||
'rolepermission/edit_role_permissions': '/app/rolepermission/roles',
|
'rolepermission/edit_role_permissions': '/app/rolepermission/roles',
|
||||||
'score_analysis/score_prediction': '/app/administrator/score-analysis/score-prediction',
|
'score_analysis/score_prediction': '/app/administrator/score-analysis/score-prediction',
|
||||||
'slips/preview_list': '/app/slips/preview',
|
'slips/preview_list': '/app/slips/preview',
|
||||||
'slips/slip_pdf': '/app/slips/print',
|
'slips/slip_pdf': '/app/slips/print',
|
||||||
'staff/index': '/app/staff',
|
'staff/index': '/app/staff',
|
||||||
'staff/create': '/app/staff/create',
|
'staff/create': '/app/staff/create',
|
||||||
'student/score_card_list': '/app/student/score-card/list',
|
'student/score_card_list': '/app/student/score-card/list',
|
||||||
/** Detail view is reached with an id segment in the URL; map the view key to the list entry route. */
|
/** Detail view is reached with an id segment in the URL; map the view key to the list entry route. */
|
||||||
'student/score_card': '/app/student/score-card/list',
|
'student/score_card': '/app/student/score-card/list',
|
||||||
'whatsapp/manage_links': '/app/whatsapp/manage-links',
|
'whatsapp/manage_links': '/app/whatsapp/manage-links',
|
||||||
'whatsapp/parent_contacts': '/app/whatsapp/parent-contacts',
|
'whatsapp/parent_contacts': '/app/whatsapp/parent-contacts',
|
||||||
'whatsapp/parent_contacts_by_class': '/app/whatsapp/parent-contacts-by-class',
|
'whatsapp/parent_contacts_by_class': '/app/whatsapp/parent-contacts-by-class',
|
||||||
'winners/competitions/index': '/app/winners/competitions',
|
'winners/competitions/index': '/app/winners/competitions',
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Match CI `app/Views/...` keys: lowercase, hyphens in URL map to underscores. */
|
/** Match view `app/Views/...` keys: lowercase, hyphens in URL map to underscores. */
|
||||||
export function getCiMeta(splat: string): CiRouteMetaEntry | null {
|
export function getViewRouteMeta(splat: string): ViewRouteMetaEntry | null {
|
||||||
const raw = splat
|
const raw = splat
|
||||||
.trim()
|
.trim()
|
||||||
.replace(/^\/+|\/+$/g, '')
|
.replace(/^\/+|\/+$/g, '')
|
||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
if (!raw) return null
|
if (!raw) return null
|
||||||
const withUnderscores = raw.replace(/-/g, '_')
|
const withUnderscores = raw.replace(/-/g, '_')
|
||||||
return (
|
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. */
|
/** 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 normalized = routeKey.trim().toLowerCase()
|
||||||
const override = CI_REGISTRY_APP_PATH_OVERRIDES[normalized]
|
const override = VIEW_REGISTRY_APP_PATH_OVERRIDES[normalized]
|
||||||
if (override) return override
|
if (override) return override
|
||||||
|
|
||||||
const parts = routeKey.split('/').map((seg) => seg.replace(/_/g, '-'))
|
const parts = routeKey.split('/').map((seg) => seg.replace(/_/g, '-'))
|
||||||
return `/app/${parts.join('/')}`
|
return `/app/${parts.join('/')}`
|
||||||
}
|
}
|
||||||
@@ -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',
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -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' },
|
||||||
|
}
|
||||||
@@ -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>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
@@ -2,7 +2,6 @@ import { type FormEvent, useEffect, useRef, useState } from 'react'
|
|||||||
import { Link } from 'react-router-dom'
|
import { Link } from 'react-router-dom'
|
||||||
import { requestForgotPassword } from '../api/passwordFlow'
|
import { requestForgotPassword } from '../api/passwordFlow'
|
||||||
|
|
||||||
/** Mirrors CodeIgniter `user/forgot_password.php` + confirmation modal from `password_reset_confirmation.php`. */
|
|
||||||
export function ForgotPasswordPage() {
|
export function ForgotPasswordPage() {
|
||||||
const [email, setEmail] = useState('')
|
const [email, setEmail] = useState('')
|
||||||
const [error, setError] = useState<string | null>(null)
|
const [error, setError] = useState<string | null>(null)
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
/* Ported from CodeIgniter `Views/index.php` — scoped to avoid overriding global layout. */
|
|
||||||
.home-landing {
|
.home-landing {
|
||||||
--home-primary: #3a8fd1;
|
--home-primary: #3a8fd1;
|
||||||
--home-secondary: #2c5e8a;
|
--home-secondary: #2c5e8a;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ function userMayLoadAdministratorHomeMetrics(user: AuthUser | null): boolean {
|
|||||||
return Boolean(r.administrator || r.admin || r.super_admin)
|
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 = [
|
const CAROUSEL_SLIDES = [
|
||||||
{
|
{
|
||||||
image: '/images/carousel-1.png',
|
image: '/images/carousel-1.png',
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import { fetchDashboardRoute } from '../api/session'
|
|||||||
import { useAuth } from '../auth/AuthProvider'
|
import { useAuth } from '../auth/AuthProvider'
|
||||||
import { spaPathFromCiUrl } from '../lib/ciSpaPaths'
|
import { spaPathFromCiUrl } from '../lib/ciSpaPaths'
|
||||||
|
|
||||||
/** Matches CodeIgniter `Views/user/login.php` (JWT via `/api/v1/auth/login`). */
|
|
||||||
export function LoginPage() {
|
export function LoginPage() {
|
||||||
const { login } = useAuth()
|
const { login } = useAuth()
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ function formatUsPhone(input: string): string {
|
|||||||
return `${raw.slice(0, 3)}-${raw.slice(3, 6)}-${raw.slice(6)}`
|
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() {
|
export function RegisterPage() {
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
|
|
||||||
|
|||||||
@@ -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,60 +1,59 @@
|
|||||||
import { useMemo } from 'react'
|
import { useMemo } from 'react'
|
||||||
import { Link } from 'react-router-dom'
|
import { Link } from 'react-router-dom'
|
||||||
import { ciRouteMeta } from '../lib/ciRouteMeta.generated'
|
import { viewRouteMeta } from '../lib/viewRouteMeta.generated'
|
||||||
import { ciRegistryKeyToAppPath } from '../lib/ciRouteLookup'
|
import { registryKeyToAppPath } from '../lib/viewRouteLookup'
|
||||||
|
|
||||||
/** Browse every CodeIgniter view file mapped under `/app/…` (parity placeholders unless a dedicated route exists). */
|
export function ViewRouteSitemapPage() {
|
||||||
export function CiSitemapPage() {
|
const grouped = useMemo(() => {
|
||||||
const grouped = useMemo(() => {
|
const groups = new Map<string, { key: string; title: string }[]>()
|
||||||
const g = new Map<string, { key: string; title: string }[]>()
|
for (const key of Object.keys(viewRouteMeta).sort()) {
|
||||||
for (const key of Object.keys(ciRouteMeta).sort()) {
|
const top = key.includes('/') ? key.slice(0, key.indexOf('/')) : key
|
||||||
const top = key.includes('/') ? key.slice(0, key.indexOf('/')) : key
|
const title = viewRouteMeta[key]?.title ?? key
|
||||||
const title = ciRouteMeta[key]?.title ?? key
|
const list = groups.get(top) ?? []
|
||||||
const list = g.get(top) ?? []
|
list.push({ key, title })
|
||||||
list.push({ key, title })
|
groups.set(top, list)
|
||||||
g.set(top, list)
|
}
|
||||||
}
|
return [...groups.entries()].sort(([a], [b]) => a.localeCompare(b))
|
||||||
return [...g.entries()].sort(([a], [b]) => a.localeCompare(b))
|
}, [])
|
||||||
}, [])
|
|
||||||
|
return (
|
||||||
return (
|
<div>
|
||||||
<div>
|
<nav aria-label="breadcrumb">
|
||||||
<nav aria-label="breadcrumb">
|
<ol className="breadcrumb">
|
||||||
<ol className="breadcrumb">
|
<li className="breadcrumb-item">
|
||||||
<li className="breadcrumb-item">
|
<Link to="/app/home">Home</Link>
|
||||||
<Link to="/app/home">Home</Link>
|
</li>
|
||||||
</li>
|
<li className="breadcrumb-item active" aria-current="page">
|
||||||
<li className="breadcrumb-item active" aria-current="page">
|
View routes
|
||||||
CI views
|
</li>
|
||||||
</li>
|
</ol>
|
||||||
</ol>
|
</nav>
|
||||||
</nav>
|
|
||||||
|
<p className="text-muted small mb-4">
|
||||||
<p className="text-muted small mb-4">
|
Generated from discovered PHP view sources. Each link opens the mapped route under{' '}
|
||||||
Generated from <code>app_codeigniter/app/Views/**/*.php</code>. Each link opens the parity
|
<code>/app/…</code>; unimplemented screens use the section placeholder with the matching
|
||||||
route under <code>/app/…</code>; unimplemented screens use the section placeholder with the
|
source view path. Regenerate: <code>npm run gen:view-meta</code>.
|
||||||
matching view path. Regenerate: <code>npm run gen:ci-meta</code>.
|
</p>
|
||||||
</p>
|
|
||||||
|
<div className="row g-4">
|
||||||
<div className="row g-4">
|
{grouped.map(([section, items]) => (
|
||||||
{grouped.map(([section, items]) => (
|
<div key={section} className="col-12 col-md-6 col-xl-4">
|
||||||
<div key={section} className="col-12 col-md-6 col-xl-4">
|
<div className="border rounded bg-white shadow-sm">
|
||||||
<div className="border rounded bg-white shadow-sm">
|
<div className="px-3 py-2 border-bottom small fw-semibold text-muted">{section}</div>
|
||||||
<div className="px-3 py-2 border-bottom small fw-semibold text-muted">{section}</div>
|
<ul className="list-unstyled mb-0 px-2 py-2" style={{ maxHeight: 280, overflow: 'auto' }}>
|
||||||
<ul className="list-unstyled mb-0 px-2 py-2" style={{ maxHeight: 280, overflow: 'auto' }}>
|
{items.map(({ key, title }) => (
|
||||||
{items.map(({ key, title }) => (
|
<li key={key} className="small py-1">
|
||||||
<li key={key} className="small py-1">
|
<Link to={registryKeyToAppPath(key)}>{title}</Link>
|
||||||
<Link to={ciRegistryKeyToAppPath(key)}>{title}</Link>
|
<div className="text-muted" style={{ fontSize: '0.75rem' }}>
|
||||||
<div className="text-muted" style={{ fontSize: '0.75rem' }}>
|
<code>{key.replace(/\//g, ' / ')}</code>
|
||||||
<code>{key.replace(/\//g, ' / ')}</code>
|
</div>
|
||||||
</div>
|
</li>
|
||||||
</li>
|
))}
|
||||||
))}
|
</ul>
|
||||||
</ul>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
))}
|
||||||
))}
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
)
|
||||||
)
|
}
|
||||||
}
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
/* Mirrors CodeIgniter `layout/email_layout.php` — scoped for admin preview only */
|
|
||||||
.email-preview-root {
|
.email-preview-root {
|
||||||
font-family: Arial, sans-serif;
|
font-family: Arial, sans-serif;
|
||||||
background-color: #f9f9f9;
|
background-color: #f9f9f9;
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export function EmailTemplatePreviewPage() {
|
|||||||
<h2 className="h5 mb-0">{entry.title}</h2>
|
<h2 className="h5 mb-0">{entry.title}</h2>
|
||||||
</div>
|
</div>
|
||||||
<p className="small text-muted mb-3">
|
<p className="small text-muted mb-3">
|
||||||
CI: <code>{entry.ciView}</code>
|
Source template: <code>{entry.sourceTemplatePath}</code>
|
||||||
</p>
|
</p>
|
||||||
<EmailPreviewLayout>{entry.render()}</EmailPreviewLayout>
|
<EmailPreviewLayout>{entry.render()}</EmailPreviewLayout>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ export function EmailTemplatesIndexPage() {
|
|||||||
<div className="container-fluid py-3">
|
<div className="container-fluid py-3">
|
||||||
<h2 className="h4 mb-3">Email templates (preview)</h2>
|
<h2 className="h4 mb-3">Email templates (preview)</h2>
|
||||||
<p className="text-muted small mb-4">
|
<p className="text-muted small mb-4">
|
||||||
React previews matching CodeIgniter <code>Views/emails/*.php</code>. Laravel should render the same HTML for
|
React previews matching the current PHP email templates. Laravel should render the same HTML
|
||||||
outgoing mail; this UI is for QA and copy review.
|
for outgoing mail; this UI is for QA and copy review.
|
||||||
</p>
|
</p>
|
||||||
<div className="mb-3">
|
<div className="mb-3">
|
||||||
<Link to="/app/administrator/parent-email-extractor" className="btn btn-outline-primary btn-sm">
|
<Link to="/app/administrator/parent-email-extractor" className="btn btn-outline-primary btn-sm">
|
||||||
@@ -21,7 +21,7 @@ export function EmailTemplatesIndexPage() {
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Template</th>
|
<th>Template</th>
|
||||||
<th>CI view</th>
|
<th>Source template</th>
|
||||||
<th />
|
<th />
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -32,10 +32,12 @@ export function EmailTemplatesIndexPage() {
|
|||||||
<tr key={slug}>
|
<tr key={slug}>
|
||||||
<td>{row.title}</td>
|
<td>{row.title}</td>
|
||||||
<td>
|
<td>
|
||||||
<code className="small">{row.ciView}</code>
|
<code className="small">{row.sourceTemplatePath}</code>
|
||||||
</td>
|
</td>
|
||||||
<td className="text-end">
|
<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
|
Preview
|
||||||
</Link>
|
</Link>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -71,164 +71,164 @@ export type EmailTemplateSlug =
|
|||||||
|
|
||||||
export type RegistryEntry = {
|
export type RegistryEntry = {
|
||||||
title: string
|
title: string
|
||||||
ciView: string
|
sourceTemplatePath: string
|
||||||
render: () => JSX.Element
|
render: () => JSX.Element
|
||||||
}
|
}
|
||||||
|
|
||||||
export const EMAIL_TEMPLATE_REGISTRY: Record<EmailTemplateSlug, RegistryEntry> = {
|
export const EMAIL_TEMPLATE_REGISTRY: Record<EmailTemplateSlug, RegistryEntry> = {
|
||||||
'final-warning': {
|
'final-warning': {
|
||||||
title: 'Final attendance warning',
|
title: 'Final attendance warning',
|
||||||
ciView: 'app/Views/emails/final_warning.php',
|
sourceTemplatePath: 'emails/final_warning.php',
|
||||||
render: () => <FinalWarningBody />,
|
render: () => <FinalWarningBody />,
|
||||||
},
|
},
|
||||||
'follow-up': {
|
'follow-up': {
|
||||||
title: 'Attendance follow-up',
|
title: 'Attendance follow-up',
|
||||||
ciView: 'app/Views/emails/follow_up.php',
|
sourceTemplatePath: 'emails/follow_up.php',
|
||||||
render: () => <FollowUpBody />,
|
render: () => <FollowUpBody />,
|
||||||
},
|
},
|
||||||
dismissal: {
|
dismissal: {
|
||||||
title: 'Dismissal (absences)',
|
title: 'Dismissal (absences)',
|
||||||
ciView: 'app/Views/emails/dismissal.php',
|
sourceTemplatePath: 'emails/dismissal.php',
|
||||||
render: () => <DismissalBody />,
|
render: () => <DismissalBody />,
|
||||||
},
|
},
|
||||||
'parent-attendance-admin': {
|
'parent-attendance-admin': {
|
||||||
title: 'Parent attendance — admin notification',
|
title: 'Parent attendance — admin notification',
|
||||||
ciView: 'app/Views/emails/parent_attendance_admin.php',
|
sourceTemplatePath: 'emails/parent_attendance_admin.php',
|
||||||
render: () => <ParentAttendanceAdminBody />,
|
render: () => <ParentAttendanceAdminBody />,
|
||||||
},
|
},
|
||||||
'parent-attendance-parent': {
|
'parent-attendance-parent': {
|
||||||
title: 'Parent attendance — confirmation to parent',
|
title: 'Parent attendance — confirmation to parent',
|
||||||
ciView: 'app/Views/emails/parent_attendance_parent.php',
|
sourceTemplatePath: 'emails/parent_attendance_parent.php',
|
||||||
render: () => <ParentAttendanceParentBody />,
|
render: () => <ParentAttendanceParentBody />,
|
||||||
},
|
},
|
||||||
'below-sixty-performance': {
|
'below-sixty-performance': {
|
||||||
title: 'Below 60 performance',
|
title: 'Below 60 performance',
|
||||||
ciView: 'app/Views/emails/below_sixty_performance.php',
|
sourceTemplatePath: 'emails/below_sixty_performance.php',
|
||||||
render: () => <BelowSixtyPerformanceBody />,
|
render: () => <BelowSixtyPerformanceBody />,
|
||||||
},
|
},
|
||||||
'payment-receipt': {
|
'payment-receipt': {
|
||||||
title: 'Payment receipt',
|
title: 'Payment receipt',
|
||||||
ciView: 'app/Views/emails/payment_receipt.php',
|
sourceTemplatePath: 'emails/payment_receipt.php',
|
||||||
render: () => <PaymentReceiptBody />,
|
render: () => <PaymentReceiptBody />,
|
||||||
},
|
},
|
||||||
'extra-charge-notice': {
|
'extra-charge-notice': {
|
||||||
title: 'Extra charge notice',
|
title: 'Extra charge notice',
|
||||||
ciView: 'app/Views/emails/extra_charge_notice.php',
|
sourceTemplatePath: 'emails/extra_charge_notice.php',
|
||||||
render: () => <ExtraChargeNoticeBody />,
|
render: () => <ExtraChargeNoticeBody />,
|
||||||
},
|
},
|
||||||
'reset-password': {
|
'reset-password': {
|
||||||
title: 'Reset password',
|
title: 'Reset password',
|
||||||
ciView: 'app/Views/emails/reset_password.php',
|
sourceTemplatePath: 'emails/reset_password.php',
|
||||||
render: () => <ResetPasswordBody />,
|
render: () => <ResetPasswordBody />,
|
||||||
},
|
},
|
||||||
'welcome-parent': {
|
'welcome-parent': {
|
||||||
title: 'Welcome — parent activation',
|
title: 'Welcome — parent activation',
|
||||||
ciView: 'app/Views/emails/welcome_parent.php',
|
sourceTemplatePath: 'emails/welcome_parent.php',
|
||||||
render: () => <WelcomeParentBody />,
|
render: () => <WelcomeParentBody />,
|
||||||
},
|
},
|
||||||
'welcome-staff': {
|
'welcome-staff': {
|
||||||
title: 'Welcome — staff activation',
|
title: 'Welcome — staff activation',
|
||||||
ciView: 'app/Views/emails/welcome_staff.php',
|
sourceTemplatePath: 'emails/welcome_staff.php',
|
||||||
render: () => <WelcomeStaffBody />,
|
render: () => <WelcomeStaffBody />,
|
||||||
},
|
},
|
||||||
'welcome-user': {
|
'welcome-user': {
|
||||||
title: 'Welcome — generic user',
|
title: 'Welcome — generic user',
|
||||||
ciView: 'app/Views/emails/welcome_user.php',
|
sourceTemplatePath: 'emails/welcome_user.php',
|
||||||
render: () => <WelcomeUserBody />,
|
render: () => <WelcomeUserBody />,
|
||||||
},
|
},
|
||||||
'student-removed': {
|
'student-removed': {
|
||||||
title: 'Student removed',
|
title: 'Student removed',
|
||||||
ciView: 'app/Views/emails/student_removed.php',
|
sourceTemplatePath: 'emails/student_removed.php',
|
||||||
render: () => <StudentRemovedBody />,
|
render: () => <StudentRemovedBody />,
|
||||||
},
|
},
|
||||||
'support-new-account': {
|
'support-new-account': {
|
||||||
title: 'Support — new account alert',
|
title: 'Support — new account alert',
|
||||||
ciView: 'app/Views/emails/support_new_account.php',
|
sourceTemplatePath: 'emails/support_new_account.php',
|
||||||
render: () => <SupportNewAccountBody />,
|
render: () => <SupportNewAccountBody />,
|
||||||
},
|
},
|
||||||
'admin-student-registered': {
|
'admin-student-registered': {
|
||||||
title: 'Admin — student registered',
|
title: 'Admin — student registered',
|
||||||
ciView: 'app/Views/emails/admin_student_registered.php',
|
sourceTemplatePath: 'emails/admin_student_registered.php',
|
||||||
render: () => <AdminStudentRegisteredBody />,
|
render: () => <AdminStudentRegisteredBody />,
|
||||||
},
|
},
|
||||||
'status-admission-review': {
|
'status-admission-review': {
|
||||||
title: 'Status — admission under review',
|
title: 'Status — admission under review',
|
||||||
ciView: 'app/Views/emails/status_admission_review.php',
|
sourceTemplatePath: 'emails/status_admission_review.php',
|
||||||
render: () => <StatusAdmissionReviewBody />,
|
render: () => <StatusAdmissionReviewBody />,
|
||||||
},
|
},
|
||||||
'status-denied': {
|
'status-denied': {
|
||||||
title: 'Status — admission denied',
|
title: 'Status — admission denied',
|
||||||
ciView: 'app/Views/emails/status_denied.php',
|
sourceTemplatePath: 'emails/status_denied.php',
|
||||||
render: () => <StatusDeniedBody />,
|
render: () => <StatusDeniedBody />,
|
||||||
},
|
},
|
||||||
'status-enrolled': {
|
'status-enrolled': {
|
||||||
title: 'Status — enrolled',
|
title: 'Status — enrolled',
|
||||||
ciView: 'app/Views/emails/status_enrolled.php',
|
sourceTemplatePath: 'emails/status_enrolled.php',
|
||||||
render: () => <StatusEnrolledBody />,
|
render: () => <StatusEnrolledBody />,
|
||||||
},
|
},
|
||||||
'status-not-enrolled': {
|
'status-not-enrolled': {
|
||||||
title: 'Status — not enrolled',
|
title: 'Status — not enrolled',
|
||||||
ciView: 'app/Views/emails/status_not_enrolled.php',
|
sourceTemplatePath: 'emails/status_not_enrolled.php',
|
||||||
render: () => <StatusNotEnrolledBody />,
|
render: () => <StatusNotEnrolledBody />,
|
||||||
},
|
},
|
||||||
'status-payment-pending': {
|
'status-payment-pending': {
|
||||||
title: 'Status — payment pending',
|
title: 'Status — payment pending',
|
||||||
ciView: 'app/Views/emails/status_payment_pending.php',
|
sourceTemplatePath: 'emails/status_payment_pending.php',
|
||||||
render: () => <StatusPaymentPendingBody />,
|
render: () => <StatusPaymentPendingBody />,
|
||||||
},
|
},
|
||||||
'status-refund-pending': {
|
'status-refund-pending': {
|
||||||
title: 'Status — refund pending',
|
title: 'Status — refund pending',
|
||||||
ciView: 'app/Views/emails/status_refund_pending.php',
|
sourceTemplatePath: 'emails/status_refund_pending.php',
|
||||||
render: () => <StatusRefundPendingBody />,
|
render: () => <StatusRefundPendingBody />,
|
||||||
},
|
},
|
||||||
'status-waitlist': {
|
'status-waitlist': {
|
||||||
title: 'Status — waitlist',
|
title: 'Status — waitlist',
|
||||||
ciView: 'app/Views/emails/status_waitlist.php',
|
sourceTemplatePath: 'emails/status_waitlist.php',
|
||||||
render: () => <StatusWaitlistBody />,
|
render: () => <StatusWaitlistBody />,
|
||||||
},
|
},
|
||||||
'status-withdraw-review': {
|
'status-withdraw-review': {
|
||||||
title: 'Status — withdraw under review',
|
title: 'Status — withdraw under review',
|
||||||
ciView: 'app/Views/emails/status_withdraw_review.php',
|
sourceTemplatePath: 'emails/status_withdraw_review.php',
|
||||||
render: () => <StatusWithdrawReviewBody />,
|
render: () => <StatusWithdrawReviewBody />,
|
||||||
},
|
},
|
||||||
'status-withdrawn': {
|
'status-withdrawn': {
|
||||||
title: 'Status — withdrawn',
|
title: 'Status — withdrawn',
|
||||||
ciView: 'app/Views/emails/status_withdrawn.php',
|
sourceTemplatePath: 'emails/status_withdrawn.php',
|
||||||
render: () => <StatusWithdrawnBody />,
|
render: () => <StatusWithdrawnBody />,
|
||||||
},
|
},
|
||||||
'calendar-notification': {
|
'calendar-notification': {
|
||||||
title: 'Calendar notification',
|
title: 'Calendar notification',
|
||||||
ciView: 'app/Views/emails/calendar_notification.php',
|
sourceTemplatePath: 'emails/calendar_notification.php',
|
||||||
render: () => <CalendarNotificationBody />,
|
render: () => <CalendarNotificationBody />,
|
||||||
},
|
},
|
||||||
'event-broadcast': {
|
'event-broadcast': {
|
||||||
title: 'Event broadcast',
|
title: 'Event broadcast',
|
||||||
ciView: 'app/Views/emails/event_broadcast.php',
|
sourceTemplatePath: 'emails/event_broadcast.php',
|
||||||
render: () => <EventBroadcastBody />,
|
render: () => <EventBroadcastBody />,
|
||||||
},
|
},
|
||||||
'custom-html': {
|
'custom-html': {
|
||||||
title: 'Custom HTML body',
|
title: 'Custom HTML body',
|
||||||
ciView: 'app/Views/emails/custom_html.php',
|
sourceTemplatePath: 'emails/custom_html.php',
|
||||||
render: () => <CustomHtmlBody />,
|
render: () => <CustomHtmlBody />,
|
||||||
},
|
},
|
||||||
'wrap-layout-sample': {
|
'wrap-layout-sample': {
|
||||||
title: 'Wrap layout ($body_html)',
|
title: 'Wrap layout ($body_html)',
|
||||||
ciView: 'app/Views/emails/_wrap_layout.php',
|
sourceTemplatePath: 'emails/_wrap_layout.php',
|
||||||
render: () => <WrapLayoutSampleBody />,
|
render: () => <WrapLayoutSampleBody />,
|
||||||
},
|
},
|
||||||
'broadcast-wrapper-sample': {
|
'broadcast-wrapper-sample': {
|
||||||
title: 'Broadcast wrapper ($content)',
|
title: 'Broadcast wrapper ($content)',
|
||||||
ciView: 'app/Views/emails/broadcast_wrapper.php',
|
sourceTemplatePath: 'emails/broadcast_wrapper.php',
|
||||||
render: () => <BroadcastWrapperSampleBody />,
|
render: () => <BroadcastWrapperSampleBody />,
|
||||||
},
|
},
|
||||||
'whatsapp-invite': {
|
'whatsapp-invite': {
|
||||||
title: 'WhatsApp invite',
|
title: 'WhatsApp invite',
|
||||||
ciView: 'app/Views/emails/whatsapp_invite.php',
|
sourceTemplatePath: 'emails/whatsapp_invite.php',
|
||||||
render: () => <WhatsAppInviteBody />,
|
render: () => <WhatsAppInviteBody />,
|
||||||
},
|
},
|
||||||
'whatsapp-group-invitation': {
|
'whatsapp-group-invitation': {
|
||||||
title: 'WhatsApp group invitation (draft text)',
|
title: 'WhatsApp group invitation (draft text)',
|
||||||
ciView: 'app/Views/emails/whatsapp_group_invitation.php',
|
sourceTemplatePath: 'emails/whatsapp_group_invitation.php',
|
||||||
render: () => <WhatsAppGroupInvitationDraftBody />,
|
render: () => <WhatsAppGroupInvitationDraftBody />,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Link } from 'react-router-dom'
|
import { Link } from 'react-router-dom'
|
||||||
|
|
||||||
/** Port of CodeIgniter `Views/errors/access_denied.php`. */
|
|
||||||
export function AccessDeniedPage() {
|
export function AccessDeniedPage() {
|
||||||
return (
|
return (
|
||||||
<div className="container mt-5">
|
<div className="container mt-5">
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { Link } from 'react-router-dom'
|
import { Link } from 'react-router-dom'
|
||||||
|
|
||||||
/** Port of CodeIgniter `Views/errors/invalid_token.php` (registration token invalid/expired). */
|
|
||||||
export function InvalidTokenPage() {
|
export function InvalidTokenPage() {
|
||||||
return (
|
return (
|
||||||
<div className="registration-form container mt-5 mb-5">
|
<div className="registration-form container mt-5 mb-5">
|
||||||
|
|||||||
@@ -1,9 +1,5 @@
|
|||||||
import { useEffect, useMemo, useState } from 'react'
|
import { useEffect, useMemo, useState } from 'react'
|
||||||
|
|
||||||
/**
|
|
||||||
* Vendor / retailor UX from CodeIgniter `expenses/create.php` and `edit.php`
|
|
||||||
* (dropdown + Other text field).
|
|
||||||
*/
|
|
||||||
export function ExpenseVendorFields({
|
export function ExpenseVendorFields({
|
||||||
retailors,
|
retailors,
|
||||||
initialRetailor,
|
initialRetailor,
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
import type { ReactNode } from 'react'
|
import type { ReactNode } from 'react'
|
||||||
|
|
||||||
export type ParentParitySpec = {
|
export type ParentParitySpec = {
|
||||||
title: string
|
title: string
|
||||||
/** File name under `app/Views/parent/` (e.g. `calendar.php`). */
|
/** File name under `app/Views/parent/` (e.g. `calendar.php`). */
|
||||||
ciViewFile: string
|
ciViewFile: string
|
||||||
/** Example CodeIgniter URL paths (with leading slash). */
|
legacyCiRoutes?: string[]
|
||||||
legacyCiRoutes?: string[]
|
}
|
||||||
}
|
|
||||||
|
|
||||||
type ShellProps = ParentParitySpec & {
|
type ShellProps = ParentParitySpec & {
|
||||||
children?: ReactNode
|
children?: ReactNode
|
||||||
fullWidth?: boolean
|
fullWidth?: boolean
|
||||||
@@ -20,12 +19,12 @@ export function ParentParityShell({
|
|||||||
}: ShellProps) {
|
}: ShellProps) {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<div className="text-center mb-3">
|
<div className="text-center mb-3">
|
||||||
<h2 className="h4 text-success" style={{ fontFamily: 'Arial, sans-serif' }}>
|
<h2 className="h4 text-success" style={{ fontFamily: 'Arial, sans-serif' }}>
|
||||||
{title}
|
{title}
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="row g-3">
|
<div className="row g-3">
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,2 @@
|
|||||||
/** Barrel for CodeIgniter `Views/teacher/*` React parity screens. */
|
|
||||||
export * from './TeacherCorePages'
|
export * from './TeacherCorePages'
|
||||||
export * from './TeacherRestPages'
|
export * from './TeacherRestPages'
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
/* Mirrors app_codeigniter/public/assets/css/register-form.css for auth/register pages */
|
|
||||||
|
|
||||||
.ci-auth-bg {
|
.ci-auth-bg {
|
||||||
background-color: #deffe1;
|
background-color: #deffe1;
|
||||||
|
|||||||
Reference in New Issue
Block a user