* @license GPL v3 * @license CECILL v2 * @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ésultats try { $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ésultats try { $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); } }