From 05c0b9a1affc78fab746e9bbfb0b722e8b220e01 Mon Sep 17 00:00:00 2001 From: lars Date: Wed, 1 May 2019 17:24:18 +0200 Subject: [PATCH] Migration vers phpspreadsheet et fix nom du demandeur --- accred_form.php | 6 ++- accred_list.php | 105 ++++++++++++++++++++++++++++++++++--------- ajax/data/arrays.php | 5 ++- 3 files changed, 92 insertions(+), 24 deletions(-) diff --git a/accred_form.php b/accred_form.php index bfb91058..8405d75f 100644 --- a/accred_form.php +++ b/accred_form.php @@ -149,7 +149,7 @@ die(); $query .= " AND UID=$userid"; } if (!$result = $mysqli->query($query) ) { - echo "Table creation failed: (" . $mysqli->errno . ") " . $mysqli->error; + echo "Table read failed: (" . $mysqli->errno . ") " . $mysqli->error; die("Argh"); } @@ -166,6 +166,8 @@ die(); header("location: accred_list"); die(); } + // Retrieve the name of the original requestor + $reqName = $row['name']; } // instantiate a Zebra_Form object $form = new Zebra_Form('form'); @@ -176,7 +178,7 @@ die(); $forWho = $_SESSION['name']; } else { - $ti = 'Commande par '.$_SESSION['name'] . ', créée le '.$row['created']; + $ti = 'Commande par '.$reqName. ', créée le '.$row['created']; $forWho = $ar['demande_pour']; } if($isAdmin) { diff --git a/accred_list.php b/accred_list.php index 771f8d79..01453bfe 100644 --- a/accred_list.php +++ b/accred_list.php @@ -19,6 +19,9 @@ header("location: index?"); } + use PhpOffice\PhpSpreadsheet\IOFactory; + use PhpOffice\PhpSpreadsheet\Spreadsheet; + require_once 'vendor/autoload.php'; define('TMP_FILES', "/tmp/"); // temp folder where it stores the files into. @@ -34,15 +37,15 @@ if($_GET['o']=='excel') { - $objPHPExcel = new PHPExcel(); + $spreadsheet = new Spreadsheet(); // Set properties -$objPHPExcel->getProperties()->setCreator("Caribana festival"); -$objPHPExcel->getProperties()->setLastModifiedBy("Caribana festival"); -$objPHPExcel->getProperties()->setTitle("Accréditations " . $cfg['year']); -$objPHPExcel->getProperties()->setSubject("Accréditations " . $cfg['year']); -$objPHPExcel->getProperties()->setDescription("Accréditations " . $cfg['year']); + $spreadsheet->getProperties()->setCreator("Caribana festival"); + $spreadsheet->getProperties()->setLastModifiedBy("Caribana festival"); + $spreadsheet->getProperties()->setTitle("Accréditations " . $cfg['year']); + $spreadsheet->getProperties()->setSubject("Accréditations " . $cfg['year']); + $spreadsheet->getProperties()->setDescription("Accréditations " . $cfg['year']); -$objPHPExcel->setActiveSheetIndex(0); + $spreadsheet->setActiveSheetIndex(0); $query = "select * from submissions"; $mysqli = new mysqli($cfg['host'], $cfg['user'],$cfg['pass'], $cfg['name']); @@ -101,7 +104,7 @@ $line = 1; } if($line==1) { $keys = array_keys ( $header ); - $objPHPExcel->getActiveSheet() + $spreadsheet->getActiveSheet() ->fromArray( $keys, // The data to set NULL, // Array values with this value will not be set @@ -111,7 +114,7 @@ $line = 1; $line++; } -$objPHPExcel->getActiveSheet() +$spreadsheet->getActiveSheet() ->fromArray( $fr, // The data to set NULL, // Array values with this value will not be set @@ -124,9 +127,28 @@ $objPHPExcel->getActiveSheet() } -$objPHPExcel->getActiveSheet()->getStyle('1')->getFont()->setBold(true); -$objPHPExcel->getActiveSheet()->setTitle('Toutes accréditations'); - +$spreadsheet->getActiveSheet()->getStyle('1')->getFont()->setBold(true); +$spreadsheet->getActiveSheet()->setTitle('Toutes demandes'); +foreach (range('A','Z') as $col) { + $spreadsheet->getActiveSheet()->getColumnDimension($col)->setAutoSize(true); +} +foreach (range('A','E') as $col) { + $spreadsheet->getActiveSheet()->getColumnDimension('A'.$col)->setAutoSize(true); +} +// Add totals +// +$highestRow = $spreadsheet->getActiveSheet()->getHighestRow(); +$coord = 'N' . ($highestRow+2); +$spreadsheet->getActiveSheet()->setCellValue($coord, 'TOTAL'); +foreach(range('O','Z') as $col) { + $spreadsheet->getActiveSheet()->setCellValue($col.($highestRow+2), '=SUM('.$col.'2:'.$col.($highestRow).')'); +} +// Do AA +$spreadsheet->getActiveSheet()->setCellValue('AA'.($highestRow+2), '=SUM(AA2:AA'.($highestRow).')'); +// Format the total +$spreadsheet->getActiveSheet()->getStyle($coord.':AA'.($highestRow+2))->getFill() + ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) + ->getStartColor()->setARGB('AAAAAAAA'); // ------ // Go again this time sorted by name so we can create a worksheet per requestor @@ -165,10 +187,28 @@ $line = 1; } if($prevName!=$fr['name']) { $keys = array_keys ( $header ); - // Create new workshet - $myWorkSheet = new PHPExcel_Worksheet($objPHPExcel, $fr['name']); - $objPHPExcel->addSheet($myWorkSheet); - $myWorkSheet + // Create new worksheet + if($prevSheet) { + // Add totals + // // + $highestRow = $prevSheet->getHighestRow(); + $coord = 'N' . ($highestRow+2); + $prevSheet->setCellValue($coord, 'TOTAL'); + foreach(range('O','Z') as $col) { + $prevSheet->setCellValue($col.($highestRow+2), '=SUM('.$col.'2:'.$col.($highestRow).')'); + } + // Do AA + $prevSheet->setCellValue('AA'.($highestRow+2), '=SUM(AA2:AA'.($highestRow).')'); + // Format the total + $prevSheet->getStyle($coord.':AA'.($highestRow+2))->getFill() + ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) + ->getStartColor()->setARGB('BBBBBBBB'); + + } + $prevSheet = $spreadsheet->getActiveSheet(); + $myWorkSheet = $spreadsheet->createSheet(); + $myWorkSheet->setTitle($fr['name']); + $myWorkSheet ->fromArray( $keys, // The data to set NULL, // Array values with this value will not be set @@ -192,21 +232,44 @@ $line = 1; } } +foreach (range('A','Z') as $col) { + $myWorkSheet->getColumnDimension($col)->setAutoSize(true); +} +foreach (range('A','E') as $col) { + $spreadsheet->getActiveSheet()->getColumnDimension('A'.$col)->setAutoSize(true); +} + +// Put totals on last sheet +// Add totals +// // +$highestRow = $spreadsheet->getActiveSheet()->getHighestRow(); +$coord = 'N' . ($highestRow+2); +$spreadsheet->getActiveSheet()->setCellValue($coord, 'TOTAL'); +foreach(range('O','Z') as $col) { + $spreadsheet->getActiveSheet()->setCellValue($col.($highestRow+2), '=SUM('.$col.'2:'.$col.($highestRow).')'); + } + // Do AA + $spreadsheet->getActiveSheet()->setCellValue('AA'.($highestRow+2), '=SUM(AA2:AA'.($highestRow).')'); + // Format the total + $spreadsheet->getActiveSheet()->getStyle($coord.':AA'.($highestRow+2))->getFill() + ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) + ->getStartColor()->setARGB('AAAAAAAA'); + $mysqli->close(); // ------- -$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $filename = 'accred_list.xlsx'; -$objWriter->save($filename); header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8'); -header('Content-Length: ' . filesize($filename)); +// header('Content-Length: ' . filesize($filename)); header('Content-Transfer-Encoding: binary'); header('Cache-Control: must-revalidate'); header('Pragma: public'); -$objWriter->save('php://output'); -readfile($filename); + +$writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); +$writer->save('php://output'); +exit(); } ?> diff --git a/ajax/data/arrays.php b/ajax/data/arrays.php index 41fd074f..f1c69491 100644 --- a/ajax/data/arrays.php +++ b/ajax/data/arrays.php @@ -53,7 +53,10 @@ foreach($seru as $key=>$val) { $one[$key] = $val; } - $one['name'] = $row["name"]; + $one['name'] = $row["name"]; + if($one['demande_pour'] != $row["name"]) { + $one['name'] .= ' / ' . $one['demande_pour']; + } $obj['data'][] = $one; }