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 !'); |
} |
} |
} |
} |
?> |