Rev 326 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** Service fournissant des données de la table contenant les méta-données d'un référentiel de travail.* Encodage en entrée : utf8* Encodage en sortie : utf8** @category Php 5.2* @package Referentiel* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>* @copyright 2010 Tela-Botanica* @version $Id$*/class Meta extends Ref {/*** Méthode principale appelée avec une requête de type GET.*/public function getElement($params_url = array()) {// Initialisation des variables$info = array();// Nour recherchons le type de requête demandé$p = $this->traiterParametresUrl(array('type'), $params_url, false);extract($p);if (!is_null($type)) {$methode = 'getElement'.$type;if (method_exists($this, $methode)) {array_shift($params_url);$info = $this->$methode($params_url);} else {$this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";}} else {$this->messages[] = "Veuillez préciser le type de requête.";}// Envoie sur la sortie standard$this->envoyer($info);}/** Méthode pour récupérer les dernières meta-données ajoutées* Appelée avec les paramêtres d'url suivant :* /Meta/Dernier/code_projet*/public function getElementDerniere($params_url) {$p = $this->traiterParametresUrl(array('projet'), $params_url, false);extract($p);$donnees = false;if (isset($projet)) {$nom_table = strtolower($projet).'_meta';$requete = ($this->distinct ? 'SELECT DISTINCT' : 'SELECT').' * '."FROM `$nom_table` ".'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'id_meta DESC').' '.'LIMIT 0,1 ';// Récupération des résultatstry {$donnees = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);if ($donnees === false) {$this->messages[] = "La requête a retourné aucun résultat.";} else if (0 == count($donnees)) {$donnees = null;}} catch (PDOException $e) {$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());}} else {$this->messages[] = "Veuillez préciser le nom de code du projet comme premier paramêtre (ex. : bdnff). ";}return $donnees;}public function getElementExport($param) {// Initialisation des variables$info = array();$champs = array("titre", "code", "version", "domaine_taxo", "domaine_geo", "domaine_nom", "classification", "coordinateur", "auteur", "contributeur", "date_production", "source", "contact", "editeur", "droit", "licence", "referencement");$p = $this->traiterParametresUrl(array("ref","version"), $param, false);$racine_tmp = $this->config['chemins']['chemin_tmp'];$fichier = $racine_tmp.date('Y_m_d')."/meta_".$p['version']."_".time().'.csv';$requete = "SELECT '".implode("', '", $champs)."' UNION ( SELECT ".implode(", ", $champs)." INTO OUTFILE '".$fichier."' CHARACTER SET utf8 FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\n' "." FROM ".$p['ref']."_meta WHERE version = '".str_replace("_", ".", $p['version'])."')";// Récupération des résultatstry {$donnees = $this->bdd->query($requete);if ($donnees === false) {$this->messages[] = "La requête a retourné aucun résultat : $requete";} else {$info = $donnees;}} catch (PDOException $e) {$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage()).$requete;}return $fichier;}/*** Méthode appelée pour ajouter des méta-données à un référentiel.* Retour l'id du nouvel enregistrement ou false!*/public function createElement($params_post) {$params_attendus = array('titre', 'code', 'domaine_taxo', 'domaine_geo', 'domaine_nom', 'classification','version', 'coordinateur', 'auteur', 'contributeur', 'date_production', 'date_validation', 'source','contact', 'editeur', 'droit', 'licence', 'referencement', 'stat_combinaison', 'stat_taxon', 'stat_modification','signature');$params_proteges = $this->traiterParametresPost($params_attendus, $params_post);$nom_table = strtolower($params_post['code']).'_meta';$champs = array();$valeurs = array();foreach ($params_proteges as $champ => $valeur) {$champs[] = $champ;$valeurs[] = $valeur;}try {$requete = "INSERT INTO `$nom_table` (".implode(', ', $champs).') VALUES ('.implode(', ', $valeurs).') ';$resultat = $this->bdd->exec($requete);if ($resultat === false) {$id = false;$this->debug[] = "Méta-données NON ajoutées.";} else {$id = $this->bdd->lastInsertId();}} catch (PDOException $e) {$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);}$this->envoyer($id);}}