[]]; // Convert start time and end time to unix timestamps $start = strtotime($start_date.' '.$start_time); $end = strtotime($end_date.' '.$end_time); $period = ($end - $start); $data = []; // If time is negative or zero, don't process - it's invalid if ($start < 1 || $end < 1) { ui_print_error_message(__('Invalid time specified')); return; } // *************************************************** // Starts, ends and dividers // *************************************************** // Pure CSV is comma delimited $datastart = __('Agent').','.__('Module').','.__('Data').','.__('Timestamp')."\n"; $rowstart = '"'; $divider = '","'; $rowend = '"'."\n"; $dataend = "\n"; $extension = 'csv'; // *************************************************** // Header output // *************************************************** $config['ignore_callback'] = true; while (@ob_end_clean()) { } header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename=export_'.date('Ymd', $start).'_'.date('Ymd', $end).'.'.$extension); header('Pragma: no-cache'); header('Expires: 0'); // *************************************************** // Data processing // *************************************************** $data = []; // Show header echo $datastart; foreach ($module as $selected) { $output = ''; $work_period = SECONDS_1DAY; if ($work_period > $period) { $work_period = $period; } $work_end = ($end - $period + $work_period); // Buffer to get data, anyway this will report a memory exhaustin $flag_last_time_slice = false; while ($work_end <= $end) { $data = []; // Reinitialize array for each module chunk if ($export_type == 'avg') { $arr = []; $arr['data'] = reporting_get_agentmodule_data_average($selected, $work_period, $work_end); if ($arr['data'] === false) { $work_end = ($work_end + $work_period); continue; } $arr['module_name'] = modules_get_agentmodule_name($selected); $arr['agent_name'] = modules_get_agentmodule_agent_name($selected); $arr['agent_id'] = modules_get_agentmodule_agent($selected); $arr['utimestamp'] = $end; array_push($data, $arr); } else { $data_single = modules_get_agentmodule_data($selected, $work_period, $work_end); if (!empty($data_single)) { $data = array_merge($data, $data_single); } } foreach ($data as $key => $module) { $output .= $rowstart; $alias = db_get_value('alias', 'tagente', 'id_agente', $module['agent_id']); $output .= io_safe_output($alias); $output .= $divider; $output .= io_safe_output($module['module_name']); $output .= $divider; $output .= $module['data']; $output .= $divider; $output .= date('Y-m-d G:i:s', $module['utimestamp']); $output .= $rowend; } echo $output; unset($output); $output = ''; unset($data); unset($data_single); if ($flag_last_time_slice) { break; } if (($work_end + $work_period) > $end) { // Get the last timelapse $work_period = ($end - $work_end); $work_end = $end; $flag_last_time_slice = true; } else { $work_end = ($work_end + $work_period); } } unset($output); $output = ''; } //end foreach echo $dataend; exit; // Necesary for CSV export, if not give problems } else { ui_print_error_message(__('No modules specified')); }