/** * Delete items * * @param array $itemids * @return */ public static function delete($itemids) { if (empty($itemids)) { return true; } $itemids = zbx_toArray($itemids); $insert = array(); try { self::BeginTransaction(__METHOD__); $options = array('itemids' => $itemids, 'editable' => 1, 'preservekeys' => 1, 'output' => API_OUTPUT_EXTEND); $del_items = self::get($options); foreach ($itemids as $itemid) { if (!isset($del_items[$itemid])) { self::exception(ZBX_API_ERROR_PERMISSIONS, S_NO_PERMISSIONS); } if ($del_items[$itemid]['templateid'] != 0) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Cannot delete templated items'); } if ($del_items[$itemid]['type'] == ITEM_TYPE_HTTPTEST) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Cannot delete web items'); } } // first delete child items $parent_itemids = $itemids; do { $db_items = DBselect('SELECT itemid FROM items WHERE ' . DBcondition('templateid', $parent_itemids)); $parent_itemids = array(); while ($db_item = DBfetch($db_items)) { $parent_itemids[] = $db_item['itemid']; $itemids[] = $db_item['itemid']; } } while (!empty($parent_itemids)); // delete triggers $result = delete_triggers_by_itemid($itemids); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Cannot delete item'); } // delete graphs $del_graphs = array(); $sql = 'SELECT gi.graphid' . ' FROM graphs_items gi' . ' WHERE ' . DBcondition('gi.itemid', $itemids) . ' AND NOT EXISTS (' . ' SELECT gii.gitemid' . ' FROM graphs_items gii' . ' WHERE gii.graphid=gi.graphid' . ' AND ' . DBcondition('gii.itemid', $itemids, true, false) . ' )'; $db_graphs = DBselect($sql); while ($db_graph = DBfetch($db_graphs)) { $del_graphs[$db_graph['graphid']] = $db_graph['graphid']; } if (!empty($del_graphs)) { $result = CGraph::delete($del_graphs); if (!$result) { self::exception(ZBX_API_ERROR_PARAMETERS, 'Cannot delete item'); } } //-- $itemids_condition = DBcondition('itemid', $itemids); DB::delete('graphs_items', array($itemids_condition)); DB::delete('screens_items', array(DBcondition('resourceid', $itemids), DBcondition('resourcetype', array(SCREEN_RESOURCE_SIMPLE_GRAPH, SCREEN_RESOURCE_PLAIN_TEXT)))); DB::delete('items_applications', array($itemids_condition)); DB::delete('items', array($itemids_condition)); DB::delete('profiles', array('idx=' . zbx_dbstr('web.favorite.graphids'), 'source=' . zbx_dbstr('itemid'), DBcondition('value_id', $itemids))); $item_data_tables = array('trends', 'trends_uint', 'history_text', 'history_log', 'history_uint', 'history_str', 'history'); foreach ($itemids as $id => $itemid) { foreach ($item_data_tables as $table) { $insert[] = array('tablename' => $table, 'field' => 'itemid', 'value' => $itemid); } } DB::insert('housekeeper', $insert); self::EndTransaction(true, __METHOD__); return array('itemids' => $itemids); } catch (APIException $e) { self::EndTransaction(false, __METHOD__); $error = $e->getErrors(); $error = reset($error); self::setError(__METHOD__, $e->getCode(), $error); return false; } }
function delete_item($itemids) { zbx_value2array($itemids); if (empty($itemids)) { return true; } // Get items INFO before delete them! $items = array(); $item_res = DBselect('SELECT itemid, description, key_ FROM items WHERE ' . DBcondition('itemid', $itemids)); while ($item_rows = DBfetch($item_res)) { $items[$item_rows['itemid']] = $item_rows; } // -- $hosts = array(); $hosts = get_host_by_itemid($itemids); // first delete child items $del_cld_items = array(); $db_items = DBselect('SELECT itemid FROM items WHERE ' . DBcondition('templateid', $itemids)); while ($db_item = DBfetch($db_items)) { // recursion !!!! $del_cld_items[$db_item['itemid']] = $db_item['itemid']; } if (!empty($del_cld_items)) { $result = delete_item($del_cld_items); if (!$result) { return $result; } } //-- // triggers $result = delete_triggers_by_itemid($itemids); if (!$result) { return $result; } //-- // delete graphs $del_graphs = array(); $db_gitems = DBselect('SELECT DISTINCT graphid FROM graphs_items WHERE ' . DBcondition('itemid', $itemids)); while ($db_gitem = DBfetch($db_gitems)) { $del_graphs[$db_gitem['graphid']] = $db_gitem['graphid']; } if (!empty($del_graphs)) { $result = delete_graph($del_graphs); if (!$result) { return $result; } } //-- $result = delete_history_by_itemid($itemids, 1); if (!$result) { return $result; } $temp_arr = array(SCREEN_RESOURCE_SIMPLE_GRAPH, SCREEN_RESOURCE_PLAIN_TEXT); DBexecute('DELETE FROM screens_items WHERE ' . DBcondition('resourceid', $itemids) . ' AND ' . DBcondition('resourcetype', $temp_arr)); DBexecute('DELETE FROM items_applications WHERE ' . DBcondition('itemid', $itemids)); DBexecute("DELETE FROM profiles WHERE idx='web.favorite.graphids' AND source='itemid' AND " . DBcondition('value_id', $itemids)); foreach ($itemids as $id) { /* The section should be improved */ $item_old = get_item_by_itemid($id); $result = DBexecute('DELETE FROM items WHERE itemid=' . $id); if ($result) { add_audit_ext(AUDIT_ACTION_DELETE, AUDIT_RESOURCE_ITEM, $id, $item_old['description'], 'items', NULL, NULL); } else { break; } } /* $result = DBexecute('DELETE FROM items WHERE '.DBcondition('itemid',$itemids));*/ if ($result) { foreach ($items as $itemid => $item) { info("Item '" . $hosts[$itemid]['host'] . ':' . $item['key_'] . "' deleted"); } } return $result; }