// MS-IIS set these header values with no-cache... while Excel fails to do the job if using HTTPS // 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']); }
public function Top_Department() { $bl = new BLogger(); $beginDate = addslashes($_GET['begindate']); if ($beginDate == "") { $month = date("n"); $day = 1; $year = date("Y"); $timeAwal = mktime(0, 0, 0, $month, $day, $year); $timeAkhir = mktime(0, 0, 0, $month + 1, $day, $year); $mon = $month; $y = $year; $timeAwalText = date("Y") . "-" . date("m") . "-01 00:00:00"; $ts = mktime(0, 0, 0, date("n") + 1, 1, date("Y")); $timeAkhirText = date("Y-m-d H:i:s", $ts); } else { $timeAwalText = $beginDate . " 00:00:00"; $bgindatestr = strtotime($beginDate); $mon = date("n", $bgindatestr); $y = date("Y", $bgindatestr); $ts = mktime(0, 0, 0, $mon + 1, 1, $y); $timeAkhirText = date("Y-m-d H:i:s", $ts); $year = $y; } /*echo $timeAwal; echo "<br>"; echo $timeAkhir; */ ?> <h1>Top Department</h1> <?php $text = "(b_log_time BETWEEN '{$timeAwalText}' AND '{$timeAkhirText}')"; $textAs = "b_timestamp >= {$timeAwal} AND b_timestamp < {$timeAkhir}"; // echo "<br>"; // echo $text; $arrLogs = $bl->getWhere("{$text} ORDER BY b_timestamp ASC"); //pr($arrLogs); foreach ($arrLogs as $h) { if ($h->log_user_org == "" || $h->log_user_org == 0) { continue; } $newArr["org_" . $h->log_user_org][] = $h; } foreach ($newArr as $url => $n) { $newArrs[$url] = count($n); } asort($newArrs); $jadi = array_reverse($newArrs); // pr($newArr); $t = time(); //pr($jadi); ?> <div class="table-responsive"> <form class="form-inline"> <div class="form-group"> <label for="monselection_<?php echo $t; ?> ">Select Month</label> <select class="form-control" id="monselection_<?php echo $t; ?> "><?php $beginyear = date("Y") - 5; $endyear = date("Y"); $beginyear = 2015; $mons = array(1 => "Jan", 2 => "Feb", 3 => "Mar", 4 => "Apr", 5 => "May", 6 => "Jun", 7 => "Jul", 8 => "Aug", 9 => "Sep", 10 => "Oct", 11 => "Nov", 12 => "Dec"); for ($x = $beginyear; $x <= $endyear; $x++) { for ($m = 1; $m < 13; $m++) { if ($m == $mon && $x == $year) { $select = "selected"; echo "in"; } else { $select = ""; } if ($x == date("Y")) { if ($m > date("n")) { continue; } } ?> <option <?php echo $select; ?> value="<?php echo $x; ?> -<?php echo $m; ?> -01"><?php echo $x; ?> <?php echo $mons[$m]; ?> </option> <?php } } ?> </select> </div> <button class="btn btn-default" onclick="window.open('<?php echo _SPPATH . _PHOTOURL . "logs/TopDepartment_" . $year . "_" . $mon; ?> .xls', '_blank');event.preventDefault();">Download</button> </form> <script> $('#monselection_<?php echo $t; ?> ').change(function(){ var slc = $('#monselection_<?php echo $t; ?> ').val(); openLw('Top_Department','<?php echo _SPPATH; ?> BLoggerWeb/Top_Department?begindate='+slc,'fade'); }); </script> <div style="padding: 10px;"></div> <table class="table table-bordered"> <thead> <tr> <th>Rank</th> <th>Department</th> <th>URL</th> <th>No.Visits</th> </tr> </thead> <?php $num = 0; $arrExcel = array(); $arrExcel2 = array(); $arrExcel[] = "Rank;Department;No.Visits"; foreach ($jadi as $url => $n) { $alog = $newArr[$url]; $num++; $dp = new RoleOrganization(); $id = explode("_", $url); //pr($id); $dp->getByID($id[1]); $arrExcel[] = "{$num};{$dp->organization_name};{$n}"; ?> <tr> <td><?php echo $num; ?> </td> <td><span style="cursor:pointer; text-decoration: underline;" onclick="$('.detail_<?php echo $url; ?> ').toggle();"><?php echo $dp->organization_name; ?> </span></td> <td></td> <td><?php echo $n; ?> </td> </tr> <?php $obje = array(); $obje["Rank"] = $num; $obje["Department"] = $dp->organization_name; $obje["URL"] = ""; $obje["No Visits"] = $n; $arrExcel2[] = $obje; $key = $url; $newArr_dalam = array(); foreach ($alog as $h) { $newArr_dalam[$h->b_log_url][] = $h; } $newArrs_dalam = array(); foreach ($newArr_dalam as $url => $n) { $newArrs_dalam[$url] = count($n); } asort($newArrs_dalam); $jadi_dalam = array_reverse($newArrs_dalam); ?> <?php $num_dalam = 0; foreach ($jadi_dalam as $url_dalam => $n_dalam) { $num_dalam++; ?> <tr class="detail_<?php echo $key; ?> " style="display:none;"> <td></td> <td></td> <td><?php echo $url_dalam; ?> <a href="<?php echo $url_dalam; ?> " target="_blank">link</a></td> <td><?php echo $n_dalam; ?> </td> </tr> <?php $obje2 = array(); $obje2["Rank"] = " "; $obje2["Department"] = " "; $obje2["URL"] = $url_dalam; $obje2["No Visits"] = $n_dalam; $arrExcel2[] = $obje2; } ?> <?php } ?> </table> </div> <?php /* $fname = "TopDepartment_".$year."_".$mon. ".csv"; $file = fopen(_PHOTOPATH . "logs/" . $fname, "w+"); foreach ($arrExcel as $line) { fputcsv($file, explode(';', $line)); } fclose($file);*/ $fname = _PHOTOPATH . "logs/" . "TopDepartment_" . $year . "_" . $mon . ".xls"; ExcelExporter::saveIt($arrExcel2, $fname); }
$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') { $aResults['statistics'] = $oExcelExporter->GetStatistics('html'); } $oPage->add(json_encode($aResults)); break; case 'xlsx_download': $sToken = utils::ReadParam('token', '', false, 'raw_data'); $oPage->SetContentType('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); $oPage->SetContentDisposition('attachment', 'export.xlsx'); $sFileContent = ExcelExporter::GetExcelFileFromToken($sToken); $oPage->add($sFileContent); ExcelExporter::CleanupFromToken($sToken); break;