Forms Reference Public

Module Research Notes

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

Guide version: r1 Module version: 1.0.0 Updated: 2026-07-30 Estimated time: 3 min
You are viewing version r1 of this guide. View the current version
Module Research Notes

Forms

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

Slug: formsVersion: 1.0.0Category: ProductivityReviewed: 2026-07-11

Research Sources Inspected

Source path

modules/Forms

Feature flags marked true

  • Controllers
  • Models
  • Views
  • Permissions
  • Left Menu
  • Default Menu
  • Routes
  • System Logs

Evidence Summary

Manifest

module.json defines slug forms, version 1.0.0, category Productivity, and the module capability flags used in this guide.

Runtime surface

4 controller file(s), 20 view file(s), and 15 route mapping(s) were found.

Data surface

4 model file(s), 4 declared table(s), and 0 migration file(s) were found.

Operations surface

21 permission key(s), 0 job(s), 1 seeder(s), and 1 test file(s) were found.

Detailed File Evidence

Controllers and methods

  • Form_email_templates - index, modal_form, save, list_data, delete, view_form_email_template, save_content
  • Form_responses - index, save, upload_file, validate_file, check_recaptcha
  • Forms - index, modal_form, save, list_data, update_status, delete, embedded_code_modal_form, view, view_edit_forms, list_form_fields, field_modal_form, save_form_fields, delete_form_fields, preview_forms, sort_fields, view_browse
  • Hidden_fields - index, modal_form, save, list_data, delete

Jobs and schedules

No scheduled module jobs were found.

Routes sampled

RouteTarget
mcs/formsForms/index
mcs/forms/(:any)Forms/$1
mcs/forms/(:any)/(:any)Forms/$1/$2
mcs/forms/(:any)/(:any)/(:any)Forms/$1/$2/$3
mcs/forms_email_template/index/(:any)Form_email_templates/index/$1
mcs/forms_email_template/(:any)Form_email_templates/$1
mcs/forms_email_template/(:any)/(:any)Form_email_templates/$1/$2
mcs/hidden_fieldsHidden_fields/index
mcs/hidden_fields/(:any)Hidden_fields/$1
mcs/hidden_fields/(:any)/(:any)Hidden_fields/$1/$2
forms/saveForm_responses/save
forms/upload_fileForm_responses/upload_file
forms/validate_fileForm_responses/validate_file
forms/(:any)Form_responses/index/$1
forms/(:any)/(:any)Form_responses/$1/$2

README topics

  • What this module owns
  • URLs (unchanged from the legacy/core surface)
  • Permissions
  • Boundaries with core (deliberate)
  • Demo Seeder
  • Enable / verify
  • History

Operating Implications

  • Permission coverage is part of the module contract, so every workflow should be tested with a role-limited user and an administrator.
  • Seeders exist for sample or starter data; operators should know whether seeded records are demo-only or operational defaults.

Known Risks from the Manifest

  • Independent toggle: enablement is the module_forms active-setting (slug 'forms'). Controllers self-gate with with_module('forms'); the sidebar slice, permissions and default menu all key on module_forms. Forms is deliberately independent of module_marketing.
  • Shared core model: form fields are stored in the core custom_fields table via application/models/Custom_fields_model.php with related_to='form-{form_id}'. That model is shared with Leads/Team members and STAYS in core (loaded here via package paths) - it is intentionally NOT owned by this module.
  • API stays core: the read-only integration REST API (api/v1/forms, scope forms:read) and the end-user API (/v1/api/forms + uploads/responses) are served by core controllers under application/controllers/{api,v1/api}/marketing/ and routed from application/config/{api,v1_api.php}. They load this module's models via package paths. Relocating the API surface into the module is a clean follow-up.
  • Tables ship in the base install schema (no module migrations): forms, form_responses, form_email_templates, hidden_fields. File uploads on forms/form_responses use serialized files_data columns and the S3 migrator registry (application/libraries/S3_migrator.php) keys them under module 'forms' - unchanged.

Report a content problem