getProfile(); // // var_dump($uInfo); // die("tztz");r_dump($uInfo); $userid = $uInfo->id; $givenName = $uInfo->givenName;// // CSRF Counter-measure $isAdmin = $_SESSION['admin']==1; $isAdmin = $uInfo->userPrincipalName==$cfg['admin']; $isEditable = $cfg['editmode']==1; // Bail out if not logged in 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. function merge_two_arrays($array1,$array2) { $data = array(); $arrayAB = array_merge($array1,$array2); foreach ($arrayAB as $key => $value) { $data[$key] = $key; } return $data; } if($_GET['o']=='excel') { // Name we want to sort by and display if($_GET['t']!='demandeur') { $sortName = 'name'; } else { $sortName = 'reqname'; } $spreadsheet = new Spreadsheet(); // Set properties $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']); $spreadsheet->setActiveSheetIndex(0); $query = "select * from submissions"; $mysqli = new mysqli($cfg['host'], $cfg['user'],$cfg['pass'], $cfg['name']); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; } if ($result = $mysqli->query($query)) { $line = 1; // First merge keys of all serialized values and build an array containing all columns // (even if they are empty on first line... -> no key) while ($row = $result->fetch_assoc()) { $ser = $row['formdata']; $seru = unserialize($ser); $or = array_merge($row,$seru); if($line==1) { $master_array = $or; } $master_array = merge_two_arrays($master_array,$or); $line++; } // Now remove unwanted columns foreach($master_array as $key => $val ) { if(!($key=='UID' || $key=='modifieduid' || $key=='btnsubmit' || $key=='btnfinalise' || $key=='btnprocess' || $key=='formdata' || $key=='name_form')) { $header[$key] = $key; } } } // Now we have a array with all the keys/columns we want to export to Excel if ($result = $mysqli->query($query)) { $line = 1; /* fetch associative array */ while ($row = $result->fetch_assoc()) { $ser = $row['formdata']; $seru = unserialize($ser); $or = array_merge($row,$seru); // Build full row unset($fr); foreach($header as $key => $val) { if($key=='status') { $disp = 'Indéfini'; switch($or[$key]) { case 0: $disp = 'Finalisé'; break; case 1: $disp = 'Ouvert'; break; case 3: $disp = 'Traité'; break; } $fr[$key] = $disp; } else { $fr[$key] = $or[$key]; } } if($line==1) { $keys = array_keys ( $header ); $spreadsheet->getActiveSheet() ->fromArray( $keys, // The data to set NULL, // Array values with this value will not be set 'A1' // Top left coordinate of the worksheet range where // we want to set these values (default is A1) ); $line++; } $spreadsheet->getActiveSheet() ->fromArray( $fr, // The data to set NULL, // Array values with this value will not be set 'A'.$line // Top left coordinate of the worksheet range where // we want to set these values (default is A1) ); $line++; } } $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).')'); } foreach(range('A','B') as $col) { $spreadsheet->getActiveSheet()->setCellValue('A'.$col.($highestRow+2), '=SUM(A'.$col.'2:A'.$col.($highestRow).')'); } // Format the total $spreadsheet->getActiveSheet()->getStyle($coord.':AB'.($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 $query = "SELECT * from submissions ORDER BY $sortName"; if ($result = $mysqli->query($query)) { $line = 1; /* fetch associative array */ $prevSheet = null; while ($row = $result->fetch_assoc()) { $ser = $row['formdata']; $seru = unserialize($ser); $or = array_merge($row,$seru); // Build full row unset($fr); foreach($header as $key => $val) { if($key=='status') { $disp = 'Indéfini'; switch($or[$key]) { case 0: $disp = 'Finalisé'; break; case 1: $disp = 'Ouvert'; break; case 3: $disp = 'Traité'; break; } $fr[$key] = $disp; } else { $fr[$key] = $or[$key]; } } if($prevName!=$fr[$sortName]) { $keys = array_keys ( $header ); // Create new worksheet if($prevSheet) { // Add totals // // $highestRow = $prevSheet->getHighestRow(); $coord = 'O' . ($highestRow+2); $prevSheet->setCellValue($coord, 'TOTAL'); foreach(range('P','Z') as $col) { $prevSheet->setCellValue($col.($highestRow+2), '=SUM('.$col.'2:'.$col.($highestRow).')'); } // Do AA and AB foreach(range('A','B') as $col) { $prevSheet->setCellValue('A'.$col.($highestRow+2), '=SUM(A'.$col.'2:A'.$col.($highestRow).')'); } // Format the total $prevSheet->getStyle($coord.':AB'.($highestRow+2))->getFill() ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) ->getStartColor()->setARGB('BBBBBBBB'); } $prevSheet = $spreadsheet->getActiveSheet(); $prevSheet = $myWorkSheet; $myWorkSheet = $spreadsheet->createSheet(); $myWorkSheet->setTitle($fr[$sortName]); foreach (range('A','Z') as $col) { $myWorkSheet->getColumnDimension($col)->setAutoSize(true); } foreach (range('A','E') as $col) { $myWorkSheet->getColumnDimension('A'.$col)->setAutoSize(true); } $myWorkSheet ->fromArray( $keys, // The data to set NULL, // Array values with this value will not be set 'A1' // Top left coordinate of the worksheet range where // we want to set these values (default is A1) ); $myWorkSheet->getStyle('1')->getFont()->setBold(true); $line=2; $prevName = $fr[$sortName]; } $myWorkSheet ->fromArray( $fr, // The data to set NULL, // Array values with this value will not be set 'A'.$line // Top left coordinate of the worksheet range where // we want to set these values (default is A1) ); $line++; } } 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 = 'O' . ($highestRow+2); $spreadsheet->getActiveSheet()->setCellValue($coord, 'TOTAL'); foreach(range('P','Z') as $col) { $spreadsheet->getActiveSheet()->setCellValue($col.($highestRow+2), '=SUM('.$col.'2:'.$col.($highestRow).')'); } foreach(range('A','B') as $col) { $spreadsheet->getActiveSheet()->setCellValue('A'.$col.($highestRow+2), '=SUM(A'.$col.'2:A'.$col.($highestRow).')'); } // Format the total $spreadsheet->getActiveSheet()->getStyle($coord.':AB'.($highestRow+2))->getFill() ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) ->getStartColor()->setARGB('AAAAAAAA'); $mysqli->close(); // ------- $filename = 'accred_list.xlsx'; 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-Transfer-Encoding: binary'); header('Cache-Control: must-revalidate'); header('Pragma: public'); $writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save('php://output'); exit(); } ?>
| No | Stat | Salutation | Prenom | Nom | Statut | Commande | Aperçu | Création | Mise à jour | Commandé par / pour |
|---|