load_tables(); } // Get data. $type = (string) get_parameter('type', 'csv'); $data = (string) get_parameter('data'); $data = json_decode(io_safe_output($data), true); $default_filename = 'data_exported - '.date($config['date_format']); $filename = (string) get_parameter('filename', $default_filename); $filename = io_safe_output($filename); /* * $data = array( * 'head' => array(,,...,), * 'data' => array( * array(,,...,), * array(,,...,), * ..., * array(,,...,), * ) * ); */ $output_csv = function ($data, $filename) { global $config; $separator = (string) $config['csv_divider']; $excel_encoding = (bool) get_parameter('excel_encoding', false); // CSV Output. header('Content-Type: text/csv; charset=UTF-8'); header('Content-Disposition: attachment; filename="'.$filename.'.csv"'); // BOM. if ($excel_encoding === false) { echo pack('C*', 0xEF, 0xBB, 0xBF); } // Header // Item / data. foreach ($data as $items) { if (isset($items['head']) === false || isset($items['data']) === false ) { throw new Exception(__('An error occured exporting the data')); } // Get key for item value. $value_key = array_search('value', $items['head']); $head_line = implode($separator, $items['head']); echo $head_line."\n"; foreach ($items['data'] as $item) { // Find value and replace csv decimal separator. $item[$value_key] = csv_format_numeric($item[$value_key]); $item = str_replace('--> '.__('Selected'), '', $item); $line = implode($separator, $item); if ($excel_encoding === true) { echo mb_convert_encoding($line, 'UTF-16LE', 'UTF-8')."\n"; } else { echo $line."\n"; } } } }; /* * $data = array( * array( * 'key' => , * 'key' => , * ..., * 'key' => * ), * array( * 'key' => , * 'key' => , * ..., * 'key' => * ), * ..., * array( * 'key' => , * 'key' => , * ..., * 'key' => * ) * ); */ $output_json = function ($data, $filename) { // JSON Output. header('Content-Type: application/json; charset=UTF-8'); header('Content-Disposition: attachment; filename="'.$filename.'.json"'); if (version_compare(PHP_VERSION, '5.4.0', '>=')) { $json = json_encode($data, JSON_PRETTY_PRINT); } else { $json = json_encode($data); } if ($json !== false) { echo $json; } }; try { if (empty($data) === true) { throw new Exception(__('An error occured exporting the data')); } ob_end_clean(); switch ($type) { case 'json': $output_json($data, $filename); break; case 'csv': default: $output_csv($data, $filename); break; } } catch (Exception $e) { die($e->getMessage()); } exit;