Module Research Notes
Evidence gathered from the current module files before writing the user guide pages.
Research Sources Inspected
Source path
modules/Kiosk
Feature flags marked true
- Controllers
- Models
- Views
- Language
- Permissions
- Left Menu
- Default Menu
- Routes
- Migrations
- Cron Jobs
- Helpers
Evidence Summary
Manifest
module.json defines slug kiosk, version 1.0.0, category Security, and the module capability flags used in this guide.
Runtime surface
13 controller file(s), 42 view file(s), and 50 route mapping(s) were found.
Data surface
9 model file(s), 8 declared table(s), and 3 migration file(s) were found.
Operations surface
6 permission key(s), 1 job(s), 0 seeder(s), and 1 test file(s) were found.
Detailed File Evidence
Controllers and methods
Kiosk_analyticsKiosk_biometricsKiosk_dashboardKiosk_manager- clock_actionKiosk_monitoringKiosk_registrationKiosk_scanfaceKiosk_scanfingerKiosk_scanqrKiosk_scanrfidKiosk_sessionsKiosk_settingsKiosk_timelogs
Jobs and schedules
- Expire pending kiosk sessions (* * * * *) - Flips kiosk sessions to expired once their expires_at has passed.
Routes sampled
| Route | Target |
|---|---|
kiosk | Kiosk_manager/app |
kiosk/auth | Kiosk_manager/auth |
kiosk/auth/check_access | Kiosk_manager/check_access |
kiosk/auth/status/(:any) | Kiosk_manager/auth_status/$1 |
kiosk/qr_image/(:any) | Kiosk_manager/qr_image/$1 |
kiosk/fingerprints | Kiosk_manager/fingerprints |
kiosk/fingerprints/save | Kiosk_manager/save_fingerprint |
kiosk/fingerprints/save/(:any) | Kiosk_manager/save_fingerprint/$1 |
kiosk/fingerprints/(:any) | Kiosk_manager/fingerprints/$1 |
kiosk/verify_fingerprint_code/(:any) | Kiosk_manager/verify_fingerprint_code/$1 |
kiosk/(:any) | Kiosk_manager/$1 |
kiosk/(:any)/(:any) | Kiosk_manager/$1/$2 |
kiosk_scanfinger | Kiosk_scanfinger/index |
kiosk_scanfinger/(:any) | Kiosk_scanfinger/$1 |
kiosk_scanfinger/(:any)/(:any) | Kiosk_scanfinger/$1/$2 |
kiosk_scanface | Kiosk_scanface/index |
kiosk_scanface/(:any) | Kiosk_scanface/$1 |
kiosk_scanface/(:any)/(:any) | Kiosk_scanface/$1/$2 |
kiosk_scanqr | Kiosk_scanqr/index |
kiosk_scanqr/(:any) | Kiosk_scanqr/$1 |
| 30 additional route(s) omitted for readability. | |
README topics
- Overview
- Purpose
- Who This Module Is For
- Problems This Module Solves
- Key Features
- How It Works in ERPat
- Common Use Cases
- User Roles and Access
- Permissions
- Related Modules
- Important Notes
- Data Handled by This Module
Operating Implications
- Permission coverage is part of the module contract, so every workflow should be tested with a role-limited user and an administrator.
- The module has migrations, so fresh installs and tenant databases need migration validation before go-live.
- The module has a public or portal-facing surface, so privacy review and logged-out testing are required.
- Scheduled jobs can change statuses, notifications, or summaries after users leave the screen; support should check cron status during troubleshooting.
Known Risks from the Manifest
- The public kiosk terminal (Kiosk_manager and the Kiosk_scan* controllers) is DELIBERATELY not gated on module_kiosk - the gate is commented out because it breaks CSRF handling and sessionless multi-tenant switching on kiosk endpoints. The terminal gates on the kiosk_enabled setting only. Do not re-enable the module gate without testing both.
- The eight kiosk tables (kiosk_sessions, kiosk_logs, kiosk_face_data, kiosk_rfid_data, kiosk_fingerprint_data, kiosk_qrcode_data, biometrics, biometric_enrollment_labels) predate this module and were historically provisioned out-of-band. The module migrations are additive and idempotent (CREATE TABLE IF NOT EXISTS + SHOW COLUMNS/SHOW INDEX guards) and the models keep their table_exists() guards.
- Attendance ingestion stays CORE-owned: live taps hand off via Attendance_model::log_time() (kiosk_helper::kiosk_process_clock_action) and offline imports via the core Attendance_logs batch pipeline. This module never computes attendance metrics.
- Core consumers load this module's Biometrics_model / Biometric_enrollment_label_model by name (application/controllers/Attendance_logs.php, Settings.php). Never rename these models.
- application/config/kiosk.php (kiosk version numbers) stays in core - module config files are not loadable via $this->config->load() (contract G2).