function get_service_childs($serviceid, $soft = 0) { $childs = array(); $result = DBselect('SELECT sl.servicedownid' . ' FROM services_links sl' . ' WHERE sl.serviceupid=' . zbx_dbstr($serviceid) . ($soft ? '' : ' AND sl.soft=0')); while ($row = DBfetch($result)) { $childs[] = $row['servicedownid']; $childs = array_merge($childs, get_service_childs($row['servicedownid'])); } return $childs; }
// expand trigger descriptions $triggers = zbx_objectValues($parentServices, 'trigger'); $triggers = CMacrosResolverHelper::resolveTriggerNames($triggers); 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(array('output' => array('serviceid', 'name', 'algorithm'), 'selectTrigger' => array('triggerid', 'description', 'expression'), 'preservekeys' => true, 'sortfield' => array('name'))); if (isset($service)) { // unset unavailable parents $childServicesIds = get_service_childs($service['serviceid']); $childServicesIds[] = $service['serviceid']; foreach ($childServicesIds as $childServiceId) { unset($childServices[$childServiceId]); } $data = array('service' => $service); } else { $data = array(); } // expand trigger descriptions $triggers = zbx_objectValues($childServices, 'trigger'); $triggers = CMacrosResolverHelper::resolveTriggerNames($triggers); foreach ($childServices as $key => $childService) { $childServices[$key]['trigger'] = !empty($childService['trigger']) ? $triggers[$childService['trigger']['triggerid']]['description'] : '-'; } $data['db_cservices'] = $childServices;
function get_service_childs($serviceid, $soft = 0) { $childs = array(); $query = 'SELECT sl.servicedownid ' . ' FROM services_links sl ' . ' WHERE sl.serviceupid = ' . $serviceid . ($soft ? '' : ' AND sl.soft <> 1'); $res = DBSelect($query); while ($row = DBFetch($res)) { $childs[] = $row['servicedownid']; $childs = array_merge($childs, get_service_childs($row['servicedownid'])); } return $childs; }
//---------------------------------------------- <CHILD SERVICES LIST> -------------------------------------------- if (isset($_REQUEST['cservices'])) { if (isset($service)) { $service = get_service_by_serviceid($service['serviceid']); } // update date after ACTIONS show_table_header(S_IT_SERVICES_BIG); $form = new CForm(); $form->SetName("services"); if (isset($service)) { $form->AddVar("serviceid", $service['serviceid']); } $table = new CTableInfo(); $table->SetHeader(array(S_SERVICE, S_STATUS_CALCULATION, S_TRIGGER)); if (isset($service)) { $childs = get_service_childs($service['serviceid'], 1); $childs_str = implode(',', $childs); !empty($childs_str) ? $childs_str .= ',' : ''; $query = 'SELECT DISTINCT s.* ' . ' FROM services s ' . ' WHERE ' . DBin_node('s.serviceid') . ' AND (s.triggerid IS NULL OR ' . DBcondition('s.triggerid', $available_triggers) . ') ' . ' AND s.serviceid NOT IN (' . $childs_str . $service['serviceid'] . ') ' . ' ORDER BY s.sortorder,s.name'; } else { $query = 'SELECT DISTINCT s.* ' . ' FROM services s ' . ' WHERE ' . DBin_node('s.serviceid') . ' AND (s.triggerid IS NULL OR ' . DBcondition('s.triggerid', $available_triggers) . ') ' . ' ORDER BY s.sortorder,s.name'; } $db_services = DBselect($query); while ($db_service_data = DBfetch($db_services)) { $prefix = null; $trigger = "-"; $description = $db_service_data["name"]; if (isset($db_service_data["triggerid"])) { $trigger = expand_trigger_description($db_service_data["triggerid"]); } $description = new CLink($description, '#', 'action');