--- /usr/share/zabbix/ui/include/classes/screens/CScreenProblem.php +++ /usr/share/zabbix/ui/include/classes/screens/CScreenProblem.php @@ -1125,7 +1125,15 @@ } } - $triggers_hosts = makeTriggersHostsList($triggers_hosts); + $problems_suppression_data = []; + $problems_list = isset($this->data['problems']) ? $this->data['problems'] : (isset($data['problems']) ? $data['problems'] : []); + + foreach ($problems_list as $problem) { + if (isset($problem['objectid'])) { + $problems_suppression_data[$problem['objectid']] = isset($problem['suppression_data']) ? $problem['suppression_data'] : []; + } + } + + $triggers_hosts = makeTriggersHostsList($triggers_hosts, $problems_suppression_data, []); $scripts = []; if ($triggers_hosts) { --- /usr/share/zabbix/ui/include/triggers.inc.php +++ /usr/share/zabbix/ui/include/triggers.inc.php @@ -1571,9 +1571,13 @@ /** * Make the list of hosts for each trigger. * - * @param array $triggers_hosts [ => [ => ['name' => , 'maintenance_status' => , 'maintenanceid' => , 'maintenance_type' => ], ...], ...] + * @param array $triggers_hosts [ => [ => ['name' => , 'maintenance_status' => , 'maintenanceid' => , 'maintenance_type' => ], ...], ...] + * @param array $problems_suppression_data Array of suppression data indexed by trigger ID. + * @param array $db_maintenances Array of maintenance data from API. + * + * @return array */ -function makeTriggersHostsList(array $triggers_hosts) { +function makeTriggersHostsList(array $triggers_hosts, array $problems_suppression_data = [], array $db_maintenances = []) { foreach ($triggers_hosts as $trigger_id => &$hosts) { $trigger_hosts = []; @@ -1583,10 +1587,28 @@ ->addClass(ZBX_STYLE_WORDBREAK); if ($host['maintenance_status'] == HOST_MAINTENANCE_STATUS_ON) { - $maintenance_icon = makeMaintenanceIcon($host['maintenance_type'], _('Maintenance'), - _('Maintenance with data collection') - ); - $host_name = (new CSpan([$host_name, $maintenance_icon]))->addClass(ZBX_STYLE_REL_CONTAINER); + $matched_maintenances = []; + + if (isset($problems_suppression_data[$trigger_id]) && !empty($problems_suppression_data[$trigger_id])) { + foreach ($problems_suppression_data[$trigger_id] as $supp) { + $m_name = !empty($supp['maintenance_name']) ? $supp['maintenance_name'] : _('Maintenance'); + $m_user = (isset($supp['username']) && $supp['maintenanceid'] == 0) ? "\n"._('By').': '.$supp['username'] : ''; + + $matched_maintenances[$m_name] = $m_name . $m_user; + } + } + + if ($matched_maintenances) { + $full_name = implode("\n", array_values($matched_maintenances)); + $full_desc = (count($matched_maintenances) > 1) ? _('Multiple maintenances active') : ''; + + $maintenance_icon = makeMaintenanceIcon( + $host['maintenance_type'], + $full_name, + $full_desc + ); + $host_name = (new CSpan([$host_name, $maintenance_icon]))->addClass(ZBX_STYLE_REL_CONTAINER); + } } if ($trigger_hosts) {