Skip to content

Commit

Permalink
Fixing #5448 - Data Query Duplication
Browse files Browse the repository at this point in the history
Data Queries do not have a Duplication function
  • Loading branch information
TheWitness committed Aug 12, 2023
1 parent 296074e commit 2cdc10b
Show file tree
Hide file tree
Showing 3 changed files with 127 additions and 12 deletions.
11 changes: 6 additions & 5 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,7 @@ Cacti CHANGELOG
-feature#5368: Allow all key searching calls to be delayed by defined amount
-feature#5406: Cacti connection handling should forcibly close connections to work around PDO uncertainty
-feature#5407: Add last_updated column to the boost table to increase diagnostics in Cacti
-feature#5416: Display device class before package import
-feature#5443: Table settings - extend column size, log error when variable name is truncated
-feature#5445: Table settings_user - extend column size, log error when variable name is truncated
-feature#5416: Display device class before package import
-feature: Allow messages to be popup notifications
-feature: Upgrade billboard.js to version 3.7.4
-feature: Upgrade d3.js to version 7.8.2
Expand Down Expand Up @@ -151,12 +149,15 @@ Cacti CHANGELOG
-issue#5426: Importing a legacy Data Query Template can result in the Template being unusable
-issue#5427: Unable to hook the settings.php page with JavaScript action
-issue#5434: Remove SQL Mode NO_AUTO_CREATE_USER as it's deprecated and removed from recent MySQL releases
-issue#5440: Device class not saved when importing a template during a new installation
-issue#5440: Device class not saved when importing a template during a new installation
-issue#5446: Duplication functions for Graph/Template and Data Source/Template do not return an id
-issue#5447: Duplication of Device Templates happens in the base Cacti file and not in an API file
-feature#5375: Add template for Fortinet firewall and Aruba Instant cluster
-feature#5393: Add template for SNMP printer
-feature#5418: Display device class before package import
-feature#5418: Display device class before package import
-feature#5442: Table settings - extend column size, log error when variable name is truncated
-feature#5444: Table settings_user - extend column size, log error when variable name is truncated
-feature#5448: Data Queries do not have a Duplication function
-feature: Update Cisco Device Template to include HSRP graph template
-feature: Upgrade billboard.js to version 3.7.4
-feature: Upgrade d3.js to version 7.8.2
Expand Down
33 changes: 26 additions & 7 deletions data_queries.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
include_once('./lib/utility.php');

$dq_actions = array(
1 => __('Delete')
1 => __('Delete'),
2 => __('Duplicate')
);

/* set default action */
Expand Down Expand Up @@ -344,7 +345,13 @@ function form_actions() {
for ($i=0;($i < cacti_count($selected_items));$i++) {
data_query_remove($selected_items[$i]);
}
} elseif (get_nfilter_request_var('drp_action') == '2') { /* duplicate */
for ($i=0;($i<cacti_count($selected_items));$i++) {
data_query_duplicate($selected_items[$i], get_nfilter_request_var('name_format'));
}
}
} else {
raise_message(40);
}

header('Location: data_queries.php');
Expand Down Expand Up @@ -383,17 +390,29 @@ function form_actions() {

if (isset($dq_array) && cacti_sizeof($dq_array)) {
if (get_nfilter_request_var('drp_action') == '1') { /* delete */
$graphs = array();

print "<tr>
<td class='textArea' class='odd'>
<p>" . __n('Click \'Continue\' to delete the following Data Query.', 'Click \'Continue\' to delete following Data Queries.', cacti_sizeof($dq_array)) . "</p>
<p>" . __n('Click \'Continue\' to Delete the following Data Query.', 'Click \'Continue\' to Delete following Data Queries.', cacti_sizeof($dq_array)) . "</p>
<div class='itemlist'><ul>$dq_list</ul></div>
</td>
</tr>\n";
}
</tr>";

$save_html = "<input type='button' class='ui-button ui-corner-all ui-widget' value='" . __esc('Cancel') . "' onClick='cactiReturnTo()'>&nbsp;<input type='submit' class='ui-button ui-corner-all ui-widget' value='" . __esc('Continue') . "' title='" . __n('Delete Data Query', 'Delete Data Query', cacti_sizeof($dq_array)) . "'>";
$save_html = "<input type='button' class='ui-button ui-corner-all ui-widget' value='" . __esc('Cancel') . "' onClick='cactiReturnTo()'>&nbsp;<input type='submit' class='ui-button ui-corner-all ui-widget' value='" . __esc('Continue') . "' title='" . __n('Delete Data Query', 'Delete Data Queries', cacti_sizeof($dq_array)) . "'>";
} elseif (get_nfilter_request_var('drp_action') == '2') { /* duplicatie */
print "<tr>
<td class='textArea' class='odd'>
<p>" . __n('Click \'Continue\' to duplicate the following Data Query.', 'Click \'Continue\' to duplicate following Data Queries.', cacti_sizeof($dq_array)) . "</p>
<div class='itemlist'><ul>$dq_list</ul></div>
<p><strong>" . __('Name Format:'). "</strong><br>";

form_text_box('name_format', '<dataquery_name> (1)', '', '255', '30', 'text');

print "</p>
</td>
</tr>";

$save_html = "<input type='button' class='ui-button ui-corner-all ui-widget' value='" . __esc('Cancel') . "' onClick='cactiReturnTo()'>&nbsp;<input type='submit' class='ui-button ui-corner-all ui-widget' value='" . __esc('Continue') . "' title='" . __n('Duplicate Data Query', 'Duplicate Data Queries', cacti_sizeof($dq_array)) . "'>";
}
} else {
raise_message(40);
header('Location: data_queries.php');
Expand Down
95 changes: 95 additions & 0 deletions lib/data_query.php
Original file line number Diff line number Diff line change
Expand Up @@ -2570,3 +2570,98 @@ function api_data_query_errors($snmp_query_graph_id, $post) {

return $errors;
}

/**
* data_query_duplicate - Duplicate a Data query
*
* @param int - The original Data Query id
* @param string - The new name of the Data Query
*
* @return int|false - The id of the new data query or false on failure
*/
function data_query_duplicate($_data_query_id, $data_query_name) {
$data_query = db_fetch_row_prepared('SELECT *
FROM snmp_query
WHERE id = ?',
array($_data_query_id));

if (!cacti_sizeof($data_query)) {
return false;
}

$data_query_name = str_replace('<dataquery_name>', $data_query['name'], $data_query_name);

$save = $data_query;
$save['id'] = 0;
$save['hash'] = generate_hash();
$save['name'] = $data_query_name;

$data_query_id = sql_save($save, 'snmp_query');

$_snmp_query_graph = db_fetch_assoc_prepared('SELECT *
FROM snmp_query_graph
WHERE snmp_query_id = ?',
array($_data_query_id));

if (cacti_sizeof($_snmp_query_graph)) {
foreach($_snmp_query_graph as $_sqg) {
$save = $_sqg;
$save['id'] = 0;
$save['hash'] = generate_hash();
$save['snmp_query_id'] = $data_query_id;
$sqg_id = sql_save($save, 'snmp_query_graph');

$_snmp_query_graph_rrd = db_fetch_assoc_prepared('SELECT *
FROM snmp_query_graph_rrd
WHERE snmp_query_graph_id = ?',
array($_sqg['id']));

if (cacti_sizeof($_snmp_query_graph_rrd)) {
foreach($_snmp_query_graph_rrd as $_sqgr) {
$save = $_sqgr;

$save['snmp_query_graph_id'] = $sqg_id;

sql_save($save, 'snmp_query_graph_rrd');
}
}

$_snmp_query_graph_rrd_sv = db_fetch_assoc_prepared('SELECT *
FROM snmp_query_graph_rrd_sv
WHERE snmp_query_graph_id = ?',
array($_sqg['id']));

if (cacti_sizeof($_snmp_query_graph_rrd_sv)) {
foreach($_snmp_query_graph_rrd_sv as $_sqgrs) {
$save = $_sqgrs;
$save['id'] = 0;
$save['hash'] = generate_hash();

$save['snmp_query_graph_id'] = $sqg_id;

sql_save($save, 'snmp_query_graph_rrd_sv');
}
}

$_snmp_query_graph_sv = db_fetch_assoc_prepared('SELECT *
FROM snmp_query_graph_sv
WHERE snmp_query_graph_id = ?',
array($_sqg['id']));

if (cacti_sizeof($_snmp_query_graph_sv)) {
foreach($_snmp_query_graph_sv as $_sqgs) {
$save = $_sqgs;
$save['id'] = 0;
$save['hash'] = generate_hash();

$save['snmp_query_graph_id'] = $sqg_id;

sql_save($save, 'snmp_query_graph_sv');
}
}
}

return $data_query_id;
}
}

0 comments on commit 2cdc10b

Please sign in to comment.