schedule/poiDB.class.php

114 lines
3.7 KiB
PHP
Raw Normal View History

2023-10-13 06:43:02 +02:00
<?php
/**
* @license http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.html
* @author Francois Merciol <dokuplugin@merciol.fr>
*
* Plugin Schedule: manage events per wiki @groups
*/
// ============================================================
class poiDB {
var $modify = false;
var $dbFileName;
var $dbByInsee;
var $allLines;
// ============================================================
function __construct ($plugin) {
global $conf;
$this->dbFileName =
((!$conf['savedir'] || strpos ($conf['savedir'], '.') === 0) ? DOKU_INC : "").
$conf['savedir'].'/'.trim ($plugin->getConf ('dataDir').'/poiDB.txt');
$this->read ();
}
// ============================================================
function getInsee ($insee) {
if (!isset ($this->dbByInsee [$insee]))
return array ();
return $this->dbByInsee [$insee];
}
// ============================================================
function addLine ($line) {
$this->cleanDB ();
$line = $this->cleanLine ($line);
if (!$this->allLines || !in_array ($line, $this->allLines)) {
$this->allLines [] = $line;
sort ($this->allLines);
$this->modify = true;
}
$this->write ();
echo "record".NL;
}
// ============================================================
function removeLine ($line) {
$this->cleanDB ();
$line = $this->cleanLine ($line);
if (($key = array_search ($line, $this->allLines)) !== false) {
unset ($this->allLines [$key]);
$this->modify = true;
}
$this->write ();
}
// ============================================================
function cleanLine ($line) {
// XXX vérifier nombre
$data = explode ("|", $line);
foreach ($data as $key => $val)
$data[$key] = trim ($val);
$data [1] = number_format ((float)$data[1], 4);
$data [2] = number_format ((float)$data[2], 4);
return implode ("|", $data);
}
// ============================================================
function cleanDB () {
if ($this->allLines)
foreach ($this->allLines as $key => $line) {
$lineCleaned = $this->cleanLine ($line);
if ($lineCleaned != $line)
$this->modify = true;
$this->allLines [$key] = $lineCleaned;
}
}
// ============================================================
function read () {
$this->dbByInsee = array ();
$handle = @fopen ($this->dbFileName, "r");
if ($handle) {
while (($line = fgets ($handle)) !== false) {
$line = trim (preg_replace ("/#.*$/", "", str_replace ('\\\\', '~br~', $line)));
if (!$line)
continue;
$this->allLines [] = $line;
list ($insee, $end) = explode ('|', $line, 2);
$this->dbByInsee [$insee][] = $end;
}
fclose ($handle);
}
}
// ============================================================
function write () {
if (!$this->modify) {
echo "POI DB unchanged !".NL;
return;
}
$handle = @fopen ($this->dbFileName, "w");
if ($handle == false)
die("unable to create file: ".$this->dbFileName); // XXX
foreach ($this->allLines as $line)
fputs ($handle, $line.NL);
fclose ($handle);
echo "POI DB updated !".NL;
}
// ============================================================
}