/** * Mass update hosts * * @param _array $hosts multidimensional array with Hosts data * @param array $hosts['hosts'] Array of Host objects to update * @param string $hosts['fields']['host'] Host name. * @param array $hosts['fields']['groupids'] HostGroup IDs add Host to. * @param int $hosts['fields']['port'] Port. OPTIONAL * @param int $hosts['fields']['status'] Host Status. OPTIONAL * @param int $hosts['fields']['useip'] Use IP. OPTIONAL * @param string $hosts['fields']['dns'] DNS. OPTIONAL * @param string $hosts['fields']['ip'] IP. OPTIONAL * @param int $hosts['fields']['proxy_hostid'] Proxy Host ID. OPTIONAL * @param int $hosts['fields']['useipmi'] Use IPMI. OPTIONAL * @param string $hosts['fields']['ipmi_ip'] IPMAI IP. OPTIONAL * @param int $hosts['fields']['ipmi_port'] IPMI port. OPTIONAL * @param int $hosts['fields']['ipmi_authtype'] IPMI authentication type. OPTIONAL * @param int $hosts['fields']['ipmi_privilege'] IPMI privilege. OPTIONAL * @param string $hosts['fields']['ipmi_username'] IPMI username. OPTIONAL * @param string $hosts['fields']['ipmi_password'] IPMI password. OPTIONAL * @return boolean */ public static function massUpdate($data) { $transaction = false; $templates = zbx_toArray($data['templates']); $templateids = zbx_objectValues($templates, 'templateid'); try { $options = array('templateids' => $templateids, 'editable' => 1, 'output' => API_OUTPUT_EXTEND, 'preservekeys' => 1); $upd_templates = self::get($options); foreach ($templates as $tnum => $template) { if (!isset($upd_templates[$template['templateid']])) { self::exception(ZBX_API_ERROR_PERMISSIONS, S_NO_PERMISSION); } } // CHECK IF TEMPLATES HAVE AT LEAST 1 GROUP {{{ if (isset($data['groups']) && empty($data['groups'])) { self::exception(ZBX_API_ERROR_PARAMETERS, 'No groups for template'); } $data['groups'] = zbx_toArray($data['groups']); // }}} CHECK IF TEMPLATES HAVE AT LEAST 1 GROUP $transaction = self::BeginTransaction(__METHOD__); // UPDATE TEMPLATES PROPERTIES {{{ if (isset($data['host'])) { if (count($templates) > 1) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Cannot mass update template name'); } $cur_template = reset($templates); $options = array('filter' => array('host' => $cur_template['host']), 'output' => API_OUTPUT_SHORTEN, 'editable' => 1, 'nopermissions' => 1); $template_exists = self::get($options); $template_exist = reset($template_exists); if ($template_exist && $template_exist['templateid'] != $cur_template['templateid']) { self::exception(ZBX_API_ERROR_PARAMETERS, S_TEMPLATE . ' [ ' . $data['host'] . ' ] ' . S_ALREADY_EXISTS_SMALL); } //can't set the same name as existing host if (CHost::exists(array('host' => $cur_template['host']))) { self::exception(ZBX_API_ERROR_PARAMETERS, S_HOST . ' [ ' . $template['host'] . ' ] ' . S_ALREADY_EXISTS_SMALL); } } if (isset($data['host']) && !preg_match('/^' . ZBX_PREG_HOST_FORMAT . '$/i', $data['host'])) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Incorrect characters used for Hostname [ ' . $data['host'] . ' ]'); } $sql_set = array(); if (isset($data['host'])) { $sql_set[] = 'host=' . zbx_dbstr($data['host']); } if (!empty($sql_set)) { $sql = 'UPDATE hosts SET ' . implode(', ', $sql_set) . ' WHERE ' . DBcondition('hostid', $templateids); $result = DBexecute($sql); } // }}} UPDATE TEMPLATES PROPERTIES // UPDATE HOSTGROUPS LINKAGE {{{ if (isset($data['groups']) && !is_null($data['groups'])) { $template_groups = CHostGroup::get(array('hostids' => $templateids)); $template_groupids = zbx_objectValues($template_groups, 'groupid'); $new_groupids = zbx_objectValues($data['groups'], 'groupid'); $groups_to_add = array_diff($new_groupids, $template_groupids); if (!empty($groups_to_add)) { $result = self::massAdd(array('templates' => $templates, 'groups' => zbx_toObject($groups_to_add, 'groupid'))); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Can\'t add group'); } } $groupids_to_del = array_diff($template_groupids, $new_groupids); if (!empty($groupids_to_del)) { $result = self::massRemove(array('templateids' => $templateids, 'groupids' => $groupids_to_del)); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Can\'t remove group'); } } } // }}} UPDATE HOSTGROUPS LINKAGE $data['templates_clear'] = isset($data['templates_clear']) ? zbx_toArray($data['templates_clear']) : array(); $cleared_templateids = array(); foreach ($templateids as $templateid) { foreach ($data['templates_clear'] as $tpl) { $result = unlink_template($templateid, $tpl['templateid'], false); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Cannot unlink template [ ' . $tpl['templateid'] . ' ]'); } $cleared_templateids[] = $tpl['templateid']; } } // UPDATE TEMPLATE LINKAGE {{{ // firstly need to unlink all things, to correctly check circulars if (isset($data['hosts']) && !is_null($data['hosts'])) { $template_hosts = CHost::get(array('templateids' => $templateids, 'templated_hosts' => 1)); $template_hostids = zbx_objectValues($template_hosts, 'hostid'); $new_hostids = zbx_objectValues($data['hosts'], 'hostid'); $hosts_to_del = array_diff($template_hostids, $new_hostids); $hostids_to_del = array_diff($hosts_to_del, $cleared_templateids); if (!empty($hostids_to_del)) { $result = self::massRemove(array('hostids' => $hostids_to_del, 'templateids' => $templateids)); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Can\'t unlink template'); } } } if (isset($data['templates_link']) && !is_null($data['templates_link'])) { $template_templates = CTemplate::get(array('hostids' => $templateids)); $template_templateids = zbx_objectValues($template_templates, 'templateid'); $new_templateids = zbx_objectValues($data['templates_link'], 'templateid'); $templates_to_del = array_diff($template_templateids, $new_templateids); $templateids_to_del = array_diff($templates_to_del, $cleared_templateids); if (!empty($templateids_to_del)) { $result = self::massRemove(array('templateids' => $templateids, 'templateids_link' => $templateids_to_del)); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Can\'t unlink template'); } } } if (isset($data['hosts']) && !is_null($data['hosts'])) { $hosts_to_add = array_diff($new_hostids, $template_hostids); if (!empty($hosts_to_add)) { $result = self::massAdd(array('templates' => $templates, 'hosts' => $hosts_to_add)); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Can\'t link template'); } } } if (isset($data['templates_link']) && !is_null($data['templates_link'])) { $templates_to_add = array_diff($new_templateids, $template_templateids); if (!empty($templates_to_add)) { $result = self::massAdd(array('templates' => $templates, 'templates_link' => $templates_to_add)); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Can\'t link template'); } } } // }}} UPDATE TEMPLATE LINKAGE // UPDATE MACROS {{{ if (isset($data['macros']) && !is_null($data['macros'])) { $macrosToAdd = zbx_toHash($data['macros'], 'macro'); $templateMacros = CUserMacro::get(array('hostids' => $templateids, 'output' => API_OUTPUT_EXTEND)); $templateMacros = zbx_toHash($templateMacros, 'macro'); // Delete $macrosToDelete = array(); foreach ($templateMacros as $hmnum => $hmacro) { if (!isset($macrosToAdd[$hmacro['macro']])) { $macrosToDelete[] = $hmacro['macro']; } } // Update $macrosToUpdate = array(); foreach ($macrosToAdd as $nhmnum => $nhmacro) { if (isset($templateMacros[$nhmacro['macro']])) { $macrosToUpdate[] = $nhmacro; unset($macrosToAdd[$nhmnum]); } } //---- if (!empty($macrosToDelete)) { $result = self::massRemove(array('templateids' => $templateids, 'macros' => $macrosToDelete)); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Can\'t remove macro'); } } if (!empty($macrosToUpdate)) { $result = CUsermacro::massUpdate(array('templates' => $templates, 'macros' => $macrosToUpdate)); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Cannot update macro'); } } if (!empty($macrosToAdd)) { $result = self::massAdd(array('templates' => $templates, 'macros' => $macrosToAdd)); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Cannot add macro'); } } } // }}} UPDATE MACROS self::EndTransaction(true, __METHOD__); return array('templateids' => $templateids); } catch (APIException $e) { if ($transaction) { self::EndTransaction(false, __METHOD__); } $error = $e->getErrors(); $error = reset($error); self::setError(__METHOD__, $e->getCode(), $error); return false; } }
public static function parseMain($rules) { $triggers_for_dependencies = array(); try { if (isset($rules['host']['exist']) || isset($rules['host']['missed'])) { $xpath = new DOMXPath(self::$xml); $hosts = $xpath->query('hosts/host'); foreach ($hosts as $hnum => $host) { $host_db = self::mapXML2arr($host, XML_TAG_HOST); if (!isset($host_db['status'])) { $host_db['status'] = HOST_STATUS_TEMPLATE; } $current_host = $host_db['status'] == HOST_STATUS_TEMPLATE ? CTemplate::exists($host_db) : CHost::exists($host_db); if (!$current_host && !isset($rules['host']['missed'])) { info('Host [' . $host_db['host'] . '] skipped - user rule'); continue; // break if update nonexist } if ($current_host && !isset($rules['host']['exist'])) { info('Host [' . $host_db['host'] . '] skipped - user rule'); continue; // break if not update exist } if (isset($host_db['proxy_hostid'])) { $proxy_exists = CProxy::get(array('proxyids' => $host_db['proxy_hostid'])); if (empty($proxy_exists)) { $host_db['proxy_hostid'] = 0; } } if ($current_host) { $options = array('filter' => array('host' => $host_db['host']), 'output' => API_OUTPUT_EXTEND, 'editable' => 1); if ($host_db['status'] == HOST_STATUS_TEMPLATE) { $current_host = CTemplate::get($options); } else { $current_host = CHost::get($options); } if (empty($current_host)) { throw new APIException(1, 'No permission for host [' . $host_db['host'] . ']'); } else { $current_host = reset($current_host); } } // HOST GROUPS {{{ $groups = $xpath->query('groups/group', $host); $host_db['groups'] = array(); $groups_to_parse = array(); foreach ($groups as $gnum => $group) { $groups_to_parse[] = array('name' => $group->nodeValue); } if (empty($groups_to_parse)) { $groups_to_parse[] = array('name' => ZBX_DEFAULT_IMPORT_HOST_GROUP); } foreach ($groups_to_parse as $group) { $current_group = CHostGroup::exists($group); if ($current_group) { $options = array('filter' => $group, 'output' => API_OUTPUT_EXTEND, 'editable' => 1); $current_group = CHostGroup::get($options); if (empty($current_group)) { throw new APIException(1, 'No permissions for group ' . $group['name']); } $host_db['groups'][] = reset($current_group); } else { $result = CHostGroup::create($group); if (!$result) { throw new APIException(1, CHostGroup::resetErrors()); } $options = array('groupids' => $result['groupids'], 'output' => API_OUTPUT_EXTEND); $new_group = CHostgroup::get($options); $host_db['groups'][] = reset($new_group); } } // }}} HOST GROUPS // MACROS $macros = $xpath->query('macros/macro', $host); $host_db['macros'] = array(); if ($macros->length > 0) { foreach ($macros as $macro) { $host_db['macros'][] = self::mapXML2arr($macro, XML_TAG_MACRO); } } // }}} MACROS // TEMPLATES {{{ if (isset($rules['template']['exist'])) { $templates = $xpath->query('templates/template', $host); $host_db['templates'] = array(); foreach ($templates as $tnum => $template) { $options = array('filter' => array('host' => $template->nodeValue), 'output' => API_OUTPUT_EXTEND, 'editable' => 1); $current_template = CTemplate::get($options); if (empty($current_template)) { throw new APIException(1, 'No permission for Template [' . $template->nodeValue . ']'); } $current_template = reset($current_template); if (!$current_template && !isset($rules['template']['missed'])) { info('Template [' . $template->nodeValue . '] skipped - user rule'); continue; // break if update nonexist } if ($current_template && !isset($rules['template']['exist'])) { info('Template [' . $template->nodeValue . '] skipped - user rule'); continue; // break if not update exist } $host_db['templates'][] = $current_template; } } // }}} TEMPLATES // HOSTS if ($current_host && isset($rules['host']['exist'])) { if ($host_db['status'] == HOST_STATUS_TEMPLATE) { $host_db['templateid'] = $current_host['hostid']; $result = CTemplate::update($host_db); if (!$result) { throw new APIException(1, CTemplate::resetErrors()); } $options = array('templateids' => $result['templateids'], 'output' => API_OUTPUT_EXTEND); $current_host = CTemplate::get($options); } else { $host_db['hostid'] = $current_host['hostid']; $result = CHost::update($host_db); if (!$result) { throw new APIException(1, CHost::resetErrors()); } $options = array('hostids' => $result['hostids'], 'output' => API_OUTPUT_EXTEND); $current_host = CHost::get($options); } if ($current_host === false) { throw new APIException(1, $host_db['status'] == HOST_STATUS_TEMPLATE ? CTemplate::resetErrors() : CHost::resetErrors()); } } if (!$current_host && isset($rules['host']['missed'])) { if ($host_db['status'] == HOST_STATUS_TEMPLATE) { $result = CTemplate::create($host_db); if (!$result) { throw new APIException(1, CTemplate::resetErrors()); } $options = array('templateids' => $result['templateids'], 'output' => API_OUTPUT_EXTEND); $current_host = CTemplate::get($options); } else { $result = CHost::create($host_db); if (!$result) { throw new APIException(1, CHost::resetErrors()); } $options = array('hostids' => $result['hostids'], 'output' => API_OUTPUT_EXTEND); $current_host = CHost::get($options); } } $current_host = reset($current_host); // HOST PROFILES {{{ $profile_node = $xpath->query('host_profile/*', $host); if ($profile_node->length > 0) { $profile = array(); foreach ($profile_node as $num => $field) { $profile[$field->nodeName] = $field->nodeValue; } delete_host_profile($current_host['hostid']); add_host_profile($current_host['hostid'], $profile['devicetype'], $profile['name'], $profile['os'], $profile['serialno'], $profile['tag'], $profile['macaddress'], $profile['hardware'], $profile['software'], $profile['contact'], $profile['location'], $profile['notes']); } $profile_ext_node = $xpath->query('host_profiles_ext/*', $host); if ($profile_ext_node->length > 0) { $profile_ext = array(); foreach ($profile_ext_node as $num => $field) { $profile_ext[$field->nodeName] = $field->nodeValue; } delete_host_profile_ext($current_host['hostid']); add_host_profile_ext($current_host['hostid'], $profile_ext); } // }}} HOST PROFILES // ITEMS {{{ if (isset($rules['item']['exist']) || isset($rules['item']['missed'])) { $items = $xpath->query('items/item', $host); foreach ($items as $inum => $item) { $item_db = self::mapXML2arr($item, XML_TAG_ITEM); $item_db['hostid'] = $current_host['hostid']; if ($current_item = CItem::exists($item_db)) { $options = array('filter' => array('hostid' => $item_db['hostid'], 'key_' => $item_db['key_']), 'webitems' => 1, 'output' => API_OUTPUT_EXTEND, 'editable' => 1); $current_item = CItem::get($options); if (empty($current_item)) { throw new APIException(1, 'No permission for Item [' . $item_db['key_'] . ']'); } $current_item = reset($current_item); } if (!$current_item && !isset($rules['item']['missed'])) { info('Item [' . $item_db['key_'] . '] skipped - user rule'); continue; // break if not update exist } if ($current_item && !isset($rules['item']['exist'])) { info('Item [' . $item_db['key_'] . '] skipped - user rule'); continue; // break if not update exist } // ITEM APPLICATIONS {{{ $applications = $xpath->query('applications/application', $item); $item_applications = array(); $applications_to_add = array(); foreach ($applications as $application) { $application_db = array('name' => $application->nodeValue, 'hostid' => $current_host['hostid']); if ($current_application = CApplication::exists($application_db)) { $current_application = CApplication::get(array('filter' => $application_db, 'output' => API_OUTPUT_EXTEND)); if (empty($current_application)) { throw new APIException(1, 'No permission for Application [' . $application_db['name'] . ']'); } } if ($current_application) { $item_applications = array_merge($item_applications, $current_application); } else { $applications_to_add[] = $application_db; } } if (!empty($applications_to_add)) { $result = CApplication::create($applications_to_add); if (!$result) { throw new APIException(1, CApplication::resetErrors()); } $options = array('applicationids' => $result['applicationids'], 'output' => API_OUTPUT_EXTEND); $new_applications = CApplication::get($options); $item_applications = array_merge($item_applications, $new_applications); } // }}} ITEM APPLICATIONS if ($current_item && isset($rules['item']['exist'])) { $item_db['itemid'] = $current_item['itemid']; $result = CItem::update($item_db); if (!$result) { throw new APIException(1, CItem::resetErrors()); } $options = array('itemids' => $result['itemids'], 'webitems' => 1, 'output' => API_OUTPUT_EXTEND); $current_item = CItem::get($options); } if (!$current_item && isset($rules['item']['missed'])) { $result = CItem::create($item_db); if (!$result) { throw new APIException(1, CItem::resetErrors()); } $options = array('itemids' => $result['itemids'], 'webitems' => 1, 'output' => API_OUTPUT_EXTEND); $current_item = CItem::get($options); } $r = CApplication::massAdd(array('applications' => $item_applications, 'items' => $current_item)); if ($r === false) { throw new APIException(1, CApplication::resetErrors()); } } } // }}} ITEMS // TRIGGERS {{{ if (isset($rules['trigger']['exist']) || isset($rules['trigger']['missed'])) { $triggers = $xpath->query('triggers/trigger', $host); $triggers_to_add = array(); $triggers_to_upd = array(); foreach ($triggers as $trigger) { $trigger_db = self::mapXML2arr($trigger, XML_TAG_TRIGGER); $trigger_db['expression'] = str_replace('{{HOSTNAME}:', '{' . $host_db['host'] . ':', $trigger_db['expression']); $trigger_db['hostid'] = $current_host['hostid']; if ($current_trigger = CTrigger::exists($trigger_db)) { $ctriggers = CTrigger::get(array('filter' => array('description' => $trigger_db['description']), 'hostids' => $current_host['hostid'], 'output' => API_OUTPUT_EXTEND, 'editable' => 1)); $current_trigger = false; foreach ($ctriggers as $tnum => $ct) { $tmp_exp = explode_exp($ct['expression'], false); if (strcmp($trigger_db['expression'], $tmp_exp) == 0) { $current_trigger = $ct; break; } } if (!$current_trigger) { throw new APIException(1, 'No permission for Trigger [' . $trigger_db['description'] . ']'); } } if (!$current_trigger && !isset($rules['trigger']['missed'])) { info('Trigger [' . $trigger_db['description'] . '] skipped - user rule'); continue; // break if not update exist } if ($current_trigger && !isset($rules['trigger']['exist'])) { info('Trigger [' . $trigger_db['description'] . '] skipped - user rule'); continue; // break if not update exist } if ($current_trigger && isset($rules['trigger']['exist'])) { $trigger_db['triggerid'] = $current_trigger['triggerid']; $triggers_to_upd[] = $trigger_db; } if (!$current_trigger && isset($rules['trigger']['missed'])) { $triggers_to_add[] = $trigger_db; } } if (!empty($triggers_to_upd)) { $result = CTrigger::update($triggers_to_upd); if (!$result) { throw new APIException(1, CTrigger::resetErrors()); } $options = array('triggerids' => $result['triggerids'], 'output' => API_OUTPUT_EXTEND); $r = CTrigger::get($options); $triggers_for_dependencies = array_merge($triggers_for_dependencies, $r); } if (!empty($triggers_to_add)) { $result = CTrigger::create($triggers_to_add); if (!$result) { throw new APIException(1, CTrigger::resetErrors()); } $options = array('triggerids' => $result['triggerids'], 'output' => API_OUTPUT_EXTEND); $r = CTrigger::get($options); $triggers_for_dependencies = array_merge($triggers_for_dependencies, $r); } } // }}} TRIGGERS // GRAPHS {{{ if (isset($rules['graph']['exist']) || isset($rules['graph']['missed'])) { $graphs = $xpath->query('graphs/graph', $host); $graphs_to_add = array(); $graphs_to_upd = array(); foreach ($graphs as $gnum => $graph) { // GRAPH ITEMS {{{ $gitems = $xpath->query('graph_elements/graph_element', $graph); $graph_hostids = array(); $graph_items = array(); foreach ($gitems as $ginum => $gitem) { $gitem_db = self::mapXML2arr($gitem, XML_TAG_GRAPH_ELEMENT); $data = explode(':', $gitem_db['host_key_']); $gitem_host = array_shift($data); $gitem_db['host'] = $gitem_host == '{HOSTNAME}' ? $host_db['host'] : $gitem_host; $gitem_db['key_'] = implode(':', $data); if ($current_item = CItem::exists($gitem_db)) { $current_item = CItem::get(array('filter' => array('key_' => $gitem_db['key_']), 'webitems' => 1, 'host' => $gitem_db['host'], 'output' => API_OUTPUT_EXTEND, 'editable' => 1)); if (empty($current_item)) { throw new APIException(1, 'No permission for Item [' . $gitem_db['key_'] . ']'); } $current_item = reset($current_item); $graph_hostids[] = $current_item['hostid']; $gitem_db['itemid'] = $current_item['itemid']; $graph_items[] = $gitem_db; } else { throw new APIException(1, 'Item [' . $gitem_db['host_key_'] . '] does not exists'); } } // }}} GRAPH ITEMS $graph_db = self::mapXML2arr($graph, XML_TAG_GRAPH); $graph_db['hostids'] = $graph_hostids; if ($current_graph = CGraph::exists($graph_db)) { $current_graph = CGraph::get(array('filter' => array('name' => $graph_db['name']), 'hostids' => $graph_db['hostids'], 'output' => API_OUTPUT_EXTEND, 'editable' => 1)); if (empty($current_graph)) { throw new APIException(1, 'No permission for Graph [' . $graph_db['name'] . ']'); } $current_graph = reset($current_graph); } if (!$current_graph && !isset($rules['graph']['missed'])) { info('Graph [' . $graph_db['name'] . '] skipped - user rule'); continue; // break if not update exist } if ($current_graph && !isset($rules['graph']['exist'])) { info('Graph [' . $graph_db['name'] . '] skipped - user rule'); continue; // break if not update exist } if ($graph_db['ymin_type'] == GRAPH_YAXIS_TYPE_ITEM_VALUE) { $item_data = explode(':', $graph_db['ymin_item_key'], 2); if (count($item_data) < 2) { throw new APIException(1, 'Incorrect y min item for graph [' . $graph_db['name'] . ']'); } if (!($item = get_item_by_key($item_data[1], $item_data[0]))) { throw new APIException(1, 'Missing item [' . $graph_db['ymin_item_key'] . '] for host [' . $host_db['host'] . ']'); } $graph_db['ymin_itemid'] = $item['itemid']; } if ($graph_db['ymax_type'] == GRAPH_YAXIS_TYPE_ITEM_VALUE) { $item_data = explode(':', $graph_db['ymax_item_key'], 2); if (count($item_data) < 2) { throw new APIException(1, 'Incorrect y max item for graph [' . $graph_db['name'] . ']'); } if (!($item = get_item_by_key($item_data[1], $item_data[0]))) { throw new APIException(1, 'Missing item [' . $graph_db['ymax_item_key'] . '] for host [' . $host_db['host'] . ']'); } $graph_db['ymax_itemid'] = $item['itemid']; } $graph_db['gitems'] = $graph_items; if ($current_graph) { $graph_db['graphid'] = $current_graph['graphid']; $graphs_to_upd[] = $graph_db; } else { $graphs_to_add[] = $graph_db; } } if (!empty($graphs_to_add)) { $r = CGraph::create($graphs_to_add); if ($r === false) { throw new APIException(1, CGraph::resetErrors()); } } if (!empty($graphs_to_upd)) { $r = CGraph::update($graphs_to_upd); if ($r === false) { throw new APIException(1, CGraph::resetErrors()); } } } } // DEPENDENCIES $dependencies = $xpath->query('dependencies/dependency'); if ($dependencies->length > 0) { $triggers_for_dependencies = zbx_objectValues($triggers_for_dependencies, 'triggerid'); $triggers_for_dependencies = array_flip($triggers_for_dependencies); foreach ($dependencies as $dependency) { $triggers_to_add_dep = array(); $trigger_description = $dependency->getAttribute('description'); $current_triggerid = get_trigger_by_description($trigger_description); // sdi('<b><u>Trigger Description: </u></b>'.$trigger_description.' | <b>Current_triggerid: </b>'. $current_triggerid['triggerid']); if ($current_triggerid && isset($triggers_for_dependencies[$current_triggerid['triggerid']])) { $depends_on_list = $xpath->query('depends', $dependency); foreach ($depends_on_list as $depends_on) { $depends_triggerid = get_trigger_by_description($depends_on->nodeValue); // sdi('<b>depends on description: </b>'.$depends_on->nodeValue.' | <b>depends_triggerid: </b>'. $depends_triggerid['triggerid']); if ($depends_triggerid['triggerid']) { $triggers_to_add_dep[] = $depends_triggerid['triggerid']; } } $r = update_trigger($current_triggerid['triggerid'], null, $current_triggerid['description'], null, null, null, null, null, $triggers_to_add_dep, null); if ($r === false) { throw new APIException(); } } } } } return true; } catch (APIException $e) { error($e->getErrors()); return false; } }