accred/accred_list.php
2019-03-10 23:34:02 +01:00

450 lines
14 KiB
PHP

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL & ~E_NOTICE );
$cfg = include('accred_config.php');
// start session
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
// CSRF Counter-measure
$token = md5(uniqid(rand(), TRUE));
$_SESSION['state'] = $token;
$userid = $_SESSION['uid'];
$isAdmin = $_SESSION['admin']==1;
$isEditable = $_SESSION['allowedit']==1;
// Bail out if not logged in
if($userid=='') {
header("location: index?");
}
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') {
$objPHPExcel = new PHPExcel();
// Set properties
$objPHPExcel->getProperties()->setCreator("Caribana festival");
$objPHPExcel->getProperties()->setLastModifiedBy("Caribana festival");
$objPHPExcel->getProperties()->setTitle("Accréditations 2017");
$objPHPExcel->getProperties()->setSubject("Accréditations 2017");
$objPHPExcel->getProperties()->setDescription("Accréditations 2017.");
$objPHPExcel->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 so we are sure to have all columns
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;
}
}
}
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 );
$objPHPExcel->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++;
}
$objPHPExcel->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++;
}
}
$objPHPExcel->getActiveSheet()->getStyle('1')->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->setTitle('Toutes accréditations');
// ------
// Go again this time sorted by name so we can create a worksheet per requestor
$query = "SELECT * from submissions ORDER BY name";
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($prevName!=$fr['name']) {
$keys = array_keys ( $header );
// Create new workshet
$myWorkSheet = new PHPExcel_Worksheet($objPHPExcel, $fr['name']);
$objPHPExcel->addSheet($myWorkSheet);
$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['name'];
}
$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++;
}
}
$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-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
$objWriter->save('php://output');
readfile($filename);
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="google-signin-client_id" content="538635499162-g21v86gk87qm863u03er6vnm3q15bl82.apps.googleusercontent.com">
<script src="https://apis.google.com/js/platform.js" async defer></script>
<title>Carbana Acréditations</title>
<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/responsive/1.0.0/css/dataTables.responsive.css">
<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.15/css/jquery.dataTables.css">
<link rel="stylesheet" type="text/css" href="accred_style.css">
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
</head>
<?php
$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;
}
?>
<body <?php if($isAdmin) echo 'class="admin" '; else echo 'class="user" '; ?>>
<div class="right-blob"><span id="identification">Bienvenue <?php echo $_SESSION['name']; if($isAdmin) echo ", tu es admin";?></span><br>
<?php if($isEditable) { ?>
<span class="identification">Le formulaire est ouvert, les utilisateurs peuvent modifier ou ajouter des demandes</span><br>
<?php } else { ?>
<span class="identification">Le formulaire est fermé, les utilisateurs ne peuvent plus modifier ou ajouter des demandes</span><br>
<?php } ?>
<div id="uid" style="display:none"><?php echo $userid;?></div></div>
<h1>Commande</h1>
<div id="tblContent">
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<ul>
<?php if($isAdmin || $isEditable==1) { ?>
<li> <a href="accred_form">Nouvelle demande</a></li>
<?php } ?>
<?php if($isAdmin) { ?>
<li> <a href="./accred_list?o=excel">Export Excel</a></li>
<?php } ?>
</ul>
<tr><th>No</th><th>Stat</th><th>Salutation</th><th>Prenom</th><th>Nom</th><th>Statut</th><th>Commande</th><th>Aperçu</th><th>Création</th><th>Mise à jour</th><th>Commandé par</th>
</thead>
</table>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="path/to/jquery-1.9.1.min.js"><\/script>')</script>
<script type="text/javascript" charset="utf8" src="//cdn.datatables.net/1.10.15/js/jquery.dataTables.js"></script>
<!-- load Zebra_Form's JavaScript file -->
<script src="vendor/stefangabos/zebra_form/public/javascript/zebra_form.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
function format ( row ) {
var d = $.parseJSON(row).data[0];
// `d` is the original data object for the row
var ret = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
'<tr>'+
'<td>Commande pour:</td>'+
'<td>'+d.salutation+' '+d.prenom+' '+d.nom+' - ' + d.email +'</td>'+
'</tr>'+
'<tr>'+
'<td>Commande:</td><td>'+d.nor_tot+' billets normaux et '+d.vip_tot+' billets VIP, pour un montant total de CHF '+d.presta_tot;
if(d.vip_gratuit=='oui') {
ret += ' (billets VIP gratuits) ';
}
ret += '</td>'+
'</tr>'+
'<tr><td>Billets normaux:</td><td>'+ (d.mar_nor || 0) +' mardi, ' + (d.mer_nor || 0) +' mercredi, ' + (d.jeu_nor ||0)+' jeudi, '+(d.ven_nor ||0)+' vendredi et '+(d.sam_nor ||0)+' samedi.</td></tr>'+
'<tr><td>Billets VIP:</td><td>'+(d.mar_vip ||0)+' mardi, ' +(d.mer_vip ||0)+' mercredi, '+(d.jeu_vip ||0)+' jeudi, '+(d.ven_vip ||0)+' vendredi, '+(d.sam_vip ||0)+' samedi.</td></tr>'+
'<td>Société:</td>'+
'<td>'+d.societe+'</td>'+
'</tr>'+
'<tr>'+
'<td>Nature de la prestation: </td>'+
'<td>';
if(d.nature_prest=='Concours') {
ret += d.presta_concours;
}
else {
ret += d.nature_prest;
}
ret += '</td></tr>'+
'<tr><td>Précisions</td>'+
'<td>'+d.why+'</td></tr>'+
'<tr><td>Paiement:</td><td>' + d.type_paiement;
if(d.type_paiement!='Offert') {
ret += ' - ' + d.choix_paiement_payant;
}
ret += '</td></tr>';
if(d.choix_paiement_payant=='Autre') {
ret += '<tr><td>Précisions:</td><td>'+d.paiement_autre+'</td></tr>';
}
ret += '<tr><td>Distribution:</td><td>' + d.distribution + '</td>';
if(d.distribution=='Poste') {
ret += '<tr><td>Adresse:</td><td>'+d.adresse_distrib+'</td></tr>';
}
'</table>';
return ret;
}
$(document).ready(function(){
var table = $('#example')
.DataTable( {
"language": {
"sInfoEmpty": "Il n'y a rien à montrer...",
"sEmptyTable": "Tu n'as pas encore de demandes enregistrées...",
"lengthMenu": "Montrer _MENU_ demandes par page",
"zeroRecords": "Pas de résultats - désolé",
"info": "Page _PAGE_ de _PAGES_ affichée",
"infoFiltered": "(filtrage de _MAX_ demandes au total)",
"paginate": {
"next": "Page suivante",
"previous": "Page précédente"
},
"search": "Rechercher"
},
stateSave: true,
"ajax": 'ajax/data/arrays',
"columns": [
{ "data": "mid" },
{ "data": "stat", "visible" : false, },
{ "data": "nom", "visible": false },
{ "data": "prenom", "visible" : false},
{ "data": "salutation", "visible" : false },
{
"orderData": 1,
"data": null,
"defaultContent": "",
"createdCell": function(td, cellData, rowData, row, col) {
switch(rowData.stat) {
case "0":
$(td).addClass('bck-check <?php if($isAdmin) echo " editable"; ?>');
break;
case "1":
$(td).addClass('bck-edit <?php if($isAdmin || $isEditable==1) echo " editable"; ?>');
break;
case "3":
$(td).addClass('bck-processed');
break;
}
}
},
{ "data": "societe" },
{ "data": null,
"defaultContent": "",
"className": "details-control",
},
{ "data" : "crea" },
{ "data": "maj" },
{ "data": "name", "visible": true }
]
}
);
$('#identification').on('click', function() {
$('#uid').toggle();
table.page( 5 ).draw( false );
});
// Add event listener for opening and closing details
$('#example tbody').on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var id= $(tr).find("td:first").text() ;
$.ajax({
url: 'ajax/data/arrays?aid='+id
}).done(function(data) {
var row = table.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child( format(data) ).show();
tr.addClass('shown');
}
});;
} );
// Add event listener for editing entries
$('#example tbody').on('click', 'td.bck-edit', function () {
var tr = $(this).closest('tr');
var id= $(tr).find("td:first").text() ;
self.location="accred_form?aid="+id;
} );
<?php
if($isAdmin) {
?>
$('#example tbody').on('click', 'td.bck-check', function () {
var tr = $(this).closest('tr');
var id= $(tr).find("td:first").text() ;
self.location="accred_form?aid="+id;
} );
<?php
}
?>
});
</script>
<div class="g-signin2" data-onsuccess="onSignIn" style="display:none"></div>
<br>
<a href="#" onclick="signOut();">Déconnexion</a>
<script>
function signOut() {
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
console.log('User signed out.');
$.post('tokensignin',
{ mode: "logout" }, // data
function(data) { // callback function
location.href="./index?";
}
);
});
}
</script>
</body>
</html>