Пример #1
0
 /**
  * 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;
     }
 }
Пример #2
0
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;
}