Kiosk Reference Public

Module Research Notes

Evidence gathered from the current Kiosk module files — controllers, models, configs, and migrations — before writing these user guide pages.

Guide version: r1 Module version: 1.0.1 Updated: 2026-07-22 Estimated time: 3 min 1 views
Reference

Module Research Notes

Evidence gathered from the current module files before writing the user guide pages.

Slug: kioskVersion: 1.0.0Category: SecurityReviewed: 2026-07-11

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_analytics
  • Kiosk_biometrics
  • Kiosk_dashboard
  • Kiosk_manager - clock_action
  • Kiosk_monitoring
  • Kiosk_registration
  • Kiosk_scanface
  • Kiosk_scanfinger
  • Kiosk_scanqr
  • Kiosk_scanrfid
  • Kiosk_sessions
  • Kiosk_settings
  • Kiosk_timelogs

Jobs and schedules

  • Expire pending kiosk sessions (* * * * *) - Flips kiosk sessions to expired once their expires_at has passed.

Routes sampled

RouteTarget
kioskKiosk_manager/app
kiosk/authKiosk_manager/auth
kiosk/auth/check_accessKiosk_manager/check_access
kiosk/auth/status/(:any)Kiosk_manager/auth_status/$1
kiosk/qr_image/(:any)Kiosk_manager/qr_image/$1
kiosk/fingerprintsKiosk_manager/fingerprints
kiosk/fingerprints/saveKiosk_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_scanfingerKiosk_scanfinger/index
kiosk_scanfinger/(:any)Kiosk_scanfinger/$1
kiosk_scanfinger/(:any)/(:any)Kiosk_scanfinger/$1/$2
kiosk_scanfaceKiosk_scanface/index
kiosk_scanface/(:any)Kiosk_scanface/$1
kiosk_scanface/(:any)/(:any)Kiosk_scanface/$1/$2
kiosk_scanqrKiosk_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).
Was this guide helpful?

Report a content problem