Files
cacti/lib/html_form.php
T
Jimmy Conner e4eebf5837 1) Re-introduce collapsible menus
2) Move RRDTool Default Font to Visual (most people using 1.3+)
3) Fix Placeholers, set on a few fields
4) Have Host Pinged as Callback when Editing Host
5) Fix User Menu Visibility Glitch
6) Fix issue where FTP Options would not appear under Settings Export
7) SNMP Options before Availability Options when editing host

git-svn-id: svn+ssh://repo.cacti.net/var/data/svnroot/cacti/cacti/branches/0.8.8@7643 860744bd-22fc-0310-8c96-e9fe5004b5ca
2014-12-31 20:18:37 +00:00

910 lines
34 KiB
PHP

<?php
/*
+-------------------------------------------------------------------------+
| Copyright (C) 2004-2014 The Cacti Group |
| |
| This program is free software; you can redistribute it and/or |
| modify it under the terms of the GNU General Public License |
| as published by the Free Software Foundation; either version 2 |
| of the License, or (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
+-------------------------------------------------------------------------+
| Cacti: The Complete RRDTool-based Graphing Solution |
+-------------------------------------------------------------------------+
| This code is designed, written, and maintained by the Cacti Group. See |
| about.php and/or the AUTHORS file for specific developer information. |
+-------------------------------------------------------------------------+
| http://www.cacti.net/ |
+-------------------------------------------------------------------------+
*/
/*
* Standard HTML form elements
*/
/* draw_edit_form - draws an html edit form
@arg $array - an array that contains all of the information needed to draw
the html form. see the arrays contained in include/global_settings.php
for the extact syntax of this array */
function draw_edit_form($array) {
if (sizeof($array) > 0) {
while (list($top_branch, $top_children) = each($array)) {
if ($top_branch == "config") {
$config_array = $top_children;
}elseif ($top_branch == "fields") {
$fields_array = $top_children;
}
}
}
$i = 0;
if (sizeof($fields_array) > 0) {
while (list($field_name, $field_array) = each($fields_array)) {
if ($i == 0) {
if (!isset($config_array["no_form_tag"])) {
print "<tr style='display:none;'><td><form method='post' autocomplete='off' action='" . ((isset($config_array["post_to"])) ? $config_array["post_to"] : basename($_SERVER["PHP_SELF"])) . "'" . ((isset($config_array["form_name"])) ? " name='" . $config_array["form_name"] . "'" : "") . ((isset($config_array["enctype"])) ? " enctype='" . $config_array["enctype"] . "'" : "") . "></td></tr>\n";
}
}
if ($field_array["method"] == "hidden") {
form_hidden_box($field_name, $field_array["value"], ((isset($field_array["default"])) ? $field_array["default"] : ""));
}elseif ($field_array["method"] == "hidden_zero") {
form_hidden_box($field_name, $field_array["value"], "0");
}elseif ($field_array["method"] == "spacer") {
if (isset($field_array['collapsible']) && $field_array['collapsible'] == 'true') {
$collapsible = true;
}else{
$collapsible = false;
}
print "<tr class='spacer tableHeader" . ($collapsible ? ' collapsible':'') . "' id='row_$field_name'><td colspan='2' style='cursor:pointer;' class='tableSubHeaderColumn'>" . $field_array["friendly_name"] . ($collapsible ? "<div style='float:right;padding-right:4px;'><i class='fa fa-angle-double-up'></i></div>":"") . "</td></tr>\n";
}else{
if (isset($config_array["force_row_color"])) {
print "<tr class='even-alternate'>";
}else{
form_alternate_row('row_' . $field_name);
}
print "<td width='" . ((isset($config_array["left_column_width"])) ? $config_array["left_column_width"] : "50%") . "'>\n<font class='textEditTitle'>" . $field_array["friendly_name"] . "</font><br>\n";
if (isset($field_array["sub_checkbox"])) {
form_checkbox($field_array["sub_checkbox"]["name"],
$field_array["sub_checkbox"]["value"],
$field_array["sub_checkbox"]["friendly_name"],
((isset($field_array["sub_checkbox"]["default"])) ? $field_array["sub_checkbox"]["default"] : ""),
((isset($field_array["sub_checkbox"]["form_id"])) ? $field_array["sub_checkbox"]["form_id"] : ""),
((isset($field_array["sub_checkbox"]["class"])) ? $field_array["sub_checkbox"]["class"] : ""),
((isset($field_array["sub_checkbox"]["on_change"])) ? $field_array["sub_checkbox"]["on_change"] : ""));
}
print ((isset($field_array["description"])) ? $field_array["description"] : "") . "</td>\n";
print "<td>";
draw_edit_control($field_name, $field_array);
print "</td>\n</tr>\n";
}
$i++;
}
}
}
/* draw_edit_control - draws a single control to be used on an html edit form
@arg $field_name - the name of the control
@arg $field_array - an array containing data for this control. see include/global_form.php
for more specific syntax */
function draw_edit_control($field_name, &$field_array) {
switch ($field_array["method"]) {
case 'textbox':
form_text_box(
$field_name,
$field_array["value"],
((isset($field_array["default"])) ? $field_array["default"] : ""),
$field_array["max_length"],
((isset($field_array["size"])) ? $field_array["size"] : "40"),
"text",
((isset($field_array["form_id"])) ? $field_array["form_id"] : ""),
((isset($field_array["placeholder"])) ? $field_array["placeholder"] : '')
);
break;
case 'filepath':
form_filepath_box($field_name,
$field_array["value"],
((isset($field_array["default"])) ? $field_array["default"] : ""),
$field_array["max_length"],
((isset($field_array["size"])) ? $field_array["size"] : "40"),
"text",
((isset($field_array["form_id"])) ? $field_array["form_id"] : "")
);
break;
case 'dirpath':
form_dirpath_box(
$field_name,
$field_array["value"],
((isset($field_array["default"])) ? $field_array["default"] : ""),
$field_array["max_length"],
((isset($field_array["size"])) ? $field_array["size"] : "40"),
"text",
((isset($field_array["form_id"])) ? $field_array["form_id"] : "")
);
break;
case 'textbox_password':
form_text_box(
$field_name,
$field_array["value"],
((isset($field_array["default"])) ? $field_array["default"] : ""),
$field_array["max_length"],
((isset($field_array["size"])) ? $field_array["size"] : "40"),
"password",
((isset($field_array["form_id"])) ? $field_array["form_id"] : ""),
'********'
);
print "<br>";
form_text_box(
$field_name . "_confirm",
$field_array["value"],
((isset($field_array["default"])) ? $field_array["default"] : ""),
$field_array["max_length"],
((isset($field_array["size"])) ? $field_array["size"] : "40"),
"password",
((isset($field_array["form_id"])) ? $field_array["form_id"] : ""),
'********'
);
break;
case 'textarea':
form_text_area(
$field_name,
$field_array["value"],
$field_array["textarea_rows"],
$field_array["textarea_cols"],
((isset($field_array["default"])) ? $field_array["default"] : ""),
((isset($field_array["class"])) ? $field_array["class"] : ""),
((isset($field_array["on_change"])) ? $field_array["on_change"] : "")
);
break;
case 'drop_array':
form_dropdown(
$field_name,
$field_array["array"],
"",
"",
$field_array["value"],
((isset($field_array["none_value"])) ? $field_array["none_value"] : ""),
((isset($field_array["default"])) ? $field_array["default"] : ""),
((isset($field_array["class"])) ? $field_array["class"] : ""),
((isset($field_array["on_change"])) ? $field_array["on_change"] : "")
);
break;
case 'drop_sql':
form_dropdown(
$field_name,
db_fetch_assoc($field_array["sql"]),
"name",
"id",
$field_array["value"],
((isset($field_array["none_value"])) ? $field_array["none_value"] : ""),
((isset($field_array["default"])) ? $field_array["default"] : ""),
((isset($field_array["class"])) ? $field_array["class"] : ""),
((isset($field_array["on_change"])) ? $field_array["on_change"] : "")
);
break;
case 'drop_multi':
form_multi_dropdown(
$field_name,
$field_array["array"],
db_fetch_assoc($field_array["sql"]),
"id",
((isset($field_array["class"])) ? $field_array["class"] : ""),
((isset($field_array["on_change"])) ? $field_array["on_change"] : "")
);
break;
case 'drop_multi_rra':
form_multi_dropdown(
$field_name,
array_rekey(db_fetch_assoc("SELECT id,name FROM rra ORDER BY timespan"), "id", "name"),
(empty($field_array["form_id"]) ? db_fetch_assoc($field_array["sql_all"]) : db_fetch_assoc($field_array["sql"])),
"id",
((isset($field_array["class"])) ? $field_array["class"] : ""),
((isset($field_array["on_change"])) ? $field_array["on_change"] : "")
);
break;
case 'drop_tree':
grow_dropdown_tree(
$field_array["tree_id"],
'0',
$field_name,
$field_array["value"]
);
break;
case 'drop_color':
form_color_dropdown(
$field_name,
$field_array["value"],
"None",
((isset($field_array["default"])) ? $field_array["default"] : ""),
((isset($field_array["class"])) ? $field_array["class"] : ""),
((isset($field_array["on_change"])) ? $field_array["on_change"] : "")
);
break;
case 'checkbox':
form_checkbox(
$field_name,
$field_array["value"],
$field_array["friendly_name"],
((isset($field_array["default"])) ? $field_array["default"] : ""),
((isset($field_array["form_id"])) ? $field_array["form_id"] : ""),
((isset($field_array["class"])) ? $field_array["class"] : ""),
((isset($field_array["on_change"])) ? $field_array["on_change"] : "")
);
break;
case 'checkbox_group':
while (list($check_name, $check_array) = each($field_array["items"])) {
form_checkbox(
$check_name,
$check_array["value"],
$check_array["friendly_name"],
((isset($check_array["default"])) ? $check_array["default"] : ""),
((isset($check_array["form_id"])) ? $check_array["form_id"] : ""),
((isset($field_array["class"])) ? $field_array["class"] : ""),
((isset($check_array["on_change"])) ? $check_array["on_change"] : (((isset($field_array["on_change"])) ? $field_array["on_change"] : "")))
);
print "<br>";
}
break;
case 'radio':
while (list($radio_index, $radio_array) = each($field_array["items"])) {
form_radio_button(
$field_name,
$field_array["value"],
$radio_array["radio_value"],
$radio_array["radio_caption"],
((isset($field_array["default"])) ? $field_array["default"] : ""),
((isset($field_array["class"])) ? $field_array["class"] : ""),
((isset($field_array["on_change"])) ? $field_array["on_change"] : "")
);
print "<br>";
}
break;
case 'custom':
print $field_array["value"];
break;
case 'template_checkbox':
print "<em>" . html_boolean_friendly($field_array["value"]) . "</em>";
form_hidden_box($field_name, $field_array["value"], "");
break;
case 'template_drop_array':
print "<em>" . $field_array["array"]{$field_array["value"]} . "</em>";
form_hidden_box($field_name, $field_array["value"], "");
break;
case 'template_drop_multi_rra':
$items = db_fetch_assoc($field_array["sql_print"]);
if (sizeof($items) > 0) {
foreach ($items as $item) {
print htmlspecialchars($item["name"],ENT_QUOTES) . "<br>";
}
}
break;
case 'font':
form_font_box(
$field_name,
$field_array["value"],
((isset($field_array["default"])) ? $field_array["default"] : ""),
$field_array["max_length"],
((isset($field_array["size"])) ? $field_array["size"] : "40"), "text",
((isset($field_array["form_id"])) ? $field_array["form_id"] : ""),
((isset($field_array["placeholder"])) ? $field_array["placeholder"] : "")
);
break;
case 'file':
form_file($field_name,
((isset($field_array["size"])) ? $field_array["size"] : "40"));
break;
default:
print "<em>" . htmlspecialchars($field_array["value"],ENT_QUOTES) . "</em>";
form_hidden_box($field_name, $field_array["value"], "");
break;
}
}
/* form_file - draws a standard html file input element
@arg $form_name - the name of this form element
@arg $form_size - the size (width) of the textbox */
function form_file($form_name, $form_size = 30) {
print "<input type='file'";
if (isset($_SESSION["sess_error_fields"])) {
if (!empty($_SESSION["sess_error_fields"][$form_name])) {
print "class='txtErrorTextBox'";
unset($_SESSION["sess_error_fields"][$form_name]);
}
}
print " id='$form_name' name='$form_name' size='$form_size'>";
}
/* form_filepath_box - draws a standard html textbox and provides status of a files existence
@arg $form_name - the name of this form element
@arg $form_previous_value - the current value of this form element
@arg $form_default_value - the value of this form element to use if there is
no current value available
@arg $form_max_length - the maximum number of characters that can be entered
into this textbox
@arg $form_size - the size (width) of the textbox
@arg $type - the type of textbox, either 'text' or 'password'
@arg $current_id - used to determine if a current value for this form element
exists or not. a $current_id of '0' indicates that no current value exists,
a non-zero value indicates that a current value does exist */
function form_filepath_box($form_name, $form_previous_value, $form_default_value, $form_max_length, $form_size = 30, $type = "text", $current_id = 0) {
if (($form_previous_value == "") && (empty($current_id))) {
$form_previous_value = $form_default_value;
}
print "<input type='$type'";
if (isset($_SESSION["sess_error_fields"])) {
if (!empty($_SESSION["sess_error_fields"][$form_name])) {
print "class='txtErrorTextBox'";
unset($_SESSION["sess_error_fields"][$form_name]);
}
}
if (isset($_SESSION["sess_field_values"])) {
if (!empty($_SESSION["sess_field_values"][$form_name])) {
$form_previous_value = $_SESSION["sess_field_values"][$form_name];
}
}
if (is_file(trim($form_previous_value))) {
$extra_data = "<span style='color:green'><br>[OK: FILE FOUND]</span>";
}else if (is_dir(trim($form_previous_value))) {
$extra_data = "<span style='color:red'><br>[ERROR: IS DIR]</span>";
}else if (strlen($form_previous_value) == 0) {
$extra_data = "";
}else{
$extra_data = "<span style='color:red'><br>[ERROR: FILE NOT FOUND]</span>";
}
print " id='$form_name' placeholder='Enter a valid file path' name='$form_name' size='$form_size'" . (!empty($form_max_length) ? " maxlength='$form_max_length'" : "") . " value='" . htmlspecialchars($form_previous_value, ENT_QUOTES) . "'>" . $extra_data;
}
/* form_dirpath_box - draws a standard html textbox and provides status of a directories existence
@arg $form_name - the name of this form element
@arg $form_previous_value - the current value of this form element
@arg $form_default_value - the value of this form element to use if there is
no current value available
@arg $form_max_length - the maximum number of characters that can be entered
into this textbox
@arg $form_size - the size (width) of the textbox
@arg $type - the type of textbox, either 'text' or 'password'
@arg $current_id - used to determine if a current value for this form element
exists or not. a $current_id of '0' indicates that no current value exists,
a non-zero value indicates that a current value does exist */
function form_dirpath_box($form_name, $form_previous_value, $form_default_value, $form_max_length, $form_size = 30, $type = "text", $current_id = 0) {
if (($form_previous_value == "") && (empty($current_id))) {
$form_previous_value = $form_default_value;
}
print "<input type='$type'";
if (isset($_SESSION["sess_error_fields"])) {
if (!empty($_SESSION["sess_error_fields"][$form_name])) {
print "class='txtErrorTextBox'";
unset($_SESSION["sess_error_fields"][$form_name]);
}
}
if (isset($_SESSION["sess_field_values"])) {
if (!empty($_SESSION["sess_field_values"][$form_name])) {
$form_previous_value = $_SESSION["sess_field_values"][$form_name];
}
}
if (is_dir($form_previous_value)) {
$extra_data = "<span style='color:green'><br>[OK: DIR FOUND]";
}else if (is_file($form_previous_value)) {
$extra_data = "<span style='color:red'><br>[ERROR: IS FILE]";
}else if (strlen($form_previous_value) == 0) {
$extra_data = "";
}else{
$extra_data = "<span style='color:red'><br>[ERROR: DIR NOT FOUND]";
}
print " id='$form_name' name='$form_name' placeholder='Enter a valid directory path' size='$form_size'" . (!empty($form_max_length) ? " maxlength='$form_max_length'" : "") . " value='" . htmlspecialchars($form_previous_value, ENT_QUOTES) . "'>" . $extra_data;
}
/* form_text_box - draws a standard html textbox
@arg $form_name - the name of this form element
@arg $form_previous_value - the current value of this form element
@arg $form_default_value - the value of this form element to use if there is
no current value available
@arg $form_max_length - the maximum number of characters that can be entered
into this textbox
@arg $form_size - the size (width) of the textbox
@arg $type - the type of textbox, either 'text' or 'password'
@arg $current_id - used to determine if a current value for this form element
exists or not. a $current_id of '0' indicates that no current value exists,
a non-zero value indicates that a current value does exist */
function form_text_box($form_name, $form_previous_value, $form_default_value, $form_max_length, $form_size = 30, $type = "text", $current_id = 0, $placeholder = '') {
if (($form_previous_value == "") && (empty($current_id))) {
$form_previous_value = $form_default_value;
}
print "<input type='$type'";
if (isset($_SESSION["sess_error_fields"])) {
if (!empty($_SESSION["sess_error_fields"][$form_name])) {
print "class='txtErrorTextBox'";
unset($_SESSION["sess_error_fields"][$form_name]);
}
}
if (isset($_SESSION["sess_field_values"])) {
if (!empty($_SESSION["sess_field_values"][$form_name])) {
$form_previous_value = $_SESSION["sess_field_values"][$form_name];
}
}
print " id='$form_name' autocomplete='off' " . ($placeholder != '' ? "placeholder='$placeholder'":"") . " name='$form_name' size='$form_size'" . (!empty($form_max_length) ? " maxlength='$form_max_length'" : "") . " value='" . htmlspecialchars($form_previous_value, ENT_QUOTES) . "'>\n";
}
/* form_hidden_box - draws a standard html hidden element
@arg $form_name - the name of this form element
@arg $form_previous_value - the current value of this form element
@arg $form_default_value - the value of this form element to use if there is
no current value available */
function form_hidden_box($form_name, $form_previous_value, $form_default_value) {
if ($form_previous_value == "") {
$form_previous_value = $form_default_value;
}
print "<input style='height:0px;' type='hidden' id='$form_name' name='$form_name' value='" . htmlspecialchars($form_previous_value, ENT_QUOTES) . "'>\n";
}
/* form_dropdown - draws a standard html dropdown box
@arg $form_name - the name of this form element
@arg $form_data - an array containing data for this dropdown. it can be formatted
in one of two ways:
$array["id"] = "value";
-- or --
$array[0]["id"] = 43;
$array[0]["name"] = "Red";
@arg $column_display - used to indentify the key to be used for display data. this
is only applicable if the array is formatted using the second method above
@arg $column_id - used to indentify the key to be used for id data. this
is only applicable if the array is formatted using the second method above
@arg $form_previous_value - the current value of this form element
@arg $form_none_entry - the name to use for a default 'none' element in the dropdown
@arg $form_default_value - the value of this form element to use if there is
no current value available
@arg $css_class - any css that needs to be applied to this form element
@arg $on_change - onChange modifier */
function form_dropdown($form_name, $form_data, $column_display, $column_id, $form_previous_value, $form_none_entry, $form_default_value, $class = "", $on_change = "") {
if ($form_previous_value == "") {
$form_previous_value = $form_default_value;
}
if (isset($_SESSION["sess_error_fields"])) {
if (!empty($_SESSION["sess_error_fields"][$form_name])) {
$class .= (strlen($class) ? " ":"") . "txtErrorTextBox";
unset($_SESSION["sess_error_fields"][$form_name]);
}
}
if (isset($_SESSION["sess_field_values"])) {
if (!empty($_SESSION["sess_field_values"][$form_name])) {
$form_previous_value = $_SESSION["sess_field_values"][$form_name];
}
}
if (strlen($class)) {
$class = " class='$class' ";
}
if (strlen($on_change)) {
$on_change = " onChange='$on_change' ";
}
print "<select id='" . htmlspecialchars($form_name) . "' name='" . htmlspecialchars($form_name) . "'" . $class . $on_change . ">";
if (!empty($form_none_entry)) {
print "<option value='0'" . (empty($form_previous_value) ? " selected" : "") . ">$form_none_entry</option>\n";
}
html_create_list($form_data, $column_display, $column_id, htmlspecialchars($form_previous_value, ENT_QUOTES));
print "</select>\n";
}
/** form_checkbox - draws a standard html checkbox
@param string $form_name - the name of this form element
@param string $form_previous_value - the current value of this form element
@param string $form_caption - the text to display to the right of the checkbox
@param string $form_default_value - the value of this form element to use if there is
no current value available
@param int $current_id - used to determine if a current value for this form element
exists or not. a $current_id of '0' indicates that no current value exists,
a non-zero value indicates that a current value does exist
@param string $class - specify a css class
@param string $on_change - specify a javascript onchange action */
function form_checkbox($form_name, $form_previous_value, $form_caption, $form_default_value, $current_id = 0, $class = "", $on_change = "") {
if (($form_previous_value == "") && (empty($current_id))) {
$form_previous_value = $form_default_value;
}
if (isset($_SESSION["sess_field_values"])) {
if (!empty($_SESSION["sess_field_values"][$form_name])) {
$form_previous_value = $_SESSION["sess_field_values"][$form_name];
}
}
if (strlen($class)) {
$class = " class='$class'";
}
if (strlen($on_change)) {
$on_change = " onChange='$on_change'";
}
if ($form_previous_value == "on") {
$checked = " checked";
}else{
$checked = "";
}
print "<input type='checkbox' id='$form_name' name='$form_name'" . $on_change . $class . $checked . ">" . ($form_caption != "" ? " <label for='$form_name'>$form_caption</label>\n":"");
}
/* form_radio_button - draws a standard html radio button
@arg $form_name - the name of this form element
@arg $form_previous_value - the current value of this form element (selected or not)
@arg $form_current_value - the current value of this form element (element id)
@arg $form_caption - the text to display to the right of the checkbox
@arg $form_default_value - the value of this form element to use if there is
no current value available */
function form_radio_button($form_name, $form_previous_value, $form_current_value, $form_caption, $form_default_value, $class = "", $on_change = "") {
if ($form_previous_value == "") {
$form_previous_value = $form_default_value;
}
if (isset($_SESSION["sess_field_values"])) {
if (!empty($_SESSION["sess_field_values"][$form_name])) {
$form_previous_value = $_SESSION["sess_field_values"][$form_name];
}
}
if (strlen($class)) {
$class = " class='$class' ";
}
if (strlen($on_change)) {
$on_change = " onChange='$on_change' ";
}
if ($form_previous_value == $form_current_value) {
$checked = " checked";
}else{
$checked = "";
}
$css_id = $form_name . "_" . $form_current_value;
print "<input type='radio' id='$css_id' name='$form_name' value='$form_current_value'" . $class . $on_change . $checked . "><label for='$css_id'>$form_caption</label>\n";
}
/* form_text_area - draws a standard html text area box
@arg $form_name - the name of this form element
@arg $form_previous_value - the current value of this form element (selected or not)
@arg $form_rows - the number of rows in the text area box
@arg $form_columns - the number of columns in the text area box
@arg $form_default_value - the value of this form element to use if there is
no current value available */
function form_text_area($form_name, $form_previous_value, $form_rows, $form_columns, $form_default_value, $class = "", $on_change = "") {
if ($form_previous_value == "") {
$form_previous_value = $form_default_value;
}
if (isset($_SESSION["sess_error_fields"])) {
if (!empty($_SESSION["sess_error_fields"][$form_name])) {
$class .= (strlen($class) ? " ":"") . "txtErrorTextBox";
unset($_SESSION["sess_error_fields"][$form_name]);
}
}
if (isset($_SESSION["sess_field_values"])) {
if (!empty($_SESSION["sess_field_values"][$form_name])) {
$form_previous_value = $_SESSION["sess_field_values"][$form_name];
}
}
if (strlen($class)) {
$class = " class='$class' ";
}
if (strlen($on_change)) {
$on_change = " onChange='$on_change' ";
}
print "<textarea cols='$form_columns' rows='$form_rows' id='$form_name' name='$form_name'" . $class . $on_change . ">" . htmlspecialchars($form_previous_value, ENT_QUOTES) . "</textarea>\n";
}
/* form_multi_dropdown - draws a standard html multiple select dropdown
@arg $form_name - the name of this form element
@arg $array_display - an array containing display values for this dropdown. it must
be formatted like:
$array[id] = display;
@arg $sql_previous_values - an array containing keys that should be marked as selected.
it must be formatted like:
$array[0][$column_id] = key
@arg $column_id - the name of the key used to reference the keys above */
function form_multi_dropdown($form_name, $array_display, $sql_previous_values, $column_id, $class = "", $on_change = "") {
if (isset($_SESSION["sess_error_fields"])) {
if (!empty($_SESSION["sess_error_fields"][$form_name])) {
$class .= (strlen($class) ? " ":"") . "txtErrorTextBox";
unset($_SESSION["sess_error_fields"][$form_name]);
}
}
if (strlen($class)) {
$class = " class='$class' ";
}
if (strlen($on_change)) {
$on_change = " onChange='$on_change' ";
}
print "<select id='$form_name' name='$form_name" . "[]'" . $class . " multiple>\n";
foreach (array_keys($array_display) as $id) {
print "<option value='" . $id . "'";
for ($i=0; ($i < count($sql_previous_values)); $i++) {
if ($sql_previous_values[$i][$column_id] == $id) {
print " selected";
}
}
print ">". htmlspecialchars($array_display[$id],ENT_QUOTES);
print "</option>\n";
}
print "</select>\n";
}
/*
* Second level form elements
*/
/* form_color_dropdown - draws a dropdown containing a list of colors that uses a bit
of css magic to make the dropdown item background color represent each color in
the list
@arg $form_name - the name of this form element
@arg $form_previous_value - the current value of this form element
@arg $form_none_entry - the name to use for a default 'none' element in the dropdown
@arg $form_default_value - the value of this form element to use if there is
no current value available */
function form_color_dropdown($form_name, $form_previous_value, $form_none_entry, $form_default_value, $class = "", $on_change = "") {
if ($form_previous_value == "") {
$form_previous_value = $form_default_value;
}
if (strlen($class)) {
$class = " class='$class' ";
}
$current_color = db_fetch_cell("SELECT hex FROM colors WHERE id=$form_previous_value");
if (strlen($on_change)) {
$on_change = " " . $on_change . ";";
}
$on_change = " onChange='this.style.backgroundColor=this.options[this.selectedIndex].style.backgroundColor;$on_change'";
$colors_list = db_fetch_assoc("SELECT id,hex FROM colors ORDER BY hex desc");
print "<select style='background-color: #$current_color;' id='$form_name' name='$form_name'" . $class . $on_change . ">\n";
if ($form_none_entry != "") {
print "<option value='0'>$form_none_entry</option>\n";
}
if (sizeof($colors_list) > 0) {
foreach ($colors_list as $color) {
print "<option style='background-color: #" . $color["hex"] . ";' value='" . $color["id"] . "'";
if ($form_previous_value == $color["id"]) {
print " selected";
}
print ">" . $color["hex"] . "</option>\n";
}
}
print "</select>\n";
}
/* form_font_box - draws a standard html textbox and provides status of a fonts existence
@arg $form_name - the name of this form element
@arg $form_previous_value - the current value of this form element
@arg $form_default_value - the value of this form element to use if there is
no current value available
@arg $form_max_length - the maximum number of characters that can be entered
into this textbox
@arg $form_size - the size (width) of the textbox
@arg $type - the type of textbox, either 'text' or 'password'
@arg $current_id - used to determine if a current value for this form element
exists or not. a $current_id of '0' indicates that no current value exists,
a non-zero value indicates that a current value does exist */
function form_font_box($form_name, $form_previous_value, $form_default_value, $form_max_length, $form_size = 30, $type = "text", $current_id = 0, $placeholder = '') {
global $config;
if (($form_previous_value == "") && (empty($current_id))) {
$form_previous_value = $form_default_value;
}
print "<input type='$type'";
if (isset($_SESSION["sess_error_fields"])) {
if (!empty($_SESSION["sess_error_fields"][$form_name])) {
print "class='txtErrorTextBox'";
unset($_SESSION["sess_error_fields"][$form_name]);
}
}
if (isset($_SESSION["sess_field_values"])) {
if (!empty($_SESSION["sess_field_values"][$form_name])) {
$form_previous_value = $_SESSION["sess_field_values"][$form_name];
}
}
if (strlen($form_previous_value) == 0) { # no data: defaults are used; everythings fine
$extra_data = "";
} else {
/* do some simple checks */
if (read_config_option("rrdtool_version") == "rrd-1.2.x") { # rrdtool 1.2 uses font files
if (is_file($form_previous_value)) {
$extra_data = "<span style='color:green'><br>[" . "OK: FILE FOUND" . "]</span>";
}else if (is_dir($form_previous_value)) {
$extra_data = "<span style='color:red'><br>[" . "ERROR: IS DIR" . "]</span>";
}else{
$extra_data = "<span style='color:red'><br>[" . "ERROR: FILE NOT FOUND" . "]</span>";
}
} else { # rrdtool 1.3+ use fontconfig
/* verifying all possible pango font params is too complex to be tested here
* so we only escape the font
*/
$extra_data = "<span style='color:green'><br>[" . "NO FONT VERIFICATION POSSIBLE" . "]</span>";
}
}
print " id='$form_name' " . ($placeholder != '' ? "placeholder='" . htmlspecialchars($placeholder) . "'":'') . " name='$form_name' size='$form_size'" . (!empty($form_max_length) ? " maxlength='$form_max_length'" : "") . " value='" . htmlspecialchars($form_previous_value, ENT_QUOTES) . "'>" . $extra_data;
}
/* form_confirm - draws a table presenting the user with some choice and allowing
them to either proceed (delete) or cancel
@arg $body_text - the text to prompt the user with on this form
@arg $cancel_url - the url to go to when the user clicks 'cancel'
@arg $action_url - the url to go to when the user clicks 'delete' */
function form_confirm($title_text, $body_text, $cancel_url, $action_url) { ?>
<br>
<table align="center" cellpadding="1" cellspacing="0" border="0" width="60%">
<tr>
<td class='even' colspan="10">
<table width="100%" cellpadding="3" cellspacing="0">
<tr class='cactiTableTitle'>
<td class="textHeaderDark"><strong><?php print $title_text;?></strong></td>
</tr>
<?php
form_area($body_text);
form_confirm_buttons($action_url, $cancel_url);
?>
</table>
</td>
</tr>
</table>
<?php }
/* form_confirm_buttons - draws a cancel and delete button suitable for display
on a confirmation form
@arg $cancel_url - the url to go to when the user clicks 'cancel'
@arg $action_url - the url to go to when the user clicks 'delete' */
function form_confirm_buttons($action_url, $cancel_url) {
global $config;
?>
<tr>
<td align='right'>
<input type='button' onClick='cactiReturnTo("<?php print $config['url_path'] . $cancel_url;?>")' value='Cancel'>
<input type='button' onClick='cactiReturnTo("<?php print $config['url_path'] . $action_url;?>&confirm=true")' value='Delete'>
</td>
</tr>
<?php }
/* form_save_button - draws a (save|create) and cancel button at the bottom of
an html edit form
@arg $cancel_url - the url to go to when the user clicks 'cancel'
@arg $force_type - if specified, will force the 'action' button to be either
'save' or 'create'. otherwise this field should be properly auto-detected */
function form_save_button($cancel_url, $force_type = "", $key_field = "id") {
$calt = "Cancel";
if (empty($force_type) || $force_type == "return") {
if (empty($_GET[$key_field])) {
$alt = "Create";
}else{
$alt = "Save";
if (strlen($force_type)) {
$calt = "Return";
}else{
$calt = "Cancel";
}
}
}elseif ($force_type == "save") {
$alt = "Save";
}elseif ($force_type == "create") {
$alt = "Create";
}elseif ($force_type == "import") {
$alt = "Import";
}elseif ($force_type == "export") {
$alt = "Export";
}
if ($force_type != "import" && $force_type != "export" && $force_type != "save") {
$cancel_action = "<input type='button' onClick='cactiReturnTo(\"" . $cancel_url . "\")' value='" . $calt . "'>";
}else{
$cancel_action = "";
}
?>
<table align='center' width='100%'>
<tr>
<td class="saveRow" align="right">
<input type='hidden' name='action' value='save'>
<?php print $cancel_action;?>
<input type='submit' value='<?php print $alt;?>'>
</td>
</tr>
</table>
</form>
<?php
}