Exemple #1
0
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;
}