Solved issue with CSV Export

This commit is contained in:
Jose Gonzalez 2020-04-06 12:14:57 +02:00
parent 0aa9976640
commit fc2ea5aabf
1 changed files with 112 additions and 1 deletions

View File

@ -422,6 +422,117 @@ class ModuleTemplates extends HTML
$this->id_np = -1; $this->id_np = -1;
break; break;
case 'Export':
global $config;
$id_network_profile = safe_int($this->id_np);
if (empty($id_network_profile)) {
return false;
}
$filter['id_np'] = $id_network_profile;
$profile_info = @db_get_row_filter('tnetwork_profile', $filter, false);
if (empty($profile_info)) {
$success = false;
// ui_print_error_message(__('This template does not exist'));
return;
}
// It's important to keep the structure and order in the same way for backwards compatibility.
switch ($config['dbtype']) {
case 'mysql':
$sql = sprintf(
'
SELECT components.name, components.description, components.type, components.max, components.min, components.module_interval,
components.tcp_port, components.tcp_send, components.tcp_rcv, components.snmp_community, components.snmp_oid,
components.id_module_group, components.id_modulo, components.plugin_user, components.plugin_pass, components.plugin_parameter,
components.max_timeout, components.max_retries, components.history_data, components.min_warning, components.max_warning, components.str_warning, components.min_critical,
components.max_critical, components.str_critical, components.min_ff_event, components.dynamic_interval, components.dynamic_max, components.dynamic_min, components.dynamic_two_tailed, comp_group.name AS group_name, components.critical_instructions, components.warning_instructions, components.unknown_instructions
FROM `tnetwork_component` AS components, tnetwork_profile_component AS tpc, tnetwork_component_group AS comp_group
WHERE tpc.id_nc = components.id_nc
AND components.id_group = comp_group.id_sg
AND tpc.id_np = %d',
$this->id_np
);
break;
case 'postgresql':
$sql = sprintf(
'
SELECT components.name, components.description, components.type, components.max, components.min, components.module_interval,
components.tcp_port, components.tcp_send, components.tcp_rcv, components.snmp_community, components.snmp_oid,
components.id_module_group, components.id_modulo, components.plugin_user, components.plugin_pass, components.plugin_parameter,
components.max_timeout, components.max_retries, components.history_data, components.min_warning, components.max_warning, components.str_warning, components.min_critical,
components.max_critical, components.str_critical, components.min_ff_event, comp_group.name AS group_name, components.critical_instructions, components.warning_instructions, components.unknown_instructions
FROM "tnetwork_component" AS components, tnetwork_profile_component AS tpc, tnetwork_component_group AS comp_group
WHERE tpc.id_nc = components.id_nc
AND components.id_group = comp_group.id_sg
AND tpc.id_np = %d',
$this->id_np
);
break;
case 'oracle':
$sql = sprintf(
'
SELECT components.name, components.description, components.type, components.max, components.min, components.module_interval,
components.tcp_port, components.tcp_send, components.tcp_rcv, components.snmp_community, components.snmp_oid,
components.id_module_group, components.id_modulo, components.plugin_user, components.plugin_pass, components.plugin_parameter,
components.max_timeout, components.max_retries, components.history_data, components.min_warning, components.max_warning, components.str_warning, components.min_critical,
components.max_critical, components.str_critical, components.min_ff_event, comp_group.name AS group_name, components.critical_instructions, components.warning_instructions, components.unknown_instructions
FROM tnetwork_component AS components, tnetwork_profile_component AS tpc, tnetwork_component_group AS comp_group
WHERE tpc.id_nc = components.id_nc
AND components.id_group = comp_group.id_sg
AND tpc.id_np = %d',
$this->id_np
);
break;
}
$components = db_get_all_rows_sql($sql);
$row_names = [];
$inv_names = [];
// Find the names of the rows that we are getting and throw away the duplicate numeric keys
foreach ($components[0] as $row_name => $detail) {
if (is_numeric($row_name)) {
$inv_names[] = $row_name;
} else {
$row_names[] = $row_name;
}
}
// Send headers to tell the browser we're sending a file
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename='.preg_replace('/\s/', '_', $profile_info['name']).'.csv');
header('Pragma: no-cache');
header('Expires: 0');
// Clean up output buffering
while (@ob_end_clean()) {
}
// Then print the first line (row names)
echo '"'.implode('","', $row_names).'"';
echo "\n";
// Then print the rest of the data. Encapsulate in quotes in case we have comma's in any of the descriptions
foreach ($components as $row) {
foreach ($inv_names as $bad_key) {
unset($row[$bad_key]);
}
echo '"'.implode('","', $row).'"';
echo "\n";
}
// We're done here. The original page will still be there
exit;
break;
default: default:
// There is possible want do an action detailed. // There is possible want do an action detailed.
$action_detailed = explode('_', $this->action); $action_detailed = explode('_', $this->action);
@ -752,7 +863,7 @@ class ModuleTemplates extends HTML
['title' => 'Export to CSV'] ['title' => 'Export to CSV']
); );
$data[3] = '<a href="'.$this->baseUrl.'&action_button=Delete&id_np='.$row['id_np'].'" onclick="if (!confirm(\''.__('Are you sure?').'\')) return false;">'.html_print_image('images/cross.png', true, ['title' => __('Delete')]).'</a>'; $data[3] = '<a href="'.$this->baseUrl.'&action_button=Delete&id_np='.$row['id_np'].'" onclick="if (!confirm(\''.__('Are you sure?').'\')) return false;">'.html_print_image('images/cross.png', true, ['title' => __('Delete')]).'</a>';
$data[3] .= '<a href="'.$this->baseUrl.'&export_profile='.$row['id_np'].'">'.html_print_image('images/csv.png', true, ['title' => __('Export to CSV')]).'</a>'; $data[3] .= '<a href="'.$this->baseUrl.'&action_button=Export&id_np='.$row['id_np'].'">'.html_print_image('images/csv.png', true, ['title' => __('Export to CSV')]).'</a>';
array_push($table->data, $data); array_push($table->data, $data);
} }