Dashboards and dashlets
The landing page after login. A dashboard is a named set of dashlets, small widgets that each query one thing: the routing inbox count, recent documents, a cost chart. Which dashboards exist, which dashlets they hold, who may see them and how they look are all data.
How this page was verified
Written from master on 2026-09-06 and compared with the big five the same day. No earlier page existed.
The registry
| Table | Holds | Seeded rows in master |
|---|---|---|
ts_dashboard | dashboard_code, dashboard_name, dashboard_sort, dashboard_is_installed, modules_parent | dashboard_general "DMS & Procurement" (installed), dashboard_dms, dashboard_procure, dashboard_cost "Cost Control & Budgeting" (installed) |
ts_dashlet | dashboard_code, dashlet_code, dashlet_name, dashlet_sort, dashlet_is_installed | 12, see below |
ts_dashlet_filter | per person and dashlet: date_start, date_end, project_id, plus ts_dashlet_filter_cbs and ts_dashlet_filter_payment_status | the cost dashlets' filters |
The twelve seeded dashlets:
| Dashboard | Dashlet code | Label |
|---|---|---|
dashboard_general | dashlet_general_module_shortcut | Module |
dashboard_general | dashlet_general_simple_text | Simple Text |
dashboard_general | dashlet_general_rss | RSS |
dashboard_dms | dashlet_dms_notification | Notification |
dashboard_dms | dashlet_dms_recent_doc | Recent Document |
dashboard_dms | dashlet_dms_doclib_shortcut | Library |
dashboard_procure | dashlet_procure_figure | Procurement Document Figure Comparison |
dashboard_procure | dashlet_procure_funnel | Procurement Funnel Diagram |
dashboard_cost | dashlet_cost_cumulative_expenditure | Cumulative Contract Expenditure |
dashboard_cost | dashlet_cost_monthly_expenditure | Monthly Contract Expenditure |
dashboard_cost | dashlet_cost_contract_utilisation | Contract Utilisation |
dashboard_cost | dashlet_cost_budget_vs_expenditure | Budget vs Expenditure |
On every QA database read on 2026-09-06 only dashboard_general is installed. The seeds are identical in all five forks.
How a dashboard renders
main.php?page=member&cmd=dashboard includes member_dashboard.inc.php. The template member_dashboard.htm lays out the installed dashlets of the chosen dashboard and loads each one over AJAX with getDashletContent=<dashlet_code>. The include answers those calls: it looks up the dashlet's dashboard, reads the person's filter from ts_dashlet_filter (getDashletFilter()), and branches per dashlet code. The cost dashlets join ts_dashlet_filter_cbs and ts_dashlet_filter_payment_status to scope their figures.
The visible behaviour is switched by config, read in the template:
| Key | Effect |
|---|---|
dashboard_default | which dashboard opens on login (default dashboard_general) |
enable_refreshable_dashboard, enable_customizable_dashboard, enable_downloadable_dashboard | the dashboard-level buttons |
enable_refreshable_dashlet, enable_filterable_dashlet, enable_draggable_dashlet, enable_resizable_dashlet | the per-dashlet controls |
enable_echart_color_accent | chart theme |
year_document_figure, year_sales_funnel | per-user year filters, read by member.dashlet.php from a JSON preference |
The dashlets/ folder
Eighteen folders under dashlets/, each a self-contained widget: a config.xml (id, title, url, idfile, pos, isconfigurable), a PHP file that runs the queries with its own Inweb_Template, and an .htm view. Examples: Notification (routing inbox counts), RecentDoc, Module, Rss, Simple, Procurement, DocumentsRegister, AssetRegister, Hse, GraphCpcf, Execution, GeneralActivities, and the cost charts (ContractExpediturePerMonth, CumulativeMonthlyContractExpenditure, ContractUtilisationPerAssetGroup, AssetExpediturePerMonth, AssetExpediturePerAssetGroup, CumulativeMonthlyAssetExpenditure).
These folders are what the older welcome page (member_home.inc.php, reached when cmd is not dashboard) discovers by scanning dashlets/*/config.xml. The registry-driven dashboard does not scan the folder; it branches on dashlet_code inside member_dashboard.inc.php. Both mechanisms are live, which is why a dashlet can exist as a folder and not as a registry row, or the other way round.
Privileges
Dashboards have their own privilege type, dashboard, on ts_privileges_resource, checked by havePrivilegesDashboardResource(). Admins grant it in Reference, Group Privileges, tab Dashboard (group_privileges.php?show=dashboard): resource groups against the installed dashboards. The admin group bypasses it. The mechanism is the same as Reporting, with priv_type set to dashboard.
Filters
Reference, Dashlet Filter (dashlet_filter.php) edits ts_dashlet_filter rows: a date range and a project per person and dashlet, and for the cost dashlets a CBS selection and a payment-status selection. The dashlet reads its own row when it loads.
Gotchas
- Two dashboard systems. The registry one (
cmd=dashboard) and the folder-scan one (the welcome page). Adding a dashlet needs a row ints_dashlet, a branch inmember_dashboard.inc.php, and, if it should also appear on the welcome page, a folder withconfig.xml. - Only
dashboard_generalis on in practice. The cost dashboard is seeded as installed but no QA site has it; its dashlets depend on the budget modules being installed too. ts_dashboardreuses report column names. The privilege grid selectsreport_code, report_desc ... order by report_sortfromts_dashboard, so the table carries both naming schemes.
Instance differences
Checked on 2026-09-06.
| Instance | Difference |
|---|---|
| JOTRE | Adds a ProcurementPOStatus dashlet folder. |
| Jadestone, Medco, Timas | Identical seeds, renderer and folders to master. |
Related
- Reporting: the sibling registry with the
reportprivilege type. - inweb_config: the flags.