Skip to content

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

TableHoldsSeeded rows in master
ts_dashboarddashboard_code, dashboard_name, dashboard_sort, dashboard_is_installed, modules_parentdashboard_general "DMS & Procurement" (installed), dashboard_dms, dashboard_procure, dashboard_cost "Cost Control & Budgeting" (installed)
ts_dashletdashboard_code, dashlet_code, dashlet_name, dashlet_sort, dashlet_is_installed12, see below
ts_dashlet_filterper person and dashlet: date_start, date_end, project_id, plus ts_dashlet_filter_cbs and ts_dashlet_filter_payment_statusthe cost dashlets' filters

The twelve seeded dashlets:

DashboardDashlet codeLabel
dashboard_generaldashlet_general_module_shortcutModule
dashboard_generaldashlet_general_simple_textSimple Text
dashboard_generaldashlet_general_rssRSS
dashboard_dmsdashlet_dms_notificationNotification
dashboard_dmsdashlet_dms_recent_docRecent Document
dashboard_dmsdashlet_dms_doclib_shortcutLibrary
dashboard_procuredashlet_procure_figureProcurement Document Figure Comparison
dashboard_procuredashlet_procure_funnelProcurement Funnel Diagram
dashboard_costdashlet_cost_cumulative_expenditureCumulative Contract Expenditure
dashboard_costdashlet_cost_monthly_expenditureMonthly Contract Expenditure
dashboard_costdashlet_cost_contract_utilisationContract Utilisation
dashboard_costdashlet_cost_budget_vs_expenditureBudget 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:

KeyEffect
dashboard_defaultwhich dashboard opens on login (default dashboard_general)
enable_refreshable_dashboard, enable_customizable_dashboard, enable_downloadable_dashboardthe dashboard-level buttons
enable_refreshable_dashlet, enable_filterable_dashlet, enable_draggable_dashlet, enable_resizable_dashletthe per-dashlet controls
enable_echart_color_accentchart theme
year_document_figure, year_sales_funnelper-user year filters, read by member.dashlet.php from a JSON preference

See inweb_config, dashboards.

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 in ts_dashlet, a branch in member_dashboard.inc.php, and, if it should also appear on the welcome page, a folder with config.xml.
  • Only dashboard_general is 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_dashboard reuses report column names. The privilege grid selects report_code, report_desc ... order by report_sort from ts_dashboard, so the table carries both naming schemes.

Instance differences

Checked on 2026-09-06.

InstanceDifference
JOTREAdds a ProcurementPOStatus dashlet folder.
Jadestone, Medco, TimasIdentical seeds, renderer and folders to master.