Module Research Notes
Evidence gathered from the current module files before writing the user guide pages.
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_contentForm_responses- index, save, upload_file, validate_file, check_recaptchaForms- 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_browseHidden_fields- index, modal_form, save, list_data, delete
Jobs and schedules
No scheduled module jobs were found.
Routes sampled
| Route | Target |
|---|---|
mcs/forms | Forms/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_fields | Hidden_fields/index |
mcs/hidden_fields/(:any) | Hidden_fields/$1 |
mcs/hidden_fields/(:any)/(:any) | Hidden_fields/$1/$2 |
forms/save | Form_responses/save |
forms/upload_file | Form_responses/upload_file |
forms/validate_file | Form_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.