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(); } ?> Carbana Acréditations connect_errno) { echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; } ?> >
Bienvenue
Le formulaire est ouvert, les utilisateurs peuvent modifier ou ajouter des demandes
Le formulaire est fermé, les utilisateurs ne peuvent plus modifier ou ajouter des demandes

Guide d'utilisation

Commande

NoStatSalutationPrenomNomStatutCommandeAperçuCréationMise à jourCommandé par / pour

Déconnexion