diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f1e7f2..414bdc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ --- develop --- +* issue#276: Deduplicate selected-item bulk action dispatch across alert/report/removal pages * issue: Making changes to support Cacti 1.3 * issue: Don't use MyISAM for non-analytical tables * issue: The install advisor for Syslog was broken in current Cacti releases diff --git a/functions.php b/functions.php index 9bd3223..e434bd1 100644 --- a/functions.php +++ b/functions.php @@ -126,6 +126,27 @@ function syslog_sendemail($to, $from, $subject, $message, $smsmessage = '') { } } +function syslog_apply_selected_items_action($selected_items, $drp_action, $action_map, $export_action = '', $export_items = '') { + if ($selected_items != false) { + if (isset($action_map[$drp_action])) { + $action_function = $action_map[$drp_action]; + + if (function_exists($action_function)) { + foreach($selected_items as $selected_item) { + $action_function($selected_item); + } + } else { + cacti_log("SYSLOG ERROR: Bulk action function '$action_function' not found.", false, 'SYSTEM'); + } + } elseif ($export_action != '' && $drp_action == $export_action) { + /* Re-serialize the sanitized array and URL-encode so the value is + * safe to embed in a JS document.location string (avoids injection + * via the raw request value that $export_items carries). */ + $_SESSION['exporter'] = rawurlencode(serialize($selected_items)); + } + } +} + function syslog_is_partitioned() { global $syslogdb_default; @@ -2421,4 +2442,3 @@ function alert_replace_variables($alert, $results, $hostname = '') { return $command; } - diff --git a/syslog_alerts.php b/syslog_alerts.php index 74c49b9..5ddc44c 100644 --- a/syslog_alerts.php +++ b/syslog_alerts.php @@ -116,24 +116,19 @@ function form_actions() { /* if we are to save this form, instead of display it */ if (isset_request_var('selected_items')) { $selected_items = sanitize_unserialize_selected_items(get_request_var('selected_items')); - - if ($selected_items != false) { - if (get_request_var('drp_action') == '1') { /* delete */ - for ($i=0; $i 'api_syslog_alert_remove', + '2' => 'api_syslog_alert_disable', + '3' => 'api_syslog_alert_enable' + ), + '4', + get_nfilter_request_var('selected_items') + ); header('Location: syslog_alerts.php?header=false'); @@ -1009,4 +1004,3 @@ function alert_import() { header('Location: syslog_alerts.php'); } - diff --git a/syslog_removal.php b/syslog_removal.php index f7b5e94..12e308b 100644 --- a/syslog_removal.php +++ b/syslog_removal.php @@ -120,29 +120,21 @@ function form_actions() { /* 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 */ - for ($i=0; $i 'api_syslog_removal_remove', + '2' => 'api_syslog_removal_disable', + '3' => 'api_syslog_removal_enable', + '4' => 'api_syslog_removal_reprocess' + ), + '5', + get_nfilter_request_var('selected_items') + ); header('Location: syslog_removal.php?header=false'); @@ -810,4 +802,3 @@ function removal_import() { header('Location: syslog_removal.php'); } - diff --git a/syslog_reports.php b/syslog_reports.php index f0caec2..a9d05d8 100644 --- a/syslog_reports.php +++ b/syslog_reports.php @@ -112,25 +112,20 @@ function form_actions() { /* 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 */ - for ($i=0; $i 'api_syslog_report_remove', + '2' => 'api_syslog_report_disable', + '3' => 'api_syslog_report_enable' + ), + '4', + get_nfilter_request_var('selected_items') + ); header('Location: syslog_reports.php?header=false'); @@ -872,4 +867,3 @@ function report_import() { header('Location: syslog_reports.php'); } - diff --git a/tests/regression/issue276_bulk_action_dispatch_helper_test.php b/tests/regression/issue276_bulk_action_dispatch_helper_test.php new file mode 100644 index 0000000..cec8251 --- /dev/null +++ b/tests/regression/issue276_bulk_action_dispatch_helper_test.php @@ -0,0 +1,36 @@ +