__('Delete'), 2 => __('Duplicate'), 3 => __('Change Settings'), 4 => __('Full Sync Graphs'), 5 => __('Quick Sync Graphs') ); /* set default action */ set_default_action(); switch (get_request_var('action')) { case 'save': form_save(); break; case 'actions': form_actions(); break; case 'ajax_data_sources': $data_template_id = get_filter_request_var('data_template_id'); $task_item_id = get_filter_request_var('task_item_id'); $orig_task_item_id = get_filter_request_var('_task_item_id'); $data_sources = db_fetch_assoc_prepared("SELECT dtr.id, CONCAT_WS('', dt.name,' - ',' (', dtr.data_source_name,')') AS name FROM data_template_rrd AS dtr INNER JOIN data_template AS dt ON dtr.data_template_id = dt.id WHERE dtr.local_data_id = 0 AND (dtr.data_template_id = ? OR dtr.id = ?) ORDER BY dt.name, dtr.data_source_name", array($data_template_id, $task_item_id) ); $output = ''; if (cacti_sizeof($data_sources)) { foreach ($data_sources as $ds) { if ($orig_task_item_id == $ds['id']) { $output .= ''; } elseif ($task_item_id == $ds['id']) { $output .= ''; } else { $output .= ''; } } } else { $output .= ''; } print $output; break; case 'item_remove': get_filter_request_var('graph_template_id'); item_remove(); header('Location: graph_templates.php?action=template_edit&id=' . get_request_var('graph_template_id')); break; case 'item_movedown': get_filter_request_var('graph_template_id'); item_movedown(); header('Location: graph_templates.php?action=template_edit&id=' . get_request_var('graph_template_id')); break; case 'item_moveup': get_filter_request_var('graph_template_id'); item_moveup(); header('Location: graph_templates.php?action=template_edit&id=' . get_request_var('graph_template_id')); break; case 'item_edit': top_header(); item_edit(); bottom_footer(); break; case 'item': top_header(); item(); bottom_footer(); break; case 'input_remove': get_filter_request_var('graph_template_id'); input_remove(); header('Location: graph_templates.php?action=template_edit&id=' . get_request_var('graph_template_id')); break; case 'input_edit': top_header(); input_edit(); bottom_footer(); break; case 'template_edit': top_header(); template_edit(); bottom_footer(); break; default: top_header(); template(); bottom_footer(); break; } function form_save() { // sanitize ids if (isset_request_var('graph_template_id') && !is_numeric(get_nfilter_request_var('graph_template_id'))) { $graph_template_id = 0; } else { $graph_template_id = get_filter_request_var('graph_template_id'); } if (isset_request_var('save_component_template')) { /* ================= input validation ================= */ get_filter_request_var('graph_template_graph_id'); /* ==================================================== */ $push_title = true; if ($graph_template_id > 0) { $prev_title = db_fetch_cell_prepared('SELECT title FROM graph_templates_graph WHERE graph_template_id = ? AND local_graph_id = 0', array($graph_template_id)); if ($prev_title == get_nfilter_request_var('title')) { $push_title = false; } } $save1['id'] = $graph_template_id; $save1['hash'] = get_hash_graph_template($graph_template_id); $save1['name'] = form_input_validate(get_nfilter_request_var('name'), 'name', '', false, 3); $save1['multiple'] = isset_request_var('multiple') ? 'on':''; $save1['test_source'] = isset_request_var('test_source') ? 'on':''; $save2['id'] = get_nfilter_request_var('graph_template_graph_id'); $save2['local_graph_template_graph_id'] = 0; $save2['local_graph_id'] = 0; $save2['t_image_format_id'] = (isset_request_var('t_image_format_id') ? get_nfilter_request_var('t_image_format_id') : ''); $save2['image_format_id'] = form_input_validate(get_nfilter_request_var('image_format_id'), 'image_format_id', '^[0-9]+$', true, 3); $save2['t_title'] = form_input_validate((isset_request_var('t_title') ? get_nfilter_request_var('t_title') : ''), 't_title', '', true, 3); $save2['title'] = form_input_validate(get_nfilter_request_var('title'), 'title', '', (isset_request_var('t_title') ? true : false), 3); $save2['t_height'] = form_input_validate((isset_request_var('t_height') ? get_nfilter_request_var('t_height') : ''), 't_height', '', true, 3); $save2['height'] = form_input_validate(get_nfilter_request_var('height'), 'height', '^[0-9]+$', (isset_request_var('t_height') ? true : false), 3); $save2['t_width'] = form_input_validate((isset_request_var('t_width') ? get_nfilter_request_var('t_width') : ''), 't_width', '', true, 3); $save2['width'] = form_input_validate(get_nfilter_request_var('width'), 'width', '^[0-9]+$', (isset_request_var('t_width') ? true : false), 3); $save2['t_upper_limit'] = form_input_validate((isset_request_var('t_upper_limit') ? get_nfilter_request_var('t_upper_limit') : ''), 't_upper_limit', '', true, 3); $save2['upper_limit'] = form_input_validate(get_nfilter_request_var('upper_limit'), 'upper_limit', '^(-?([0-9]+(\.[0-9]*)?|[0-9]*\.[0-9]+)([eE][+\-]?[0-9]+)?)|U$', ((isset_request_var('t_upper_limit') || (strlen(get_nfilter_request_var('upper_limit')) === 0)) ? true : false), 3); $save2['t_lower_limit'] = form_input_validate((isset_request_var('t_lower_limit') ? get_nfilter_request_var('t_lower_limit') : ''), 't_lower_limit', '', true, 3); $save2['lower_limit'] = form_input_validate(get_nfilter_request_var('lower_limit'), 'lower_limit', '^(-?([0-9]+(\.[0-9]*)?|[0-9]*\.[0-9]+)([eE][+\-]?[0-9]+)?)|U$', ((isset_request_var('t_lower_limit') || (strlen(get_nfilter_request_var('lower_limit')) === 0)) ? true : false), 3); $save2['t_vertical_label'] = form_input_validate((isset_request_var('t_vertical_label') ? get_nfilter_request_var('t_vertical_label') : ''), 't_vertical_label', '', true, 3); $save2['vertical_label'] = form_input_validate(get_nfilter_request_var('vertical_label'), 'vertical_label', '', true, 3); $save2['t_slope_mode'] = form_input_validate((isset_request_var('t_slope_mode') ? get_nfilter_request_var('t_slope_mode') : ''), 't_slope_mode', '', true, 3); $save2['slope_mode'] = form_input_validate((isset_request_var('slope_mode') ? get_nfilter_request_var('slope_mode') : ''), 'slope_mode', '', true, 3); $save2['t_auto_scale'] = form_input_validate((isset_request_var('t_auto_scale') ? get_nfilter_request_var('t_auto_scale') : ''), 't_auto_scale', '', true, 3); $save2['auto_scale'] = form_input_validate((isset_request_var('auto_scale') ? get_nfilter_request_var('auto_scale') : ''), 'auto_scale', '', true, 3); $save2['t_auto_scale_opts'] = form_input_validate((isset_request_var('t_auto_scale_opts') ? get_nfilter_request_var('t_auto_scale_opts') : ''), 't_auto_scale_opts', '', true, 3); $save2['auto_scale_opts'] = form_input_validate(get_nfilter_request_var('auto_scale_opts'), 'auto_scale_opts', '', true, 3); $save2['t_auto_scale_log'] = form_input_validate((isset_request_var('t_auto_scale_log') ? get_nfilter_request_var('t_auto_scale_log') : ''), 't_auto_scale_log', '', true, 3); $save2['auto_scale_log'] = form_input_validate((isset_request_var('auto_scale_log') ? get_nfilter_request_var('auto_scale_log') : ''), 'auto_scale_log', '', true, 3); $save2['t_scale_log_units'] = form_input_validate((isset_request_var('t_scale_log_units') ? get_nfilter_request_var('t_scale_log_units') : ''), 't_scale_log_units', '', true, 3); $save2['scale_log_units'] = form_input_validate((isset_request_var('scale_log_units') ? get_nfilter_request_var('scale_log_units') : ''), 'scale_log_units', '', true, 3); $save2['t_auto_scale_rigid'] = form_input_validate((isset_request_var('t_auto_scale_rigid') ? get_nfilter_request_var('t_auto_scale_rigid') : ''), 't_auto_scale_rigid', '', true, 3); $save2['auto_scale_rigid'] = form_input_validate((isset_request_var('auto_scale_rigid') ? get_nfilter_request_var('auto_scale_rigid') : ''), 'auto_scale_rigid', '', true, 3); $save2['t_auto_padding'] = form_input_validate((isset_request_var('t_auto_padding') ? get_nfilter_request_var('t_auto_padding') : ''), 't_auto_padding', '', true, 3); $save2['auto_padding'] = form_input_validate((isset_request_var('auto_padding') ? get_nfilter_request_var('auto_padding') : ''), 'auto_padding', '', true, 3); $save2['t_base_value'] = form_input_validate((isset_request_var('t_base_value') ? get_nfilter_request_var('t_base_value') : ''), 't_base_value', '', true, 3); $save2['base_value'] = form_input_validate(get_nfilter_request_var('base_value'), 'base_value', '^[0-9]+$', (isset_request_var('t_base_value') ? true : false), 3); $save2['t_unit_value'] = form_input_validate((isset_request_var('t_unit_value') ? get_nfilter_request_var('t_unit_value') : ''), 't_unit_value', '', true, 3); $save2['unit_value'] = form_input_validate(get_nfilter_request_var('unit_value'), 'unit_value', '', true, 3); $save2['t_unit_exponent_value'] = form_input_validate((isset_request_var('t_unit_exponent_value') ? get_nfilter_request_var('t_unit_exponent_value') : ''), 't_unit_exponent_value', '', true, 3); $save2['unit_exponent_value'] = form_input_validate(get_nfilter_request_var('unit_exponent_value'), 'unit_exponent_value', '^-?[0-9]+$', true, 3); $save2['t_alt_y_grid'] = form_input_validate((isset_request_var('t_alt_y_grid') ? get_nfilter_request_var('t_alt_y_grid') : ''), 't_alt_y_grid', '', true, 3); $save2['alt_y_grid'] = form_input_validate((isset_request_var('alt_y_grid') ? get_nfilter_request_var('alt_y_grid') : ''), 'alt_y_grid', '', true, 3); $save2['t_right_axis'] = form_input_validate((isset_request_var('t_right_axis') ? get_nfilter_request_var('t_right_axis') : ''), 't_right_axis', '', true, 3); $save2['right_axis'] = form_input_validate((isset_request_var('right_axis') ? get_nfilter_request_var('right_axis') : ''), 'right_axis', '^-?([0-9]+(\.[0-9]*)?|\.[0-9]+):-?([0-9]+(\.[0-9]*)?|\.[0-9]+)$', true, 3); $save2['t_right_axis_label'] = form_input_validate((isset_request_var('t_right_axis_label') ? get_nfilter_request_var('t_right_axis_label') : ''), 't_right_axis_label', '', true, 3); $save2['right_axis_label'] = form_input_validate((isset_request_var('right_axis_label') ? get_nfilter_request_var('right_axis_label') : ''), 'right_axis_label', '', true, 3); $save2['t_right_axis_format'] = form_input_validate((isset_request_var('t_right_axis_format') ? get_nfilter_request_var('t_right_axis_format') : ''), 't_right_axis_format', '', true, 3); $save2['right_axis_format'] = form_input_validate((isset_request_var('right_axis_format') ? get_nfilter_request_var('right_axis_format') : ''), 'right_axis_format', '^[0-9]+$', true, 3); $save2['t_no_gridfit'] = form_input_validate((isset_request_var('t_no_gridfit') ? get_nfilter_request_var('t_no_gridfit') : ''), 't_no_gridfit', '', true, 3); $save2['no_gridfit'] = form_input_validate((isset_request_var('no_gridfit') ? get_nfilter_request_var('no_gridfit') : ''), 'no_gridfit', '', true, 3); $save2['t_unit_length'] = form_input_validate((isset_request_var('t_unit_length') ? get_nfilter_request_var('t_unit_length') : ''), 't_unit_length', '', true, 3); $save2['unit_length'] = form_input_validate((isset_request_var('unit_length') ? get_nfilter_request_var('unit_length') : ''), 'unit_length', '^[0-9]+$', true, 3); $save2['t_tab_width'] = form_input_validate((isset_request_var('t_tab_width') ? get_nfilter_request_var('t_tab_width') : ''), 't_tab_width', '', true, 3); $save2['tab_width'] = form_input_validate((isset_request_var('tab_width') ? get_nfilter_request_var('tab_width') : ''), 'tab_width', '^[0-9]*$', true, 3); $save2['t_dynamic_labels'] = form_input_validate((isset_request_var('t_dynamic_labels') ? get_nfilter_request_var('t_dynamic_labels') : ''), 't_dynamic_labels', '', true, 3); $save2['dynamic_labels'] = form_input_validate((isset_request_var('dynamic_labels') ? get_nfilter_request_var('dynamic_labels') : ''), 'dynamic_labels', '', true, 3); $save2['t_force_rules_legend'] = form_input_validate((isset_request_var('t_force_rules_legend') ? get_nfilter_request_var('t_force_rules_legend') : ''), 't_force_rules_legend', '', true, 3); $save2['force_rules_legend'] = form_input_validate((isset_request_var('force_rules_legend') ? get_nfilter_request_var('force_rules_legend') : ''), 'force_rules_legend', '', true, 3); $save2['t_legend_position'] = form_input_validate((isset_request_var('t_legend_position') ? get_nfilter_request_var('t_legend_position') : ''), 't_legend_position', '', true, 3); $save2['legend_position'] = form_input_validate((isset_request_var('legend_position') ? get_nfilter_request_var('legend_position') : ''), 'legend_position', '', true, 3); $save2['t_legend_direction'] = form_input_validate((isset_request_var('t_legend_direction') ? get_nfilter_request_var('t_legend_direction') : ''), 't_legend_direction', '', true, 3); $save2['legend_direction'] = form_input_validate((isset_request_var('legend_direction') ? get_nfilter_request_var('legend_direction') : ''), 'legend_direction', '', true, 3); $save2['t_right_axis_formatter'] = form_input_validate((isset_request_var('t_right_axis_formatter') ? get_nfilter_request_var('t_right_axis_formatter') : ''), 't_right_axis_formatter', '', true, 3); $save2['right_axis_formatter'] = form_input_validate((isset_request_var('right_axis_formatter') ? get_nfilter_request_var('right_axis_formatter') : ''), 'right_axis_formatter', '', true, 3); $save2['t_left_axis_format'] = form_input_validate((isset_request_var('t_left_axis_format') ? get_nfilter_request_var('t_left_axis_format') : ''), 't_left_axis_format', '', true, 3); $save2['left_axis_format'] = form_input_validate((isset_request_var('left_axis_format') ? get_nfilter_request_var('left_axis_format') : ''), 'left_axis_format', '^[0-9]+$', true, 3); $save2['t_left_axis_formatter'] = form_input_validate((isset_request_var('t_left_axis_formatter') ? get_nfilter_request_var('t_left_axis_formatter') : ''), 't_left_axis_formatter', '', true, 3); $save2['left_axis_formatter'] = form_input_validate((isset_request_var('left_axis_formatter') ? get_nfilter_request_var('left_axis_formatter') : ''), 'left_axis_formatter', '', true, 3); if (!is_error_message()) { $graph_template_id = sql_save($save1, 'graph_templates'); if ($graph_template_id) { raise_message(1); } else { raise_message(2); } } if (!is_error_message()) { $save2['graph_template_id'] = $graph_template_id; $graph_template_graph_id = sql_save($save2, 'graph_templates_graph'); if ($graph_template_graph_id) { raise_message(1); push_out_graph($graph_template_graph_id, $push_title); } else { raise_message(2); } } } elseif (isset_request_var('save_component_item')) { /* ================= input validation ================= */ get_filter_request_var('graph_template_id'); get_filter_request_var('task_item_id'); get_filter_request_var('sequence'); get_filter_request_var('color_id'); get_filter_request_var('graph_template_item_id'); /* ==================================================== */ global $graph_item_types; $items[0] = array(); if ($graph_item_types[get_nfilter_request_var('graph_type_id')] == 'LEGEND') { /* this can be a major time saver when creating lots of graphs with the typical GPRINT LAST/AVERAGE/MAX legends */ $items = array( 0 => array( 'color_id' => '0', 'graph_type_id' => '9', 'consolidation_function_id' => '4', 'text_format' => __('Cur:'), 'hard_return' => '' ), 1 => array( 'color_id' => '0', 'graph_type_id' => '9', 'consolidation_function_id' => '1', 'text_format' => __('Avg:'), 'hard_return' => '' ), 2 => array( 'color_id' => '0', 'graph_type_id' => '9', 'consolidation_function_id' => '3', 'text_format' => __('Max:'), 'hard_return' => 'on' ) ); } elseif ($graph_item_types[get_nfilter_request_var('graph_type_id')] == 'LEGEND_CAMM') { /* this can be a major time saver when creating lots of graphs with the typical GPRINT LAST/AVERAGE/MAX legends */ $items = array( 0 => array( 'color_id' => '0', 'graph_type_id' => '9', 'consolidation_function_id' => '4', 'text_format' => __('Cur:'), 'hard_return' => '' ), 1 => array( 'color_id' => '0', 'graph_type_id' => '9', 'consolidation_function_id' => '1', 'text_format' => __('Avg:'), 'hard_return' => '' ), 2 => array( 'color_id' => '0', 'graph_type_id' => '9', 'consolidation_function_id' => '2', 'text_format' => __('Min:'), 'hard_return' => '' ), 3 => array( 'color_id' => '0', 'graph_type_id' => '9', 'consolidation_function_id' => '3', 'text_format' => __('Max:'), 'hard_return' => 'on' ) ); } $sequence = get_request_var('sequence'); foreach ($items as $item) { /* generate a new sequence if needed */ if (empty($sequence)) { $sequence = get_sequence(0, 'sequence', 'graph_templates_item', 'graph_template_id=' . get_request_var('graph_template_id') . ' AND local_graph_id=0'); } $task_item_changed = true; if (get_request_var('graph_template_item_id') > 0) { $task_item_id = db_fetch_cell_prepared('SELECT task_item_id FROM graph_templates_item WHERE id = ?', array(get_request_var('graph_template_item_id')) ); if (get_nfilter_request_var('task_item_id') == get_nfilter_request_var('_task_item_id')) { $task_item_changed = false; } } $save['id'] = get_request_var('graph_template_item_id'); $save['hash'] = get_hash_graph_template(get_request_var('graph_template_item_id'), 'graph_template_item'); $save['graph_template_id'] = get_request_var('graph_template_id'); $save['local_graph_id'] = 0; $save['task_item_id'] = form_input_validate(get_request_var('task_item_id'), 'task_item_id', '^[0-9]+$', true, 3); $save['color_id'] = form_input_validate((isset($item['color_id']) ? $item['color_id'] : get_request_var('color_id')), 'color_id', '', true, 3); /* if alpha is disabled, use invisible_alpha instead */ if (!isset_request_var('alpha')) { set_request_var('alpha', get_nfilter_request_var('invisible_alpha')); } $save['alpha'] = form_input_validate((isset($item['alpha']) ? $item['alpha'] : get_nfilter_request_var('alpha')), 'alpha', '', true, 3); $save['graph_type_id'] = form_input_validate((isset($item['graph_type_id']) ? $item['graph_type_id'] : get_filter_request_var('graph_type_id')), 'graph_type_id', '^[0-9]+$', true, 3); if (isset_request_var('line_width') || isset($item['line_width'])) { $save['line_width'] = form_input_validate((isset($item['line_width']) ? $item['line_width'] : get_nfilter_request_var('line_width')), 'line_width', '(^[0-9]+[\.,0-9]+$|^[0-9]+$)', true, 3); } else { // make sure to transfer old LINEx style into line_width on save switch ($save['graph_type_id']) { case GRAPH_ITEM_TYPE_LINE1: $save['line_width'] = 1; break; case GRAPH_ITEM_TYPE_LINE2: $save['line_width'] = 2; break; case GRAPH_ITEM_TYPE_LINE3: $save['line_width'] = 3; break; default: $save['line_width'] = 0; } } $save['dashes'] = form_input_validate((isset_request_var('dashes') ? get_nfilter_request_var('dashes') : ''), 'dashes', '^[0-9]+[,0-9]*$', true, 3); $save['dash_offset'] = form_input_validate((isset_request_var('dash_offset') ? get_nfilter_request_var('dash_offset') : ''), 'dash_offset', '^[0-9]+$', true, 3); $save['cdef_id'] = form_input_validate(get_nfilter_request_var('cdef_id'), 'cdef_id', '^[0-9]+$', true, 3); $save['vdef_id'] = form_input_validate(get_nfilter_request_var('vdef_id'), 'vdef_id', '^[0-9]+$', true, 3); $save['shift'] = form_input_validate((isset_request_var('shift') ? get_nfilter_request_var('shift') : ''), 'shift', '^((on)|)$', true, 3); $save['consolidation_function_id'] = form_input_validate((isset($item['consolidation_function_id']) ? $item['consolidation_function_id'] : get_nfilter_request_var('consolidation_function_id')), 'consolidation_function_id', '^[0-9]+$', true, 3); $save['textalign'] = form_input_validate((isset_request_var('textalign') ? get_nfilter_request_var('textalign') : ''), 'textalign', '^[a-z]+$', true, 3); $save['text_format'] = form_input_validate((isset($item['text_format']) ? $item['text_format'] : get_nfilter_request_var('text_format')), 'text_format', '', true, 3); $save['value'] = form_input_validate(get_nfilter_request_var('value'), 'value', '', true, 3); $save['hard_return'] = form_input_validate(((isset($item['hard_return']) ? $item['hard_return'] : (isset_request_var('hard_return') ? get_nfilter_request_var('hard_return') : ''))), 'hard_return', '', true, 3); $save['gprint_id'] = form_input_validate(get_nfilter_request_var('gprint_id'), 'gprint_id', '^[0-9]+$', true, 3); $save['sequence'] = $sequence; if (!is_error_message()) { /* Before we save the item, let's get a look at task_item_id <-> input associations */ $orig_data_source_graph_inputs = db_fetch_assoc_prepared("SELECT gtin.id, gtin.name, gti.task_item_id FROM graph_template_input AS gtin INNER JOIN graph_template_input_defs AS gtid ON gtin.id = gtid.graph_template_input_id INNER JOIN graph_templates_item AS gti ON gtid.graph_template_item_id = gti.id WHERE gtin.graph_template_id = ? AND gtin.column_name = 'task_item_id' GROUP BY gti.task_item_id", array($save['graph_template_id'])); $orig_data_source_to_input = array_rekey($orig_data_source_graph_inputs, 'task_item_id', 'id'); $graph_template_item_id = sql_save($save, 'graph_templates_item'); if ($graph_template_item_id) { raise_message(1); if (!empty($save['task_item_id'])) { /* old item clean-up. Don't delete anything if the item <-> task_item_id association remains the same. */ if (get_nfilter_request_var('_task_item_id') != get_nfilter_request_var('task_item_id')) { /* It changed. Delete any old associations */ db_execute_prepared( 'DELETE FROM graph_template_input_defs WHERE graph_template_item_id = ?', array($graph_template_item_id) ); /* Input for current data source exists and has changed. Update the association */ if (isset($orig_data_source_to_input[$save['task_item_id']])) { db_execute_prepared( 'REPLACE INTO graph_template_input_defs (graph_template_input_id, graph_template_item_id) VALUES (?, ?)', array($orig_data_source_to_input[$save['task_item_id']], $graph_template_item_id) ); } } /* an input for the current data source does NOT currently exist, let's create one */ if (!isset($orig_data_source_to_input[$save['task_item_id']])) { $ds_name = db_fetch_cell_prepared('SELECT data_source_name FROM data_template_rrd WHERE id = ?', array(get_nfilter_request_var('task_item_id')) ); db_execute_prepared( "REPLACE INTO graph_template_input (hash, graph_template_id, name, column_name) VALUES (?, ?, ?, 'task_item_id')", array(get_hash_graph_template(0, 'graph_template_input'), $save['graph_template_id'], "Data Source [$ds_name]") ); $graph_template_input_id = db_fetch_insert_id(); $graph_items = db_fetch_assoc_prepared('SELECT id FROM graph_templates_item WHERE graph_template_id = ? AND task_item_id = ?', array($save['graph_template_id'], get_nfilter_request_var('task_item_id')) ); if (cacti_sizeof($graph_items)) { foreach ($graph_items as $graph_item) { db_execute_prepared( 'REPLACE INTO graph_template_input_defs (graph_template_input_id, graph_template_item_id) VALUES (?, ?)', array($graph_template_input_id, $graph_item['id']) ); } } } } push_out_graph_item($graph_template_item_id, $task_item_changed); if (isset($orig_data_source_to_input[get_nfilter_request_var('task_item_id')])) { /* make sure all current graphs using this graph input are aware of this change */ push_out_graph_input($orig_data_source_to_input[get_nfilter_request_var('task_item_id')], $graph_template_item_id, array($graph_template_item_id => $graph_template_item_id)); } } else { raise_message(2); } } $sequence = 0; } if (is_error_message()) { header('Location: graph_templates.php?action=item_edit&graph_template_item_id=' . (empty($graph_template_item_id) ? get_nfilter_request_var('graph_template_item_id') : $graph_template_item_id) . '&id=' . get_nfilter_request_var('graph_template_id')); exit; } else { header('Location: graph_templates.php?action=template_edit&id=' . get_nfilter_request_var('graph_template_id')); exit; } } elseif ((isset_request_var('save_component_input')) && (!is_error_message())) { $graph_input_values = array(); $selected_graph_items = array(); /* ================= input validation ================= */ get_filter_request_var('graph_template_input_id'); get_filter_request_var('graph_template_id'); /* ==================================================== */ $save['id'] = get_nfilter_request_var('graph_template_input_id'); $save['hash'] = get_hash_graph_template(get_nfilter_request_var('graph_template_input_id'), 'graph_template_input'); $save['graph_template_id'] = get_nfilter_request_var('graph_template_id'); $save['name'] = form_input_validate(get_nfilter_request_var('name'), 'name', '', false, 3); $save['description'] = form_input_validate(get_nfilter_request_var('description'), 'description', '', true, 3); $save['column_name'] = form_input_validate(get_nfilter_request_var('column_name'), 'column_name', '', true, 3); if (!is_error_message()) { $graph_template_input_id = sql_save($save, 'graph_template_input'); if ($graph_template_input_id) { raise_message(1); /* list all graph items from the db so we can compare them with the current form */ $db_selected_graph_item = array_rekey( db_fetch_assoc_prepared('SELECT graph_template_item_id FROM graph_template_input_defs WHERE graph_template_input_id = ?', array($graph_template_input_id)), 'graph_template_item_id', 'graph_template_item_id' ); /* list all select graph items for use down below */ foreach ($_POST as $var => $val) { if (preg_match('/^i_(\d+)$/', $var, $matches)) { /* ================= input validation ================= */ input_validate_input_number($matches[1], 'i[1]'); /* ==================================================== */ $selected_graph_items[$matches[1]] = $matches[1]; if (isset($db_selected_graph_item[$matches[1]])) { /* is selected and exists in the db; old item */ $old_members[$matches[1]] = $matches[1]; } else { /* is selected and does not exist the db; new item */ $new_members[$matches[1]] = $matches[1]; } } } if ((isset($new_members)) && (cacti_sizeof($new_members) > 0)) { foreach ($new_members as $item_id) { push_out_graph_input($graph_template_input_id, $item_id, (isset($new_members) ? $new_members : array())); } } db_execute_prepared('DELETE FROM graph_template_input_defs WHERE graph_template_input_id = ?', array($graph_template_input_id)); if (cacti_sizeof($selected_graph_items) > 0) { foreach ($selected_graph_items as $graph_template_item_id) { db_execute_prepared('INSERT INTO graph_template_input_defs (graph_template_input_id, graph_template_item_id) VALUES (?, ?)', array($graph_template_input_id, $graph_template_item_id)); } } } else { raise_message(2); } } if (is_error_message()) { header('Location: graph_templates.php?action=input_edit&graph_template_input_id=' . (empty($graph_template_input_id) ? get_nfilter_request_var('graph_template_input_id') : $graph_template_input_id) . '&graph_template_id=' . get_nfilter_request_var('graph_template_id')); exit; } else { header('Location: graph_templates.php?action=template_edit&id=' . get_nfilter_request_var('graph_template_id')); exit; } } header('Location: graph_templates.php?action=template_edit&id=' . (empty($graph_template_id) ? get_nfilter_request_var('graph_template_id') : $graph_template_id)); } function item_movedown() { /* ================= input validation ================= */ get_filter_request_var('id'); get_filter_request_var('graph_template_id'); /* ==================================================== */ global $graph_item_types; $arr = get_graph_group(get_request_var('id')); $next_id = get_graph_parent(get_request_var('id'), 'next'); $graph_type = db_fetch_cell_prepared('SELECT graph_type_id FROM graph_templates_item WHERE id = ?', array(get_request_var('id')) ); $text_type = $graph_item_types[$graph_type]; if (!empty($next_id) && isset($arr[get_request_var('id')])) { move_graph_group(get_request_var('id'), $arr, $next_id, 'next'); } elseif (!preg_match('/(AREA|STACK|LINE)/', $text_type)) { /* this is so we know the "other" graph item to propagate the changes to */ $next_item = get_item('graph_templates_item', 'sequence', get_request_var('id'), 'graph_template_id=' . get_request_var('graph_template_id') . ' AND local_graph_id=0', 'next'); move_item_down('graph_templates_item', get_request_var('id'), 'graph_template_id=' . get_request_var('graph_template_id') . ' AND local_graph_id=0'); } if (!isempty_request_var('graph_template_id')) { resequence_graphs_simple(get_request_var('graph_template_id')); } } function item_moveup() { /* ================= input validation ================= */ get_filter_request_var('id'); get_filter_request_var('graph_template_id'); /* ==================================================== */ global $graph_item_types; $arr = get_graph_group(get_request_var('id')); $next_id = get_graph_parent(get_request_var('id'), 'previous'); $graph_type = db_fetch_cell_prepared('SELECT graph_type_id FROM graph_templates_item WHERE id = ?', array(get_request_var('id')) ); $text_type = $graph_item_types[$graph_type]; if (!empty($next_id) && isset($arr[get_request_var('id')])) { move_graph_group(get_request_var('id'), $arr, $next_id, 'previous'); } elseif (!preg_match('/(AREA|STACK|LINE)/', $text_type)) { /* this is so we know the "other" graph item to propagate the changes to */ $last_item = get_item('graph_templates_item', 'sequence', get_request_var('id'), 'graph_template_id=' . get_request_var('graph_template_id') . ' AND local_graph_id=0', 'previous'); move_item_up('graph_templates_item', get_request_var('id'), 'graph_template_id=' . get_request_var('graph_template_id') . ' AND local_graph_id=0'); } if (!isempty_request_var('graph_template_id')) { resequence_graphs_simple(get_request_var('graph_template_id')); } } function item_remove() { /* ================= input validation ================= */ get_filter_request_var('id'); get_filter_request_var('graph_template_id'); /* ==================================================== */ db_execute_prepared('DELETE FROM graph_templates_item WHERE id = ?', array(get_request_var('id'))); db_execute_prepared('DELETE FROM graph_templates_item WHERE local_graph_template_item_id = ?', array(get_request_var('id'))); /* delete the graph item input if it is empty */ $graph_item_inputs = db_fetch_assoc_prepared('SELECT graph_template_input.id FROM (graph_template_input, graph_template_input_defs) WHERE graph_template_input.id = graph_template_input_defs.graph_template_input_id AND graph_template_input.graph_template_id = ? AND graph_template_input_defs.graph_template_item_id = ? GROUP BY graph_template_input.id', array(get_request_var('graph_template_id'), get_request_var('id'))); if (cacti_sizeof($graph_item_inputs) > 0) { foreach ($graph_item_inputs as $graph_item_input) { if (cacti_sizeof(db_fetch_assoc_prepared('SELECT graph_template_input_id FROM graph_template_input_defs WHERE graph_template_input_id = ?', array($graph_item_input['id']))) == 1) { db_execute_prepared('DELETE FROM graph_template_input WHERE id = ?', array($graph_item_input['id'])); } } } db_execute_prepared('DELETE FROM graph_template_input_defs WHERE graph_template_item_id = ?', array(get_request_var('id'))); } function item_edit() { global $struct_graph_item, $graph_item_types, $consolidation_functions; /* ================= input validation ================= */ get_filter_request_var('id'); get_filter_request_var('graph_template_id'); get_filter_request_var('data_template_id'); /* ==================================================== */ /* ================= input validation and session storage ================= */ $filters = array( 'data_template_id' => array( 'filter' => FILTER_VALIDATE_INT, 'pageset' => true, 'default' => '0' ), ); validate_store_request_vars($filters, 'sess_gti_' . get_filter_request_var('graph_template_id')); /* ================= input validation ================= */ if (get_request_var('graph_template_id') > 0 || isset_request_var('id')) { $sql_where = ''; $sql_params = array(); if (get_request_var('id') > 0) { $sql_where .= ' AND gti.id = ?'; $sql_params[] = get_request_var('id'); } if (get_request_var('graph_template_id') > 0) { $sql_where .= ' AND gti.graph_template_id = ?'; $sql_params[] = get_request_var('graph_template_id'); } $data_templates = array_rekey( db_fetch_assoc_prepared("SELECT DISTINCT dtr.data_template_id FROM data_template_rrd AS dtr INNER JOIN graph_templates_item AS gti ON dtr.id = gti.task_item_id WHERE dtr.local_data_id = 0 $sql_where ORDER BY dtr.data_template_id", $sql_params ), 'data_template_id', 'data_template_id' ); if (cacti_sizeof($data_templates)) { if (!isset($data_templates[get_request_var('data_template_id')])) { foreach ($data_templates as $dt) { set_request_var('data_template_id', $dt); break; } } } } form_start('graph_templates.php', 'graph_items'); $header_label = __esc('Graph Template Items [edit graph: %s]', db_fetch_cell_prepared('SELECT name FROM graph_templates WHERE id = ?', array(get_request_var('graph_template_id')))); html_start_box($header_label, '100%', true, '3', 'center', ''); if (!isempty_request_var('id')) { $template_item = db_fetch_row_prepared('SELECT * FROM graph_templates_item WHERE id = ?', array(get_request_var('id')) ); } /* by default, select the LAST DS chosen to make everyone's lives easier */ if (!isempty_request_var('graph_template_id')) { $default = db_fetch_row_prepared('SELECT task_item_id FROM graph_templates_item WHERE graph_template_id = ? AND local_graph_id = 0 ORDER BY sequence DESC', array(get_request_var('graph_template_id')) ); if (cacti_sizeof($default) > 0) { $struct_graph_item['task_item_id']['default'] = $default['task_item_id']; } else { $struct_graph_item['task_item_id']['default'] = 0; } } if (isset_request_var('data_template_id')) { $sql_where = ' AND dtr.data_template_id = ' . get_filter_request_var('data_template_id'); } else { $sql_where = ''; } $data_template_helper = array( 'data_template_id' => array( 'friendly_name' => __('Data Template Filter'), 'method' => 'drop_sql', 'sql' => 'SELECT id, name FROM data_template ORDER BY name', 'default' => '0', 'value' => (isset_request_var('data_template_id') ? get_filter_request_var('data_template_id') : '0'), 'none_value' => __('Any'), 'description' => __('This filter will limit the Data Sources visible in the Data Source dropdown.') ) ); /* modifications to the default graph items array */ $struct_graph_item['task_item_id']['sql'] = "SELECT dtr.id, CONCAT_WS('', dt.name,' - ',' (', dtr.data_source_name,')') AS name FROM data_template_rrd AS dtr INNER JOIN data_template AS dt ON dtr.data_template_id = dt.id WHERE dtr.local_data_id = 0 $sql_where ORDER BY dt.name, dtr.data_source_name"; $mystruct_graph_item = array_merge($data_template_helper, $struct_graph_item); $form_array = array(); foreach ($mystruct_graph_item as $field_name => $field_array) { $form_array += array($field_name => $mystruct_graph_item[$field_name]); if ($field_name != 'data_template_id') { $form_array[$field_name]['value'] = (isset($template_item) ? $template_item[$field_name] : ''); $form_array[$field_name]['form_id'] = (isset($template_item) ? $template_item['id'] : '0'); } else { $form_array[$field_name]['value'] = get_request_var('data_template_id'); $form_array[$field_name]['form_id'] = (isset($template_item) ? $template_item['id'] : '0'); } } draw_edit_form( array( 'config' => array('no_form_tag' => true), 'fields' => $form_array ) ); html_end_box(true, true); form_hidden_box('graph_template_item_id', (isset($template_item) ? $template_item['id'] : '0'), ''); form_hidden_box('graph_template_id', get_request_var('graph_template_id'), '0'); form_hidden_box('_graph_type_id', (isset($template_item) ? $template_item['graph_type_id'] : '0'), ''); form_hidden_box('_task_item_id', (isset($template_item) ? $template_item['task_item_id'] : '0'), ''); form_hidden_box('save_component_item', '1', ''); form_hidden_box('invisible_alpha', $form_array['alpha']['value'], 'FF'); form_hidden_box('rrdtool_version', get_rrdtool_version(), ''); form_save_button('graph_templates.php?action=template_edit&id=' . get_request_var('graph_template_id')); ?> array('regexp' => '/^([a-zA-Z0-9_]+)$/'))); /* ==================================================== */ /* if we are to save this form, instead of display it */ if (isset_request_var('selected_items')) { $selected_items = sanitize_unserialize_selected_items(get_nfilter_request_var('selected_items')); if ($selected_items != false) { if (get_request_var('drp_action') == '1') { // delete db_execute('DELETE FROM graph_templates WHERE ' . array_to_sql_or($selected_items, 'id')); $snmp_graph_ids = array_rekey( db_fetch_assoc('SELECT id FROM snmp_query_graph WHERE ' . array_to_sql_or($selected_items, 'graph_template_id')), 'id', 'id' ); if (cacti_sizeof($snmp_graph_ids)) { db_execute('DELETE FROM snmp_query_graph WHERE ' . array_to_sql_or($selected_items, 'graph_template_id')); db_execute('DELETE FROM snmp_query_graph_rrd WHERE snmp_query_graph_id IN (' . implode(', ', $snmp_graph_ids) . ')'); db_execute('DELETE FROM snmp_query_graph_rrd_sv WHERE snmp_query_graph_id IN (' . implode(', ', $snmp_graph_ids) . ')'); db_execute('DELETE FROM snmp_query_graph_sv WHERE snmp_query_graph_id IN (' . implode(', ', $snmp_graph_ids) . ')'); } $graph_template_input = db_fetch_assoc('SELECT id FROM graph_template_input WHERE ' . array_to_sql_or($selected_items, 'graph_template_id')); if (cacti_sizeof($graph_template_input) > 0) { foreach ($graph_template_input as $item) { db_execute_prepared('DELETE FROM graph_template_input_defs WHERE graph_template_input_id = ?', array($item['id'])); } } db_execute('DELETE FROM graph_template_input WHERE ' . array_to_sql_or($selected_items, 'graph_template_id')); db_execute('DELETE FROM graph_templates_graph WHERE ' . array_to_sql_or($selected_items, 'graph_template_id') . ' AND local_graph_id=0'); db_execute('DELETE FROM graph_templates_item WHERE ' . array_to_sql_or($selected_items, 'graph_template_id') . ' AND local_graph_id=0'); db_execute('DELETE FROM host_template_graph WHERE ' . array_to_sql_or($selected_items, 'graph_template_id')); /* 'undo' any graph that is currently using this template */ db_execute('UPDATE graph_templates_graph SET local_graph_template_graph_id=0, graph_template_id=0 WHERE ' . array_to_sql_or($selected_items, 'graph_template_id')); db_execute('UPDATE graph_templates_item SET local_graph_template_item_id=0, graph_template_id=0 WHERE ' . array_to_sql_or($selected_items, 'graph_template_id')); db_execute('UPDATE graph_local SET graph_template_id=0 WHERE ' . array_to_sql_or($selected_items, 'graph_template_id')); } elseif (get_request_var('drp_action') == '2') { // duplicate for ($i=0;($i < cacti_count($selected_items));$i++) { api_duplicate_graph(0, $selected_items[$i], get_nfilter_request_var('title_format')); } } elseif (get_request_var('drp_action') == '3') { // resize get_filter_request_var('graph_width'); get_filter_request_var('graph_height'); get_filter_request_var('image_format_id'); for ($i=0;($i < cacti_count($selected_items));$i++) { db_execute_prepared('UPDATE graph_templates_graph SET width = ?, height = ?, image_format_id = ? WHERE graph_template_id = ?', array(get_request_var('graph_width'), get_request_var('graph_height'), get_request_var('image_format_id'), $selected_items[$i])); } } elseif (get_request_var('drp_action') == '4') { // retemplate for ($i=0;($i < cacti_count($selected_items));$i++) { retemplate_graphs($selected_items[$i]); $graph_template_name = db_fetch_cell_prepared('SELECT name FROM graph_templates WHERE id = ?', array($selected_items[$i])); if (isset($_SESSION['sess_gt_repairs']) && $_SESSION['sess_gt_repairs'] > 0) { raise_message('gt_repair' . $selected_items[$i], __('Sync of Graph Template \'%s\' Resulted in %s Repairs!', $graph_template_name, $_SESSION['sess_gt_repairs']), MESSAGE_LEVEL_WARN); } else { raise_message('gt_repair' . $selected_items[$i], __('Sync of Graph Template \'%s\' Resulted in no Repairs.', $graph_template_name), MESSAGE_LEVEL_INFO); } } } elseif (get_request_var('drp_action') == '5') { // resequence graphs with sequences off for ($i=0;($i < cacti_count($selected_items));$i++) { retemplate_graphs($selected_items[$i], 0, true); $graph_template_name = db_fetch_cell_prepared('SELECT name FROM graph_templates WHERE id = ?', array($selected_items[$i])); if (isset($_SESSION['sess_gt_repairs']) && $_SESSION['sess_gt_repairs'] > 0) { raise_message('gt_repair' . $selected_items[$i], __('Sync of Graph Template \'%s\' Resulted in %s Repairs!', $graph_template_name, $_SESSION['sess_gt_repairs']), MESSAGE_LEVEL_WARN); } else { raise_message('gt_repair' . $selected_items[$i], __('Sync of Graph Template \'%s\' Resulted in no Repairs.', $graph_template_name), MESSAGE_LEVEL_INFO); } } } } header('Location: graph_templates.php'); exit; } else { $ilist = ''; $iarray = array(); /* loop through each of the graphs selected on the previous page and get more info about them */ foreach ($_POST as $var => $val) { if (preg_match('/^chk_([0-9]+)$/', $var, $matches)) { /* ================= input validation ================= */ input_validate_input_number($matches[1], 'chk[1]'); /* ==================================================== */ $ilist .= '