function get_service_children($serviceid, $soft = 0) { $children = []; $result = DBselect('SELECT sl.servicedownid' . ' FROM services_links sl' . ' WHERE sl.serviceupid=' . zbx_dbstr($serviceid) . ($soft ? '' : ' AND sl.soft=0')); while ($row = DBfetch($result)) { $children[] = $row['servicedownid']; $children = array_merge($children, get_service_children($row['servicedownid'])); } return $children; }
return (bool) $service['trigger']; }), 'trigger'); $triggers = CMacrosResolverHelper::resolveTriggerNames(zbx_toHash($triggers, 'triggerid')); foreach ($parentServices as $key => $parentService) { $parentServices[$key]['trigger'] = !empty($parentService['trigger']) ? $triggers[$parentService['trigger']['triggerid']]['description'] : ''; } $data['db_pservices'] = $parentServices; // render view $servicesView = new CView('configuration.services.parent.list', $data); $servicesView->render(); $servicesView->show(); } elseif (isset($_REQUEST['cservices'])) { $childServices = API::Service()->get(['output' => ['serviceid', 'name', 'algorithm'], 'selectTrigger' => ['triggerid', 'description', 'expression'], 'preservekeys' => true, 'sortfield' => ['name']]); if (isset($service)) { // unset unavailable parents $childServicesIds = get_service_children($service['serviceid']); $childServicesIds[] = $service['serviceid']; foreach ($childServicesIds as $childServiceId) { unset($childServices[$childServiceId]); } $data = ['service' => $service]; } else { $data = []; } // expand trigger descriptions $triggers = zbx_objectValues(array_filter($childServices, function ($service) { return (bool) $service['trigger']; }), 'trigger'); $triggers = CMacrosResolverHelper::resolveTriggerNames(zbx_toHash($triggers, 'triggerid')); foreach ($childServices as $key => $childService) { $childServices[$key]['trigger'] = !empty($childService['trigger']) ? $triggers[$childService['trigger']['triggerid']]['description'] : '';