コード例 #1
0
ファイル: template.php プロジェクト: songchin/Cacti
/** change_data_template - changes the data template for a particular data source to
	$data_template_id
   @param int $local_data_id 	- the id of the data source to change the data template for
   @param int $data_template_id - id the of the data template to change to. specify '0' for no data template */
function change_data_template($local_data_id, $data_template_id) {
	require_once(CACTI_BASE_PATH . "/lib/data_source/data_source_info.php");

	/* always update tables to new data template (or no data template) */
	db_execute("UPDATE data_local SET data_template_id=$data_template_id WHERE id=$local_data_id");

	/* get data about the template and the data source */
	$data = db_fetch_row("SELECT * FROM data_template_data WHERE local_data_id=$local_data_id");
	$template_data = (($data_template_id == "0") ? $data : db_fetch_row("select * from data_template_data where local_data_id=0 and data_template_id=$data_template_id"));

	/* determine if we are here for the first time, or coming back */
	if ((db_fetch_cell("select local_data_template_data_id from data_template_data where local_data_id=$local_data_id") == "0") ||
		(db_fetch_cell("select local_data_template_data_id from data_template_data where local_data_id=$local_data_id") == "")) {
		$new_save = true;
	}else{
		$new_save = false;
	}

	/* some basic field values that ALL data sources should have */
	$save["id"] = $data["id"];
	$save["local_data_template_data_id"] = $template_data["id"];
	$save["local_data_id"] = $local_data_id;
	$save["data_template_id"] = $data_template_id;

	/* loop through the "templated field names" to find to the rest... */
	$struct_data_source = data_source_form_list();
	reset($struct_data_source);
	while (list($field_name, $field_array) = each($struct_data_source)) {
		if ((isset($data[$field_name])) || (isset($template_data[$field_name]))) {
			if ((!empty($template_data{"t_" . $field_name})) && ($new_save == false)) {
				$save[$field_name] = $data[$field_name];
			}else{
				$save[$field_name] = $template_data[$field_name];
			}
		}
	}

	/* these fields should never be overwritten by the template */
	$save["data_source_path"] = $data["data_source_path"];

	$data_template_data_id = sql_save($save, "data_template_data");
	$data_rrds_list = db_fetch_assoc("SELECT * FROM data_template_rrd WHERE local_data_id=$local_data_id");
	$template_rrds_list = (($data_template_id == "0") ? $data_rrds_list : db_fetch_assoc("SELECT * FROM data_template_rrd WHERE local_data_id=0 AND data_template_id=$data_template_id"));

	if (sizeof($data_rrds_list) > 0) {
		/* this data source already has "child" items */
	}else{
		/* this data source does NOT have "child" items; loop through each item in the template
		 * and write it exactly to each item */
		if (sizeof($template_rrds_list) > 0) {
			$struct_data_source_item = data_source_item_form_list();
			foreach ($template_rrds_list as $template_rrd) {
				unset($save);
				reset($struct_data_source_item);

				$save["id"] = 0;
				$save["local_data_template_rrd_id"] = $template_rrd["id"];
				$save["local_data_id"] = $local_data_id;
				$save["data_template_id"] = $template_rrd["data_template_id"];

				while (list($field_name, $field_array) = each($struct_data_source_item)) {
					$save[$field_name] = $template_rrd[$field_name];
				}

				sql_save($save, "data_template_rrd");
			}
		}
	}

	/* make sure to copy down script data (data_input_data) as well */
	$data_input_data = db_fetch_assoc("SELECT data_input_field_id, t_value, value
		FROM data_input_data
		WHERE data_template_data_id=" . $template_data["id"]);

	/* this section is before most everthing else so we can determine if this is a new save, by checking
	the status of the 'local_data_template_data_id' column */
	if (sizeof($data_input_data) > 0) {
	foreach ($data_input_data as $item) {
		/* always propagate on a new save, only propagate templated fields thereafter */
		if (($new_save == true) || (empty($item["t_value"]))) {
			db_execute("REPLACE INTO data_input_data
				(data_input_field_id,data_template_data_id,t_value,value)
				VALUES (" . $item["data_input_field_id"] . ", $data_template_data_id, '" . $item["t_value"] . "', '" . $item["value"] . "')");
		}
	}
	}

	/* make sure to update the 'data_template_data_rra' table for each data source */
	$data_rra = db_fetch_assoc("SELECT rra_id
		FROM data_template_data_rra
		WHERE data_template_data_id=" . $template_data["id"]);

	db_execute("DELETE FROM data_template_data_rra
		WHERE data_template_data_id=$data_template_data_id");

	if (sizeof($data_rra) > 0) {
	foreach ($data_rra as $rra) {
		db_execute("INSERT INTO data_template_data_rra
			(data_template_data_id,rra_id)
			VALUES ($data_template_data_id," . $rra["rra_id"] . ")");
	}
	}
}
コード例 #2
0
ファイル: utility.php プロジェクト: songchin/Cacti
function duplicate_data_source($_local_data_id, $_data_template_id, $data_source_title) {
	require_once(CACTI_BASE_PATH . "/lib/data_source/data_source_info.php");

	if (!empty($_local_data_id)) {
		$data_local = db_fetch_row("select * from data_local where id=$_local_data_id");
		$data_template_data = db_fetch_row("select * from data_template_data where local_data_id=$_local_data_id");
		$data_template_rrds = db_fetch_assoc("select * from data_template_rrd where local_data_id=$_local_data_id");

		$data_input_datas = db_fetch_assoc("select * from data_input_data where data_template_data_id=" . $data_template_data["id"]);
		$data_template_data_rras = db_fetch_assoc("select * from data_template_data_rra where data_template_data_id=" . $data_template_data["id"]);

		/* create new entry: data_local */
		$save["id"] = 0;
		$save["data_template_id"] = $data_local["data_template_id"];
		$save["device_id"] = $data_local["device_id"];
		$save["snmp_query_id"] = $data_local["snmp_query_id"];
		$save["snmp_index"] = $data_local["snmp_index"];

		$local_data_id = sql_save($save, "data_local");

		$data_template_data["name"] = str_replace(__("<ds_title>"), $data_template_data["name"], $data_source_title);
	}elseif (!empty($_data_template_id)) {
		$data_template = db_fetch_row("select * from data_template where id=$_data_template_id");
		$data_template_data = db_fetch_row("select * from data_template_data where data_template_id=$_data_template_id and local_data_id=0");
		$data_template_rrds = db_fetch_assoc("select * from data_template_rrd where data_template_id=$_data_template_id and local_data_id=0");

		$data_input_datas = db_fetch_assoc("select * from data_input_data where data_template_data_id=" . $data_template_data["id"]);
		$data_template_data_rras = db_fetch_assoc("select * from data_template_data_rra where data_template_data_id=" . $data_template_data["id"]);

		/* create new entry: data_template */
		$save["id"] = 0;
		$save["hash"] = get_hash_data_template(0);
		$save["name"] = str_replace(__("<template_title>"), $data_template["name"], $data_source_title);

		$data_template_id = sql_save($save, "data_template");
	}

	unset($save);
	$struct_data_source = data_source_form_list();
	unset($struct_data_source["rra_id"]);
	unset($struct_data_source["data_source_path"]);
	reset($struct_data_source);

	/* create new entry: data_template_data */
	$save["id"] = 0;
	$save["local_data_id"] = (isset($local_data_id) ? $local_data_id : 0);
	$save["local_data_template_data_id"] = (isset($data_template_data["local_data_template_data_id"]) ? $data_template_data["local_data_template_data_id"] : 0);
	$save["data_template_id"] = (!empty($_local_data_id) ? $data_template_data["data_template_id"] : $data_template_id);
	$save["name_cache"] = $data_template_data["name_cache"];

	while (list($field, $array) = each($struct_data_source)) {
		$save{$field} = $data_template_data{$field};

		if ($array["flags"] != "ALWAYSTEMPLATE") {
			$save{"t_" . $field} = $data_template_data{"t_" . $field};
		}
	}

	$data_template_data_id = sql_save($save, "data_template_data");

	/* create new entry(s): data_template_rrd */
	if (sizeof($data_template_rrds) > 0) {
		$struct_data_source_item = data_source_item_form_list();
		foreach ($data_template_rrds as $data_template_rrd) {
			unset($save);
			reset($struct_data_source_item);

			$save["id"]                         = 0;
			$save["local_data_id"]              = (isset($local_data_id) ? $local_data_id : 0);
			$save["local_data_template_rrd_id"] = (isset($data_template_rrd["local_data_template_rrd_id"]) ? $data_template_rrd["local_data_template_rrd_id"] : 0);
			$save["data_template_id"]           = (!empty($_local_data_id) ? $data_template_rrd["data_template_id"] : $data_template_id);
			if ($save["local_data_id"] == 0) {
				$save["hash"]                   = get_hash_data_template($data_template_rrd["local_data_template_rrd_id"], "data_template_item");
			} else {
				$save["hash"] = '';
			}

			while (list($field, $array) = each($struct_data_source_item)) {
				$save{$field} = $data_template_rrd{$field};
			}

			$data_template_rrd_id = sql_save($save, "data_template_rrd");
		}
	}

	/* create new entry(s): data_input_data */
	if (sizeof($data_input_datas) > 0) {
	foreach ($data_input_datas as $data_input_data) {
		db_execute("insert into data_input_data (data_input_field_id,data_template_data_id,t_value,value) values
			(" . $data_input_data["data_input_field_id"] . ",$data_template_data_id,'" . $data_input_data["t_value"] .
			"','" . $data_input_data["value"] . "')");
	}
	}

	/* create new entry(s): data_template_data_rra */
	if (sizeof($data_template_data_rras) > 0) {
	foreach ($data_template_data_rras as $data_template_data_rra) {
		db_execute("insert into data_template_data_rra (data_template_data_id,rra_id) values ($data_template_data_id,
			" . $data_template_data_rra["rra_id"] . ")");
	}
	}

	if (!empty($_local_data_id)) {
		update_data_source_title_cache($local_data_id);
	}
}
コード例 #3
0
ファイル: export.php プロジェクト: songchin/Cacti
function data_template_to_xml($data_template_id) {
	require_once(CACTI_BASE_PATH . "/lib/data_source/data_source_info.php");

	$hash["data_template"] = get_hash_version("data_template") . get_hash_data_template($data_template_id);
	$xml_text = "";

	$data_template = db_fetch_row("select id,name,description from data_template where id=$data_template_id");
	$data_template_data = db_fetch_row("select * from data_template_data where data_template_id=$data_template_id and local_data_id=0");
	$data_template_rrd = db_fetch_assoc("select * from data_template_rrd where data_template_id=$data_template_id and local_data_id=0");
	$data_template_data_rra = db_fetch_assoc("select * from data_template_data_rra where data_template_data_id=" . $data_template_data["id"]);
	$data_input_data = db_fetch_assoc("select * from data_input_data where data_template_data_id=" . $data_template_data["id"]);

	if ((empty($data_template["id"])) || (empty($data_template_data["id"]))) {
		$err_msg = "Invalid data template.";
		return $err_msg;
	}

	$xml_text .= "<hash_" . $hash["data_template"] . ">\n";
	$xml_text .= "\t<name>" . xml_character_encode($data_template["name"]) . "</name>\n";
	$xml_text .= "\t<description>" . xml_character_encode($data_template["description"]) . "</description>\n\t<ds>\n";

	/* XML Branch: <ds> */
	$struct_data_source = data_source_form_list();
	reset($struct_data_source);
	while (list($field_name, $field_array) = each($struct_data_source)) {
		if (isset($data_template_data{"t_" . $field_name})) {
			$xml_text .= "\t\t<t_$field_name>" . xml_character_encode($data_template_data{"t_" . $field_name}) . "</t_$field_name>\n";
		}

		if (($field_name == "data_input_id") && (!empty($data_template_data{$field_name}))) {
			$xml_text .= "\t\t<$field_name>hash_" . get_hash_version("data_input_method") . get_hash_data_input($data_template_data{$field_name}) . "</$field_name>\n";
		}else{
			if (isset($data_template_data{$field_name})) {
				$xml_text .= "\t\t<$field_name>" . xml_character_encode($data_template_data{$field_name}) . "</$field_name>\n";
			}
		}
	}

	$xml_text .= "\t\t<rra_items>";

	$i = 0;
	if (sizeof($data_template_data_rra) > 0) {
	foreach ($data_template_data_rra as $item) {
		$xml_text .= "hash_" . get_hash_version("round_robin_archive") . get_hash_round_robin_archive($item["rra_id"]);

		if (($i+1) < sizeof($data_template_data_rra)) {
			$xml_text .= "|";
		}

		$i++;
	}
	}

	$xml_text .= "</rra_items>\n";
	$xml_text .= "\t</ds>\n";

	/* XML Branch: <items> */

	$xml_text .= "\t<items>\n";

	$i = 0;
	if (sizeof($data_template_rrd) > 0) {
	foreach ($data_template_rrd as $item) {
		$hash["data_template_item"] = get_hash_version("data_template_item") . get_hash_data_template($item["id"], "data_template_item");

		$xml_text .= "\t\t<hash_" . $hash["data_template_item"] . ">\n";

		$struct_data_source_item = data_source_item_form_list();
		reset($struct_data_source_item);
		while (list($field_name, $field_array) = each($struct_data_source_item)) {
			if (isset($item{"t_" . $field_name})) {
				$xml_text .= "\t\t\t<t_$field_name>" . xml_character_encode($item{"t_" . $field_name}) . "</t_$field_name>\n";
			}

			if (($field_name == "data_input_field_id") && (!empty($item{$field_name}))) {
				$xml_text .= "\t\t\t<$field_name>hash_" . get_hash_version("data_input_field") . get_hash_data_input($item{$field_name}, "data_input_field") . "</$field_name>\n";
			}else{
				if (isset($item{$field_name})) {
					$xml_text .= "\t\t\t<$field_name>" . xml_character_encode($item{$field_name}) . "</$field_name>\n";
				}
			}
		}

		$xml_text .= "\t\t</hash_" . $hash["data_template_item"] . ">\n";

		$i++;
	}
	}

	$xml_text .= "\t</items>\n";

	/* XML Branch: <data> */

	$xml_text .= "\t<data>\n";

	$i = 0;
	if (sizeof($data_input_data) > 0) {
	foreach ($data_input_data as $item) {
		$xml_text .= "\t\t<item_" . str_pad(strval($i), 3, "0", STR_PAD_LEFT) . ">\n";

		$xml_text .= "\t\t\t<data_input_field_id>hash_" . get_hash_version("data_input_field") . get_hash_data_input($item{"data_input_field_id"}, "data_input_field") . "</data_input_field_id>\n";
		$xml_text .= "\t\t\t<t_value>" . xml_character_encode($item{"t_value"}) . "</t_value>\n";
		$xml_text .= "\t\t\t<value>" . xml_character_encode($item{"value"}) . "</value>\n";

		$xml_text .= "\t\t</item_" . str_pad(strval($i), 3, "0", STR_PAD_LEFT) . ">\n";

		$i++;
	}
	}

	$xml_text .= "\t</data>\n";

	$xml_text .= "</hash_" . $hash["data_template"] . ">";

	return $xml_text;
}
コード例 #4
0
ファイル: html_form_template.php プロジェクト: songchin/Cacti
/** draw_nontemplated_fields_data_source_item - draws a form that consists of all non-templated data source
     item fields associated with a particular data template
   @param int $data_template_id 			- the id of the data template to base the form after
   @param array $values_array 				- any values that should be included by default on the form
   @param string $field_name_format 		- all fields on the form will be named using the following format, the following
     										  variables can be used:
    									      |field| - the current field name
       										  |id| - the id of the current data source item
   @param string $header_title 				- the title to use on the header for this form
   @param bool $draw_title_for_each_item  	- should a separate header be drawn for each data source item, or
     										  should all data source items be drawn under one header?
   @param bool $alternate_colors 			- whether to alternate colors for each row on the form or not
   @param bool $include_hidden_fields 		- should elements that are not to be displayed be represented as hidden
     										  html input elements or omitted altogether?
   @param int $snmp_query_graph_id 			- if this graph template is part of a data query, specify the graph id here. this
     										  will be used to determine if a given field is using suggested values */
function draw_nontemplated_fields_data_source_item($data_template_id, &$values_array, $field_name_format = "|field_id|", $header_title = "", $draw_title_for_each_item = true, $alternate_colors = true, $include_hidden_fields = true, $snmp_query_graph_id = 0) {
	global $colors;
	require_once(CACTI_BASE_PATH . "/lib/data_source/data_source_info.php");

	$draw_any_items = false;
	$num_fields_drawn = 0;

	/* setup form options */
	if ($alternate_colors == true) {
		$form_config_array = array("no_form_tag" => true);
	}else{
		$form_config_array = array("no_form_tag" => true, "force_row_color" => $colors["form_alternate1"]);
	}

	if (sizeof($values_array) > 0) {
		$struct_data_source_item = data_source_item_form_list();
	foreach ($values_array as $rrd) {
		reset($struct_data_source_item);
		$form_array = array();

		/* if the user specifies a title, we only want to draw that. if not, we should create our
		own title for each data source item */
		if ($draw_title_for_each_item == true) {
			$draw_any_items = false;
		}

		if (empty($rrd["local_data_id"])) { /* this is a template */
			$data_template_rrd = $rrd;
		}else{ /* this is not a template */
			$data_template_rrd = db_fetch_row("select * from data_template_rrd where id=" . $rrd["local_data_template_rrd_id"]);
		}

		while (list($field_name, $field_array) = each($struct_data_source_item)) {
			/* find our field name */
			$form_field_name = str_replace("|field|", $field_name, $field_name_format);
			$form_field_name = str_replace("|id|", $rrd["id"], $form_field_name);

			$form_array += array($form_field_name => $struct_data_source_item[$field_name]);

			/* modifications to the default form array */
			$form_array[$form_field_name]["value"] = (isset($rrd[$field_name]) ? $rrd[$field_name] : "");
			$form_array[$form_field_name]["form_id"] = (isset($rrd["id"]) ? $rrd["id"] : "0");
			unset($form_array[$form_field_name]["default"]);

			/* append the data source item name so the user will recognize it */
			if ($draw_title_for_each_item == false) {
				$form_array[$form_field_name]["friendly_name"] .= " [" . $rrd["data_source_name"] . "]";
			}

			if ($data_template_rrd{"t_" . $field_name} != CHECKED) {
				if ($include_hidden_fields == true) {
					$form_array[$form_field_name]["method"] = "hidden";
				}else{
					unset($form_array[$form_field_name]);
				}
			}elseif ((!empty($snmp_query_graph_id)) && (sizeof(db_fetch_assoc("select id from snmp_query_graph_rrd_sv where snmp_query_graph_id=$snmp_query_graph_id and data_template_id=$data_template_id and field_name='$field_name'")) > 0)) {
				if ($include_hidden_fields == true) {
					$form_array[$form_field_name]["method"] = "hidden";
				}else{
					unset($form_array[$form_field_name]);
				}
			}else{
				if (($draw_any_items == false) && ($draw_title_for_each_item == false) && ($header_title != "")) {
					$header_items = array($header_title, "");
					print "<tr><td>";
					html_header($header_items, 1, true, 'template_data_source_item_' . $form_field_name);
				}elseif (($draw_any_items == false) && ($draw_title_for_each_item == true) && ($header_title != "")) {
					$header_items = array($header_title ." [" . $rrd["data_source_name"] . "]", "");
					print "<tr><td>";
					html_header($header_items, 1, true, 'template_data_source_item_' . $form_field_name);
				}

				$draw_any_items = true;

				/* if the "Output field" appears here among the non-templated fields, the
				   valid choices for the drop-down box must be fetched from the associated
				   data input method */
				if ($field_name == "data_input_field_id") {
					$data_input_id = db_fetch_cell("select data_input_id from data_template_data where data_template_id=".$rrd["data_template_id"]." and local_data_id=0");
					$form_array[$form_field_name]["sql"] = "select id,CONCAT(data_name,' - ',name) as name from data_input_fields where data_input_id=".$data_input_id." and input_output='out' and update_rra='on' order by data_name,name";
				}
			}
		}

		draw_edit_form(
			array(
				"config" => $form_config_array,
				"fields" => $form_array
				)
			);

		$num_fields_drawn += sizeof($form_array);

		if (sizeof($form_array)) print "</table></td></tr>";		/* end of html_header */
	}
	}

	if ($draw_any_items) print "</table></td></tr>";		/* end of html_header */

	return $num_fields_drawn;
}
コード例 #5
0
ファイル: data_sources_items.php プロジェクト: songchin/Cacti
/**
 * data_sources_item_edit	- edit a data template item (aka data source in rrdtool lingo)
 */
function data_sources_item_edit() {
	global $colors;
	require_once(CACTI_BASE_PATH . "/lib/data_source/data_source_info.php");

	/* ================= input validation ================= */
	input_validate_input_number(get_request_var("id"));
	input_validate_input_number(get_request_var("local_data_id"));
	/* ==================================================== */

	if (!empty($_GET["id"])) {
		$data_source = db_fetch_row("SELECT * FROM data_template_data WHERE local_data_id=" . $_GET["local_data_id"]);
		$item = db_fetch_row("SELECT * FROM data_template_rrd WHERE id=" . $_GET["id"]);
		$header_label = __("[edit: ") . $item["data_source_name"] . "]";
	}else{
		$data_source = array();
		$item = array();
		$header_label = __("[new]");
	}


	# the template header
	html_start_box("<strong>" . __("Data Source Item") . "</strong> $header_label", "100", $colors["header"], 0, "center", "", true);
	$header_items = array(__("Field"), __("Value"));
	print "<tr><td>";
	html_header($header_items, 2, true, 'header_data_sources_item_edit');

	/* data input fields list */
	$struct_data_source_item = data_source_item_form_list();
	if ((empty($data_source["data_input_id"])) ||
		((db_fetch_cell("select type_id from data_input where id=" . $data_source["data_input_id"]) != "1") &&
		(db_fetch_cell("select type_id from data_input where id=" . $data_source["data_input_id"]) != "5"))) {
		unset($struct_data_source_item["data_input_field_id"]);
	}else{
		$struct_data_source_item["data_input_field_id"]["sql"] = "select id,CONCAT(data_name,' - ',name) as name from data_input_fields where data_input_id=" . $data_source["data_input_id"] . " and input_output='out' and update_rra='on' order by data_name,name";
	}

	$form_array = array();

	while (list($field_name, $field_array) = each($struct_data_source_item)) {
		$form_array += array($field_name => $struct_data_source_item[$field_name]);

		$form_array[$field_name]["description"] = "";
		$form_array[$field_name]["value"] = (isset($item[$field_name]) ? $item[$field_name] : "");
		$form_array[$field_name]["sub_checkbox"] = array(
			"name" => "t_" . $field_name,
			"friendly_name" => "Use Per-Data Source Value (Ignore this Value)",
			"value" => (isset($item[$field_name]) ? $item{"t_" . $field_name} : "")
			);
	}

	draw_edit_form(
		array(
			"config" => array(),
			"fields" => $form_array
			)
		);

	html_end_box();

	form_hidden_box("data_source_item_id", (isset($item["id"]) ? $item["id"] : "0"), "");
	form_hidden_box("local_data_id", (isset($_GET["local_data_id"]) ? $_GET["local_data_id"] : "0"), "");
	form_hidden_box("save_component_item", "1", "");
	form_hidden_box("hidden_rrdtool_version", read_config_option("rrdtool_version"), "");

	#form_save_button("data_sourcess.php?action=template_edit&id=" . $_GET["id"]);
	form_save_button_alt("url!" . (isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : ""));

	include_once(CACTI_BASE_PATH . "/access/js/data_source_item.js");
	include_once(CACTI_BASE_PATH . "/access/js/field_description_hover.js");

}