Joywork/ajax/get_excel_progress.php

185 lines
6.2 KiB
PHP
Raw Permalink Normal View History

2026-05-22 20:21:54 +02:00
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
$time_start = microtime(true);
set_time_limit(0);
ini_set('memory_limit', '8192M');
/*error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);*/
$data = json_decode(file_get_contents("php://input"));
//var_dump($data);
$user_id = $data->user_id;
header('Content-Type: application/json');
$user_id = (int)($_SESSION['id']);
$date = date('d.m.Y');
require_once($_SERVER['DOCUMENT_ROOT'].'/vendor/autoload.php');
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$name = 'raport_'.$date.'.xlsx';
$name_file = $_SERVER['DOCUMENT_ROOT'].'/server/excel/'.$user_id.'/raport_'.$date.'.xlsx';
$name_file_json = $_SERVER['DOCUMENT_ROOT'].'/server/excel/'.$user_id.'/raport_'.$date.'.json';
$name_file_main_json = $_SERVER['DOCUMENT_ROOT'] . '/' . '/server/excel/'.$user_id.'/raport_main_'.$date;
$name_file_main_setting = $_SERVER['DOCUMENT_ROOT'] . '/' . '/server/excel/'.$user_id.'/raport_setting_'.$date.'.json';
$name_file_write = $_SERVER['DOCUMENT_ROOT'] . '/' . '/server/excel/'.$user_id.'/raport_write_'.$date.'.json';
$setting_str = file_get_contents($name_file_main_setting);
$columnsTemp = json_decode($setting_str, true);
if(file_exists($name_file_main_setting))
unlink($name_file_main_setting);
if(file_exists($name_file_json))
unlink($name_file_json);
//var_dump($columnsTemp);
if(!empty($columnsTemp['fields_fixes'])){
$columns = $columnsTemp['fields_fixes'];
}
if(!empty($columnsTemp['fields_castom'])){
$columnsCastom = $columnsTemp['fields_castom'];
}
if(!empty($columnsTemp['fields_funnels'])){
$columnsFunnels = $columnsTemp['fields_funnels'];
}
$nameRaport = 'Отчет по заявкам';
if(!empty($columnsTemp['nameRaport'])){
$nameRaport = $columnsTemp['nameRaport'];
}
$arrayHeder = $columnsTemp['arrayHeder'];
$arrayHeder2 = $columnsTemp['arrayHeder2'];
$pages = (int)$columnsTemp['pages'];
$rowsColumnsName = $columnsTemp['rowsColumnsName'];
$raport_id = 0;
if(isset($columnsTemp['raport_id'])){
$raport_id = (int)$columnsTemp['raport_id'];
}
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle($nameRaport);
$styleArray = array(
'borders' => array(
'allBorders' => array(
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => array('rgb' => '808080'),
),
),
);
foreach($arrayHeder as $h => $w){
$rw = 1;
if(isset($w['row'])){
$rw = $rowStart + (int)$w['row'];
}
$sheet->setCellValue($h.$rw, $w['title']);
// $sheet->getColumnDimension($h)->setWidth($w['width']);
$sheet->getStyle($h.'1')->getFont()->applyFromArray( [ 'name' => 'Arial', 'bold' => TRUE, 'italic' => FALSE, 'strikethrough' => FALSE, 'color' => [ 'rgb' => '808080' ], ] );
$sheet->getStyle($h.$rw)->getFont()->applyFromArray( [ 'name' => 'Arial', 'bold' => TRUE, 'italic' => FALSE, 'strikethrough' => FALSE, 'color' => [ 'rgb' => '808080' ], ] );
/* $sheet->getStyle($h)->getAlignment()->setWrapText(true);
$sheet->getStyle($h.$rw)->getAlignment()->setWrapText(true);
$sheet->getStyle($h.'1')->getAlignment()->setWrapText(true);*/
if(isset($w['rowspan'])){
$sheet->mergeCells($h.$rw.':'.$h.($rw+1));
}
if(isset($w['colspan'])){
$in = $rowsColumnsName[$w['name']];
if(isset($rowsColumnsName[$w['lit2']])){
$in2 = $rowsColumnsName[$w['lit2']];
// echo $in."\n";
//echo $in2."\n";
if($in !== false){
//$index = $in + (int)$w['colspan'];
//$h2 = $arrColExccel[$index];
$sheet->mergeCells($in.'1'.':'.$in2.'1');
}
}
}
$sheet->getColumnDimension($h)->setAutoSize(true);
if($w['key'] == 'events' || $w['key'] == 'events_call')
$sheet->getStyle($h)->getAlignment()->setWrapText(true);
}
if(!empty($arrayHeder2)){
foreach($arrayHeder2 as $h => $w){
$rw = 2;
/* if(isset($w['row'])){
$rw = $rowStart + (int)$w['row'];
}*/
$sheet->setCellValue($h.$rw, $w['title']);
// $sheet->getColumnDimension($h)->setWidth($w['width']);
$sheet->getStyle($h.$rw)->getFont()->applyFromArray( [ 'name' => 'Arial', 'bold' => TRUE, 'italic' => FALSE, 'strikethrough' => FALSE, 'color' => [ 'rgb' => '808080' ], ] );
/* $sheet->getStyle($h)->getAlignment()->setWrapText(true);
$sheet->getStyle($h.$rw)->getAlignment()->setWrapText(true);*/
$sheet->getColumnDimension($h)->setAutoSize(true);
}
}
$reqs = array();
$time_end = microtime(true);
$execution_time = $time_end - $time_start;
for($i=1; $i<=$pages; $i++){
$json_str = file_get_contents($name_file_main_json."_".$i.".json");
$json = json_decode($json_str);
if(!empty($json)){
foreach($json as $req){
$reqs[] = $req;
}
}
if(file_exists($name_file_main_json."_".$i.".json"))
unlink($name_file_main_json."_".$i.".json");
}
$row = 2;
if($raport_id > 0){
$row++;
}
if(file_exists($name_file_write)) unlink($name_file_write);
file_put_contents($name_file_write, json_encode(['done'=>'no','rows_total'=>count($reqs), 'row'=>0]), FILE_APPEND);
$i = 0;
try{
foreach($reqs as $req){
foreach($req as $key => $res){
if(isset($rowsColumnsName[$key])){
$litRow = $rowsColumnsName[$key];
$sheet->setCellValue($litRow.$row, $res);
}
}
$i++;
// unlink($name_file_write);
file_put_contents($name_file_write, json_encode(['done'=>'no','rows_total'=>count($reqs), 'row'=>$i]), FILE_APPEND);
$row++;
}
} catch (Exception $e){
//unlink($name_file_write);
file_put_contents($name_file_write, json_encode(['done'=>'no','error'=>'Что-то пошло не так', 'row'=>$i]), FILE_APPEND);
}
/*header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$name.'"');
header('Cache-Control: max-age=0');*/
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save($name_file);
unlink($name_file_write);
file_put_contents($name_file_write, json_encode(['done'=>'ok', 'row'=>$i]), FILE_APPEND);