protected function applyQuerySortField($sortfield, $sortorder, $alias, array $sqlParts) { if ($sortfield === 'hostname') { $sqlParts['select']['hostname'] = 'h.name AS hostname'; $sqlParts['from']['functions'] = 'functions f'; $sqlParts['from']['items'] = 'items i'; $sqlParts['from']['hosts'] = 'hosts h'; $sqlParts['where'][] = 't.triggerid = f.triggerid'; $sqlParts['where'][] = 'f.itemid = i.itemid'; $sqlParts['where'][] = 'i.hostid = h.hostid'; $sqlParts['order'][] = 'h.name ' . $sortorder; } else { $sqlParts = parent::applyQuerySortField($sortfield, $sortorder, $alias, $sqlParts); } return $sqlParts; }
/** * Retrieves and adds additional requested data (options 'selectHosts', 'selectGroups', etc.) to result set. * * @param array $options * @param array $result * * @return array */ protected function addRelatedObjects(array $options, array $result) { $result = parent::addRelatedObjects($options, $result); $triggerPrototypeIds = array_keys($result); if ($options['selectDependencies'] !== null && $options['selectDependencies'] != API_OUTPUT_COUNT) { // Add trigger prototype dependencies. $res = DBselect('SELECT td.triggerid_up,td.triggerid_down' . ' FROM trigger_depends td' . ' WHERE ' . dbConditionInt('td.triggerid_down', $triggerPrototypeIds)); $relationMap = new CRelationMap(); while ($relation = DBfetch($res)) { $relationMap->addRelation($relation['triggerid_down'], $relation['triggerid_up']); } $dependencies = API::getApiService()->select($this->tableName(), ['output' => $options['selectDependencies'], 'triggerids' => $relationMap->getRelatedIds(), 'preservekeys' => true]); $result = $relationMap->mapMany($result, $dependencies, 'dependencies'); } // adding items if ($options['selectItems'] !== null && $options['selectItems'] != API_OUTPUT_COUNT) { $relationMap = $this->createRelationMap($result, 'triggerid', 'itemid', 'functions'); $items = API::Item()->get(['output' => $options['selectItems'], 'itemids' => $relationMap->getRelatedIds(), 'webitems' => true, 'nopermissions' => true, 'preservekeys' => true, 'filter' => ['flags' => null]]); $result = $relationMap->mapMany($result, $items, 'items'); } // adding discovery rule if ($options['selectDiscoveryRule'] !== null && $options['selectDiscoveryRule'] != API_OUTPUT_COUNT) { $dbRules = DBselect('SELECT id.parent_itemid,f.triggerid' . ' FROM item_discovery id,functions f' . ' WHERE ' . dbConditionInt('f.triggerid', $triggerPrototypeIds) . ' AND f.itemid=id.itemid'); $relationMap = new CRelationMap(); while ($rule = DBfetch($dbRules)) { $relationMap->addRelation($rule['triggerid'], $rule['parent_itemid']); } $discoveryRules = API::DiscoveryRule()->get(['output' => $options['selectDiscoveryRule'], 'itemids' => $relationMap->getRelatedIds(), 'nopermissions' => true, 'preservekeys' => true]); $result = $relationMap->mapOne($result, $discoveryRules, 'discoveryRule'); } return $result; }
protected function addRelatedObjects(array $options, array $result) { $result = parent::addRelatedObjects($options, $result); $triggerids = array_keys($result); // adding items if ($options['selectItems'] !== null && $options['selectItems'] != API_OUTPUT_COUNT) { $relationMap = $this->createRelationMap($result, 'triggerid', 'itemid', 'functions'); $items = API::Item()->get(array('nodeids' => $options['nodeids'], 'output' => $options['selectItems'], 'itemids' => $relationMap->getRelatedIds(), 'webitems' => true, 'nopermissions' => true, 'preservekeys' => true, 'filter' => array('flags' => null))); $result = $relationMap->mapMany($result, $items, 'items'); } // adding discoveryrule if ($options['selectDiscoveryRule'] !== null && $options['selectDiscoveryRule'] != API_OUTPUT_COUNT) { $dbRules = DBselect('SELECT id.parent_itemid,f.triggerid' . ' FROM item_discovery id,functions f' . ' WHERE ' . dbConditionInt('f.triggerid', $triggerids) . ' AND f.itemid=id.itemid'); $relationMap = new CRelationMap(); while ($rule = DBfetch($dbRules)) { $relationMap->addRelation($rule['triggerid'], $rule['parent_itemid']); } $discoveryRules = API::DiscoveryRule()->get(array('output' => $options['selectDiscoveryRule'], 'nodeids' => $options['nodeids'], 'itemids' => $relationMap->getRelatedIds(), 'nopermissions' => true, 'preservekeys' => true)); $result = $relationMap->mapOne($result, $discoveryRules, 'discoveryRule'); } return $result; }
protected function applyQueryNodeOptions($tableName, $tableAlias, array $options, array $sqlParts) { // only apply the node option if no specific ids are given if ($options['groupids'] === null && $options['templateids'] === null && $options['hostids'] === null && $options['triggerids'] === null && $options['itemids'] === null && $options['applicationids'] === null) { $sqlParts = parent::applyQueryNodeOptions($tableName, $tableAlias, $options, $sqlParts); } return $sqlParts; }