Commit 5df1a518 authored by JonathanMM's avatar JonathanMM

WIP : Utilisation d'un moteur de templates

parent bb76d9ed
......@@ -6,4 +6,6 @@ script/__pycache__/
script/fixStation.py
*.zip
*.db
.vscode
\ No newline at end of file
.vscode
templates_c/*
!templates_c/README.md
\ No newline at end of file
......@@ -2,15 +2,20 @@
require_once('config.php');
include_once('functions.php');
error_reporting(E_ALL);
if(!isset($_GET['action']) || strlen($_GET['action']) == 0)
exit();
if(!isset($_GET['codeStation']) || intval($_GET['codeStation']) == 0)
if((!isset($_GET['codeStation']) || intval($_GET['codeStation']) == 0) && (!isset($_GET['idConso']) || intval($_GET['idConso']) == 0))
exit();
header('Content-Type: application/json');
$codeStation = intval($_GET['codeStation']);
if(isset($_GET['codeStation']))
$codeStation = intval($_GET['codeStation']);
if(isset($_GET['idConso']))
$idConso = intval($_GET['idConso']);
switch($_GET['action'])
{
......@@ -98,6 +103,10 @@ switch($_GET['action'])
echo json_encode(getConsoBikeResume("-1month", 360));
exit();
break;
case 'getDataConso':
echo json_encode(getDataConso($idConso));
exit();
break;
}
function getBikeInstantane($codeStation)
......@@ -729,4 +738,27 @@ function getDataConsoBikeResume($filtre, $periode)
)
);
}
function getDataConso($idConso)
{
global $pdo;
$requete = $pdo->query('SELECT * FROM status inner join `stations` on stations.code = status.code WHERE idConso = '.$idConso.' order by status.code asc');
$data = $requete->fetchAll(PDO::FETCH_ASSOC);
$retour = [];
foreach($data as $station)
{
$retour[] = array(
'code' => $station['code'],
'codeStr' => displayCodeStation($station['code']),
'name' => $station['name'],
'dateOuverture' => is_null($station['dateOuverture']) ? 'Non ouvert' : $station['dateOuverture'],
'state' => (($station['state'] == 'Operative' && $station['nbEDock'] != 0) ? 'Ouverte' : 'En travaux'),
'nbBike' => $station['nbBike'],
'nbEbike' => $station['nbEBike'],
'nbFreeEDock' => $station['nbFreeEDock'],
'nbEDock' => $station['nbEDock']
);
}
return array('data' => $retour);
}
?>
\ No newline at end of file
<?php
require_once('config.php');
include_once('functions.php');
require_once('libs/Smarty.class.php');
$smarty = new Smarty();
//Filtre 24 heures
$hier = new DateTime("-1day");
......@@ -10,127 +13,17 @@ $filtreDate = $hier->format('Y-m-d H:i:s');
$requete = $pdo->query('SELECT * FROM `statusConso` where nbStation Is not null and date >= "'.$filtreDate.'" Order by id desc limit 0,1');
$conso = $requete->fetch();
//Stations
if(is_null($conso['id']))
$statusStation = array();
else
{
$requete = $pdo->query('SELECT * FROM status inner join `stations` on stations.code = status.code WHERE idConso = '.$conso['id'].' order by status.code asc');
$statusStation = $requete->fetchAll();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Vélib Stats (site non officiel)</title>
<script type="application/javascript" src="Chart.min.js"></script>
<script type="application/javascript" src="jquery-3.2.1.min.js"></script>
<link rel="stylesheet" type="text/css" href="datatables.min.css"/>
<script type="text/javascript" src="datatables.min.js"></script>
<script type="text/javascript" src="script.js"></script>
<style type="text/css">
table, tr, td, th
{
border: 1px solid black;
}
td
{
text-align: center;
}
</style>
</head>
<body>
<h1>Vélib Stats (site non officiel)</h1>
<ul>
<li>Nombre de stations ouvertes annoncées (<abbr title="Stations affichées comme étant ouverte">définition</abbr>) : <?php echo $conso['nbStation']; ?></li>
<li>Nombre de stations ouvertes détectées (<abbr title="Stations avec un nombre de bornes positifs avec au moins un vélo ou une borne libre">définition</abbr>) : <?php echo $conso['nbStationDetecte']; ?></li>
<li>Nombre de vélos mécaniques disponible : <?php echo $conso['nbBike']; ?></li>
<li>Nombre de vélos électriques disponible : <?php echo $conso['nbEbike']; ?></li>
<li>Nombre de bornes libres : <?php echo $conso['nbFreeEDock']; ?></li>
<li>Nombre de bornes total : <?php echo $conso['nbEDock']; ?></li>
</ul>
<i>Dernière mise à jour : <?php echo $conso['date']; ?></i><br />
<select id="typeGraphiqueSelect" style="display: none">
<option value="_double">Conso</option>
</select>
<select id="dureeGraphiqueSelect">
<option value="instantanee">Une heure - Instantanée</option>
<option value="troisHeures">Trois heures - Période de 5 minutes</option>
<option value="unJour">Un jour - Période de 15 minutes</option>
<option value="septJours" selected>Une semaine - Période d'une heure</option>
<option value="unMois">Un mois - Période de six heures</option>
</select> Graphique issu du site velib.nocle.fr
<canvas id="chartNbStations" width="1000" height="400"></canvas>
<canvas id="chartBikes" width="1000" height="400"></canvas>
<i>Ce site n'est pas un site officiel de vélib métropole. Les données utilisées proviennent de <a href="http://www.velib-metropole.fr">www.velib-metropole.fr</a> et appartienne à leur propriétaire. - <a href="https://framagit.org/JonathanMM/velibstats">Site du projet</a> -
Auteur : JonathanMM (<a href="https://twitter.com/Jonamaths">@Jonamaths</a>)</i>
<h2>Stations</h2>
Fitrer : État
<select id="filtreEtat">
<option value="toutes">Toutes</option>
<option value="ouverte" selected>Ouverte</option>
<option value="travaux">En travaux</option>
</select>
<table id="stations">
<thead>
<tr>
<th>Code</th>
<th>Nom</th>
<th>Date d'ouverture</th>
<th>Statut</th>
<th>Vélos mécaniques dispo</th>
<th>Vélos électriques dispo</th>
<th>Bornes libres</th>
</tr>
</thead>
<tbody>
<?php
foreach($statusStation as $station)
{
echo '<tr>';
echo '<td><a href="station.php?code='.$station['code'].'">'.displayCodeStation($station['code']).'</a></td>';
echo '<td>'.$station['name'].'</td>';
echo '<td>'.$station['dateOuverture'].'</td>';
echo '<td>'.(($station['state'] == 'Operative' && $station['nbEDock'] != 0) ? 'Ouverte' : 'En travaux').'</td>';
echo '<td>'.$station['nbBike'].'</td>';
echo '<td>'.$station['nbEBike'].'</td>';
echo '<td>'.$station['nbFreeEDock'].'/'.$station['nbEDock'].'</td>';
echo '</tr>';
}
?>
</tbody>
</table>
<script type="text/javascript">
var codeStation = -1;
</script>
<script type="application/javascript">
function filtreDataTable()
{
var valeur = $("#filtreEtat").val();
var dt = $('#stations').DataTable();
switch (valeur) {
case "ouverte":
dt.column(3).search("Ouverte").draw();
break;
case "travaux":
dt.column(3).search("En travaux").draw();
break;
default:
dt.column(3).search("").draw();
break;
}
}
$smarty->assign(array(
'idConso' => $conso['id'],
'nbStation' => $conso['nbStation'],
'nbStationDetecte' => $conso['nbStationDetecte'],
'nbBike' => $conso['nbBike'],
'nbEbike' => $conso['nbEbike'],
'nbEDock' => $conso['nbEDock'],
'nbFreeEDock' => $conso['nbFreeEDock'],
'dateDerniereConso' => $conso['date']
));
$(document).ready( function () {
var dt = $('#stations').DataTable({
language: dtTraduction
});
filtreDataTable();
$("#filtreEtat").change(filtreDataTable);
} );
</script>
</body>
</html>
\ No newline at end of file
$smarty->display('index.tpl');
exit();
?>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>Vélib Stats (site non officiel)</title>
<script type="application/javascript" src="Chart.min.js"></script>
<script type="application/javascript" src="jquery-3.2.1.min.js"></script>
<link rel="stylesheet" type="text/css" href="datatables.min.css"/>
<script type="text/javascript" src="datatables.min.js"></script>
<script type="text/javascript" src="script.js"></script>
<style type="text/css">
table, tr, td, th
{
border: 1px solid black;
}
td
{
text-align: center;
}
</style>
</head>
<body>
<h1>Vélib Stats (site non officiel)</h1>
<ul>
<li>Nombre de stations ouvertes annoncées (<abbr title="Stations affichées comme étant ouverte">définition</abbr>) : {$nbStation}</li>
<li>Nombre de stations ouvertes détectées (<abbr title="Stations avec un nombre de bornes positifs avec au moins un vélo ou une borne libre">définition</abbr>) : {$nbStationDetecte}</li>
<li>Nombre de vélos mécaniques disponible : {$nbBike}</li>
<li>Nombre de vélos électriques disponible : {$nbEbike}</li>
<li>Nombre de bornes libres : {$nbFreeEDock}</li>
<li>Nombre de bornes total : {$nbEDock}</li>
</ul>
<i>Dernière mise à jour : {$dateDerniereConso}</i><br />
<select id="typeGraphiqueSelect" style="display: none">
<option value="_double">Conso</option>
</select>
<select id="dureeGraphiqueSelect">
<option value="instantanee">Une heure - Instantanée</option>
<option value="troisHeures">Trois heures - Période de 5 minutes</option>
<option value="unJour">Un jour - Période de 15 minutes</option>
<option value="septJours" selected>Une semaine - Période d'une heure</option>
<option value="unMois">Un mois - Période de six heures</option>
</select> Graphique issu du site velib.nocle.fr
<canvas id="chartNbStations" width="1000" height="400"></canvas>
<canvas id="chartBikes" width="1000" height="400"></canvas>
<i>Ce site n'est pas un site officiel de vélib métropole. Les données utilisées proviennent de <a href="http://www.velib-metropole.fr">www.velib-metropole.fr</a> et appartienne à leur propriétaire. - <a href="https://framagit.org/JonathanMM/velibstats">Site du projet</a> -
Auteur : JonathanMM (<a href="https://twitter.com/Jonamaths">@Jonamaths</a>)</i>
<h2>Stations</h2>
Fitrer : État
<select id="filtreEtat">
<option value="toutes">Toutes</option>
<option value="ouverte" selected>Ouverte</option>
<option value="travaux">En travaux</option>
</select>
<table id="stations">
<thead>
<tr>
<th>Code</th>
<th>Nom</th>
<th>Date d'ouverture</th>
<th>Statut</th>
<th>Vélos mécaniques dispo</th>
<th>Vélos électriques dispo</th>
<th>Bornes libres</th>
</tr>
</thead>
</table>
<script type="text/javascript">
var codeStation = -1;
</script>
<script type="application/javascript">
function filtreDataTable()
{
var valeur = $("#filtreEtat").val();
var dt = $('#stations').DataTable();
switch (valeur) {
case "ouverte":
dt.column(3).search("Ouverte").draw();
break;
case "travaux":
dt.column(3).search("En travaux").draw();
break;
default:
dt.column(3).search("").draw();
break;
}
}
$(document).ready( function () {
var dt = $('#stations').DataTable({
ajax: 'api.php?action=getDataConso&idConso={$idConso}',
columns: ['codeStr', 'name', 'dateOuverture', 'state', 'nbBike', 'nbEbike', 'nbFreeEDock'],
language: dtTraduction
});
filtreDataTable();
$("#filtreEtat").change(filtreDataTable);
} );
</script>
</body>
</html>
\ No newline at end of file
Ce dossier doit être en écriture, il accueil le cache des templates Smarty, utilisé pour afficher les pages du site
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment