示例#1
0
     // Then the fix is to force the reset of header values Pragma and Cache-control
     header("Pragma:", true);
     header("Cache-control:", true);
     $sFields = implode(',', $aFields);
     $oP->add_style('table br {mso-data-placement:same-cell;}');
     // Trick for Excel: keep line breaks inside the same cell !
     cmdbAbstractObject::DisplaySetAsHTMLSpreadsheet($oP, $oSet, array('fields' => $sFields, 'fields_advanced' => $bFieldsAdvanced, 'localize_values' => $bLocalize));
     break;
 case 'xml':
     $oP = new XMLPage("iTop - Export", true);
     cmdbAbstractObject::DisplaySetAsXML($oP, $oSet, array('localize_values' => $bLocalize));
     break;
 case 'xlsx':
     $oP = new ajax_page('');
     $oExporter = new ExcelExporter();
     $oExporter->SetObjectList($oFilter);
     // Run the export by chunk of 1000 objects to limit memory usage
     $oExporter->SetChunkSize(1000);
     do {
         $aStatus = $oExporter->Run();
         // process one chunk
     } while ($aStatus['code'] != 'done' && $aStatus['code'] != 'error');
     if ($aStatus['code'] == 'done') {
         $oP->SetContentType('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
         $oP->SetContentDisposition('attachment', $oFilter->GetClass() . '.xlsx');
         $oP->add(file_get_contents($oExporter->GetExcelFilePath()));
         $oExporter->Cleanup();
     } else {
         $oP->add('Error, xlsx export failed: ' . $aStatus['message']);
     }
     break;
示例#2
0
     $oPage->add('</div>');
     $oPage->add('<div class="progress"><p class="status-message">' . Dict::S('ExcelExport:PreparingExport') . '</p><div class="progress-bar"><div class="progress-label"></div></div></div>');
     $oPage->add('<div class="statistics"><div class="stats-toggle closed">' . Dict::S('ExcelExport:Statistics') . '<div class="stats-data"></div></div></div>');
     $oPage->add('</div>');
     $aLabels = array('dialog_title' => Dict::S('ExcelExporter:ExportDialogTitle'), 'cancel_button' => Dict::S('UI:Button:Cancel'), 'export_button' => Dict::S('ExcelExporter:ExportButton'), 'download_button' => Dict::Format('ExcelExporter:DownloadButton', 'export.xlsx'));
     $sJSLabels = json_encode($aLabels);
     $sFilter = addslashes($sFilter);
     $sJSPageUrl = addslashes(utils::GetAbsoluteUrlAppRoot() . 'pages/ajax.render.php');
     $oPage->add_ready_script("\$('#XlsxExportDlg').xlsxexporter({filter: '{$sFilter}', labels: {$sJSLabels}, ajax_page_url: '{$sJSPageUrl}'});");
     break;
 case 'xlsx_start':
     $sFilter = utils::ReadParam('filter', '', false, 'raw_data');
     $bAdvanced = utils::ReadParam('advanced', 'false') == 'true';
     $oSearch = DBObjectSearch::unserialize($sFilter);
     $oExcelExporter = new ExcelExporter();
     $oExcelExporter->SetObjectList($oSearch);
     //$oExcelExporter->SetChunkSize(10); //Only for testing
     $oExcelExporter->SetAdvancedMode($bAdvanced);
     $sToken = $oExcelExporter->SaveState();
     $oPage->add(json_encode(array('status' => 'ok', 'token' => $sToken)));
     break;
 case 'xlsx_run':
     $sMemoryLimit = MetaModel::GetConfig()->Get('xlsx_exporter_memory_limit');
     ini_set('memory_limit', $sMemoryLimit);
     ini_set('max_execution_time', max(300, ini_get('max_execution_time')));
     // At least 5 minutes
     $sToken = utils::ReadParam('token', '', false, 'raw_data');
     $oExcelExporter = new ExcelExporter($sToken);
     $aStatus = $oExcelExporter->Run();
     $aResults = array('status' => $aStatus['code'], 'percentage' => $aStatus['percentage'], 'message' => $aStatus['message']);
     if ($aStatus['code'] == 'done') {