# Admin Sidebar Modules – CI3 to CI4 Migration

Migration of all admin sidebar modules from CodeIgniter 3 to CodeIgniter 4. Business logic, UI, and DB schema unchanged; only framework structure and PHP 8.5 compatibility.

## Status Overview

| # | Module | Status | Controller | Routes | Views |
|---|--------|--------|------------|--------|-------|
| 1 | Dashboard | Done | Home | dashboard, dashboard_ajax_data, school_change | dashboardNew, dashboard_ajax_data |
| 2 | Prospects | Placeholder | Placeholder | prospects/* | under_migration |
| 3 | Registrations | Placeholder | Placeholder | enrollment/* | under_migration |
| 4 | Schools | Placeholder | Placeholder | schools/* | under_migration |
| 5 | Users | Placeholder | Placeholder | users/* | under_migration |
| 6 | Teachers | Placeholder | Placeholder | teachers/* | under_migration |
| 7 | Classrooms | Placeholder | Placeholder | classRooms/* | under_migration |
| 8 | Students | Placeholder | Placeholder | students/* | under_migration |
| 9 | Class Roster | Placeholder | Placeholder | classroster/* | under_migration |
| 10 | School Maint | Placeholder | Placeholder | activities/*, requests/* | under_migration |
| 11 | Internal Messaging | Placeholder | Placeholder | internalMessage/* | under_migration |
| 12 | Portal | Placeholder | Placeholder | portals/* | under_migration |
| 13 | Events | Placeholder | Placeholder | events/* | under_migration |
| 14 | Teacher Messages | **Done** | TeacherMessage | teacherMessage/* | adminTeacherMessageAnnouncementListing, viewTeacherMessage, teacherAdminReport, ajaxTeacherAdminReport |

## Implemented

### Base
- **AdminController** (`app/Controllers/Admin/AdminController.php`): Base for all admin modules. Provides `ensureAllowed()`, `ensureAdminOnly()`, `getTourInfo()`, `layoutView()`.
- **Placeholder** controller: Serves all non-migrated module URLs with layout + “Under migration” message.

### Teacher Messages (full)
- **Controller**: `App\Controllers\Admin\TeacherMessage` – index, viewData, deleteTeacherMessage, teacherAdminReport, ajaxTeacheradminReport.
- **Model**: `TeacherMessageModel` – showTeacherMessageListing, showTeacherMessageById, getTeachersFranchiseeData, getTeacherClassInfo, getStudentCount, getTeacherDailyReport, getMontessoriRecordCount, getTeacherMessageCount.
- **Views**: adminTeacherMessageAnnouncementListing, viewTeacherMessage (modal), teacherAdminReport, ajaxTeacherAdminReport.
- **URLs**: `admin/teacherMessage/index`, `admin/teacherMessage/teacherAdminReport`, POST viewData, deleteTeacherMessage, ajaxTeacheradminReport.

## Migration Pattern (per module)

1. **Routes**: Replace Placeholder routes with explicit routes for the module (get/post, segments).
2. **Controller**: New class extending `AdminController`, load same models, call `ensureAllowed()` or `ensureAdminOnly()` at start of each method, replicate CI3 method logic using `$this->request->getPost()`, `session()->get()`, etc.
3. **Models**: Add or extend CI4 models with methods ported from CI3 (use `$this->db->table()`, `session()` via `Services::session()` where needed).
4. **Views**: Copy from `cmmschoolold/application/views/admin/` to `app/Views/admin/`, replace:
   - `$this->load->view(...)` → `view(...)` or `view(..., $data)`
   - `base_url()` → `base_url()` (helper still used)
   - `$this->input->post()` → controller passes data; in views use variables set by controller
   - `$this->session->userdata()` → passed from controller or `session()->get()`
   - `$this->db` in views → move logic to controller/model
   - Escaping: use `esc()` for output.

## CI3 Source Reference

- Controllers: `cmmschoolold/application/controllers/admin/`
- Models: `cmmschoolold/application/models/`
- Views: `cmmschoolold/application/views/admin/`

## Next Modules to Migrate (suggested order)

1. **Events** – eventsData, addEvent, viewEvents, updateEvent, deleteEvent, getFilterData; views: eventcalendar, updateEvent, viewEvent.
2. **Internal Messaging** – index, compose, sent_items, description, reply, forward, delete_*; views in internalmessage/.
3. **Requests** / **Activities** – smaller CRUD + listing.
4. **Withdraws** / **Parent Concerns** – index, addEdit, ajax*.
5. **Class Roster** – class_list, roster*.
6. **Portals** – adminAnnouncement, programAnnouncement, newsLetter, documents, sendNotification + addEdit/delete.
7. **Schools**, **Users**, **Teachers**, **ClassRooms**, **Students**, **Prospects**, **Enrollment** – largest (many methods and views).
