Repository navigation
Bugfix Issue 522 MetricsDashboard Null Array Offset
PHP 8.x emits E_WARNING: Trying to access array offset on null when loading the
Metrics Dashboard (lib/results/metricsDashboard.php) for a test plan that has
no platforms AND no builds (or no active TC versions). The warning occurs on
every page load of the dashboard under this condition.
In lib/results/metricsDashboard.php, the getMetrics() function iterates over
accessible test plans. When a test plan has no platforms ($platformSet is null),
the else branch at line 240 is taken. This branch calls
$metricsMgr->getExecCountersByExecStatus() which returns null when:
-
helperBuildSQLExecCounters()returns null (plan without builds) -
$builds->idSetis null/empty (no active builds)
The original code at line 245 directly accessed the null return:
$mm[$key]['overall']['active'] = $mm[$key]['overall']['total'];Under PHP 8, accessing an array offset on null triggers E_WARNING.
Applied in commit d3200a115 (Aug 19, 2026) — note: this fix was bundled into
a larger feature commit ("feat: User Management + Role Management BFF APIs and
HTML pages"), not a standalone bugfix commit. Two guards added at lines 245-248:
-
is_array()guard — IfgetExecCountersByExecStatus()returns null or a non-array, replace with an empty array. -
isset()ternary — When reading$mm[$key]['overall']['total'], useisset()to safely default to 0 if the key is missing.
if (!is_array($mm[$key]['overall'])) {
$mm[$key]['overall'] = array();
}
$mm[$key]['overall']['active'] = isset($mm[$key]['overall']['total'])
? $mm[$key]['overall']['total'] : 0;-
lib/results/metricsDashboard.php(lines 245-248)
- Metrics Dashboard renders correctly for test plans with no builds (zero progress, no warnings).
- Metrics Dashboard renders correctly for test plans with builds and executed TCs (full data).
- Mixed scenarios (some plans with builds, some without) work correctly.
- Event Viewer shows no new Error/Warning entries from metricsDashboard.php.
- PHP syntax check (
php -l) passes on the modified file.
