Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2953 → Rev 2954

/trunk/widget/modules/savapa/Savapa.php
New file
0,0 → 1,84
<?php
/**
* @author Mathias Chouet <mathias@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @copyright Copyright (c) 2016, Tela Botanica (accueil@tela-botanica.org)
*/
class Savapa extends WidgetCommun {
 
const DS = DIRECTORY_SEPARATOR;
const SERVICE_DEFAUT = 'savapa';
/** Si spécifié, on ajoute une barre de navigation inter-applications */
private $bar;
/** liste des requetes (dans requetes.json) */
protected $requetes;
/**
* Méthode appelée par défaut pour charger ce widget.
*/
public function executer() {
$retour = null;
//extract($this->parametres); // aaaargh mon pauvre cœur :'(
$this->bar = (isset($bar)) ? $bar : false;
 
// chargement de la config
$fichierConfig = dirname(__FILE__) . self::DS . "config.json";
try {
$this->configJson = json_decode(file_get_contents($fichierConfig), true);
} catch (Exception $ex) {
return "Veuillez remplir un fichier [config.json] à la racine du widget";
}
//var_dump($this->config);
 
// connexion à la base
// @TODO remplaer par un WS mais le cas ne s'y prête pas
$dsn = "mysql:dbname=" . $this->configJson['bd']['base']
. ";host=" . $this->configJson['bd']['hote']
. ";port=" . $this->configJson['bd']['port'];
$bd = new PDO($dsn, $this->configJson['bd']['utilisateur'], $this->configJson['bd']['mdp']);
 
// exécution en file indienne (attention au temps)
foreach ($this->configJson['requetes'] as &$req) {
$this->filtrerRequete($req['sql']); // TRÈS important
$r = $bd->query($req['sql']);
$donneesBrutes = $r->fetchAll(PDO::FETCH_ASSOC);
$labels = array();
$donnees = array();
foreach($donneesBrutes as $e) {
if ($e["periode"] != null) {
$labels[] = $e["periode"];
$donnees[] = $e["nombre"];
}
}
$req['resultat'] = array(
'labels' => $labels,
'donnees' => $donnees
);
}
 
// données
$retour['donnees']['url_base'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], '');
$retour['donnees']['url_export'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelWidgetExport');
$retour['donnees']['url_script_navigation'] = sprintf($this->config['chemins']['baseURLRessources'], 'tb/reseau/navigation.js');
 
$retour['donnees']['bar'] = $this->bar;
$retour['donnees']['requetes'] = $this->configJson['requetes'];
//$retour['donnees']['prod'] = ($this->config['parametres']['modeServeur'] == "prod");
 
// rendu
$squelette = dirname(__FILE__).self::DS.'squelettes'.self::DS.'savapa.tpl.html';
$contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']);
$this->envoyer($contenu);
}
 
// empêche de tout péter
protected function filtrerRequete($r) {
$instructions = array("INSERT", "UPDATE", "DELETE", "TRUNCATE", "DROP", "ADD");
foreach ($instructions as $i) {
if (stripos($r, $i) !== false) {
throw new Exception('Les instructions ' . implode(', ', $instructions) . 'sont interdites, galopin !');
}
}
}
}
?>