function api_graph_tree_item_remove($graph_tree_item_id) { require_once(CACTI_BASE_PATH . "/include/graph_tree/graph_tree_constants.php"); require_once(CACTI_BASE_PATH . "/lib/graph_tree/graph_tree_info.php"); require_once(CACTI_BASE_PATH . "/lib/graph_tree/graph_tree_utility.php"); /* sanity checks */ validate_id_die($graph_tree_item_id, "graph_tree_item_id"); /* obtain a copy of the current graph tree item */ $graph_tree_item = api_graph_tree_item_get($graph_tree_item_id); /* find the id of the parent */ $parent_graph_tree_item_id = api_graph_tree_item_parent_get($graph_tree_item_id); /* because deleting a parent branch deletes all of its children, it is very possible that * the branch we are trying to delete has already been removed. */ if (!isset($graph_tree_item["id"])) { return true; } /* if this item is a graph or host, it will have NO children, so we can just delete the * item and exit. */ if (($graph_tree_item["item_type"] == TREE_ITEM_TYPE_GRAPH) || ($graph_tree_item["item_type"] == TREE_ITEM_TYPE_HOST)) { return db_delete("graph_tree_items", array( "id" => array("type" => DB_TYPE_INTEGER, "value" => $graph_tree_item_id) )); } /* make sure nothing bad happens */ if (!api_graph_tree_item_order_key_validate($graph_tree_item["order_key"])) { return false; } $graph_tree_items = api_graph_tree_item_list($graph_tree_item["graph_tree_id"], "", $graph_tree_item_id, true, true); if (is_array($graph_tree_items) > 0) { /* remove all child items */ foreach ($graph_tree_items as $_graph_tree_item) { db_delete("graph_tree_items", array( "id" => array("type" => DB_TYPE_INTEGER, "value" => $_graph_tree_item["id"]) )); } } /* CLEANUP - reorder the tier that this branch lies in */ $base_order_key = substr($graph_tree_item["order_key"], 0, (CHARS_PER_TIER * (api_graph_tree_item_depth_get($graph_tree_item["order_key"]) - 1))); /* refetch the graph tree item list now that the selected item has been removed */ $graph_tree_items = api_graph_tree_item_list($graph_tree_item["graph_tree_id"], "", $parent_graph_tree_item_id, true, true); if ((is_array($graph_tree_items)) && (sizeof($graph_tree_items) > 0)) { $old_key_part = substr($graph_tree_items[0]["order_key"], strlen($base_order_key), CHARS_PER_TIER); /* we key tier==0 off of '1' and tier>0 off of '0' */ if (api_graph_tree_item_depth_get($base_order_key) == 0) { $i = 1; }else{ $i = 0; } foreach ($graph_tree_items as $_graph_tree_item) { /* this is the key column we are going to 'rekey' */ $new_key_part = substr($_graph_tree_item["order_key"], strlen($base_order_key), CHARS_PER_TIER); /* incriment a counter for the new key column */ if ($old_key_part != $new_key_part) { $i++; } /* build the new order key string */ $key = $base_order_key . str_pad(strval($i), CHARS_PER_TIER, '0', STR_PAD_LEFT) . substr($_graph_tree_item["order_key"], (strlen($base_order_key) + CHARS_PER_TIER)); db_update("graph_tree_items", array( "order_key" => array("type" => DB_TYPE_STRING, "value" => $key), "id" => array("type" => DB_TYPE_INTEGER, "value" => $_graph_tree_item["id"]) ), array("id")); $old_key_part = $new_key_part; } } }
function api_graph_tree_item_available_order_key_get($graph_tree_id, $order_key) { /* sanity checks */ validate_id_die($graph_tree_id, "graph_tree_id"); if (($order_key != "") && (!api_graph_tree_item_order_key_validate($order_key))) { die("Invalid order key '$order_key'"); } if (preg_match("/^" . str_repeat('0', CHARS_PER_TIER) . "/", $order_key)) { $tier = 0; $parent_root = ''; }else{ $tier = api_graph_tree_item_depth_get($order_key); $parent_root = substr($order_key, 0, ($tier * CHARS_PER_TIER)); } $order_key = db_fetch_cell("SELECT order_key FROM graph_tree_items WHERE graph_tree_id = $graph_tree_id AND order_key LIKE '$parent_root%' ORDER BY order_key DESC LIMIT 1"); $complete_root = substr($order_key, 0, ($tier * CHARS_PER_TIER) + CHARS_PER_TIER); $order_key_suffix = (substr($complete_root, - CHARS_PER_TIER) + 1); $order_key_suffix = str_pad($order_key_suffix, CHARS_PER_TIER, '0', STR_PAD_LEFT); $order_key_suffix = str_pad($parent_root . $order_key_suffix, (MAX_TREE_DEPTH * CHARS_PER_TIER), '0', STR_PAD_RIGHT); return $order_key_suffix; }