bikeinparis/index.php

120 lines
4.9 KiB
PHP

<?php
session_start(); //Sessions are used to limit the ajax need and the communication between server and velib server (velib servers will block you if you make too many requests).
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Vélibs à proximité</title>
<meta name="description" content="">
<meta name="author" content="phyks">
<link rel="shortcut icon" href="favicon.ico">
<link rel="stylesheet" href="main.css" type="text/css" media="screen">
<link rel="stylesheet" href="leaflet.css" />
<!--[if lte IE 8]>
<link rel="stylesheet" href="leaflet.ie.css" />
<![endif]-->
<script src="leaflet.js"></script>
<script type="text/javascript" src="Polyline.encoded.js"></script>
<script type="text/javascript" src="js.js"></script>
</head>
<body>
<h1><a href="index.php">Vélibs à proximité</a></h1>
<?php
if(!is_file('data/data')) //First run
{
//Define a new synchronisation code
$code_synchro = substr(sha1(rand(0,30).time().rand(0,30)),0,10);
file_put_contents('data/data', base64_encode(gzdeflate(serialize(array($code_synchro, ''))))); //Save it in data/data file
$_GET['code'] = $code_synchro;
echo "<p>
Définition du code de synchronisation.<br/>
Vous pouvez désormais mettre à jour la liste des stations en visitant l'adresse suivante (update URL) :<br/>
<a href='http://" . $_SERVER["SERVER_NAME"].$_SERVER['REQUEST_URI']."?update=1&code=".$code_synchro."'>http://" . $_SERVER["SERVER_NAME"].$_SERVER['REQUEST_URI']."?update=1&code=".$code_synchro."</a>
</p>
<p>
Il est possible d'automatiser la tâche via une tâche cron. Par exemple (see README) :<br/>
* * * * * wget -q -O <a href='http://" . $_SERVER["SERVER_NAME"].$_SERVER['REQUEST_URI']."?update=1&code=".$code_synchro."'>http://" . $_SERVER["SERVER_NAME"].$_SERVER['REQUEST_URI']."?update=1&code=".$code_synchro."</a> #Commande de mise a jour des stations de velib
</p>";
}
if(!empty($_GET['update']) || !empty($code_synchro)) //If we want to make an update (or first run)
{
if(empty($code_synchro) && is_file('data/data')) //If not first run, get the synchronisation code from data file
{
$data = unserialize(gzinflate(base64_decode(file_get_contents('data/data'))));
$code_synchro = $data[0];
}
if(!empty($_GET['code']) && $_GET['code'] == $code_synchro) //Once we have the code and it is correct
{
$stations_xml = simplexml_load_file('http://www.velib.paris.fr/service/carto');
$liste_stations = $stations_xml->markers->marker; //Get the stations list
foreach($liste_stations as $station)
{
$stations[] = array('name' => htmlentities((string) $station['name']), 'id' => (int) $station['number'], 'address' => htmlentities((string) $station['fullAddress']), 'lat' => (float) $station['lat'], 'lng' => (float) $station['lng'], 'open' => (int) $station['open'], 'bonus' => (int) $station['bonus'], 'free' => 0, 'available' => 0, 'updated' => 0);
}
file_put_contents('data/data', base64_encode(gzdeflate(serialize(array($code_synchro, $stations))))); //And put the content in the data file
echo "<p>Mise à jour de la liste des stations effectuée avec succès (Update successful).</p>";
}
else
{
echo "<p>Mauvais code de vérification (Error : bad synchronisation code). Veuillez réessayer la mise à jour. Se référer au README pour plus d'informations sur la mise à jour.</p>";
}
echo "<p><a href='index.php'>Retourner à l'application (Back to index)</a></p>";
}
else
{
?>
<div id="see_map"></div>
<div id="stations"></div>
<?php
if(!empty($_GET['map']))
{
?>
<div id="map"></div>
<?php
$param = (!empty($_GET['available'])) ? 'available' : 'free';
echo "<p><a href='index.php?".$param."=1'>← Retour à la liste</a></p>";
}
if(!empty($_GET))
{
echo "<hr/>";
}
?>
<div id="position">
<form action="" method="get">
<p>
<label for="position">Chercher autour de :</label><br/>
<input type="text" name="position" id="position"/>
</p>
<p>
<input type="submit" value="Chercher"/>
</p>
<?php
foreach($_GET as $GET=>$param)
{
if($GET != 'position')
echo '<input type="hidden" name="'.htmlspecialchars($GET).'" value="'.htmlspecialchars($param).'"/>';
}
?>
</form>
</div>
<hr/>
<p id="thanks">Map is handled thanks to the <a href="http://leafletjs.com/">Leaflet</a> library, using © <a href="http://osm.org/copyright">OpenStreetMap</a> contributors tiles. Reverse geolocation (Nominatim) are provided by the <a href="http://www.mapquest.com/" alt="MapQuest icon">MapQuest</a> <img src="http://developer.mapquest.com/content/osm/mq_logo.png"> open API. Routes are provided by <a href='http://project-osrm.org/'>the OSRM project</a> (OSRM is a free and open source program under GNU Affero GPL).</p>
<p id="suggestions">N'hésitez pas à m'envoyer vos suggestions à <a href="mailto:webmaster@phyks.me">webmaster@phyks.me</a>.</p>
</body>
</html>
<?php
}
?>