Subversion Repositories Applications.referentiel

Compare Revisions

Ignore whitespace Rev 50 → Rev 51

/trunk/services/modules/Referentiel.php
69,7 → 69,7
/* Méthode pour récupérer les noms d'un référentiel.
* Appelée avec les paramêtres d'url suivant :
* /RefReferentiel/tout/code_du_referentiel
* /Referentiel/tout/code_du_referentiel?start=0&limit=1000
*/
public function getElementTout($params_url) {
$p = $this->traiterParametresUrl(array('projet'), $params_url, false);
87,6 → 87,13
$donnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
if ($donnees === false) {
$this->messages[] = "La requête a retourné aucun résultat.";
} else {
$donnees_tmp = $donnees;
$donnees = array();
foreach ($donnees_tmp as &$nom) {
$donnees[$nom['num_nom']] = $nom;
unset($nom);
}
}
} catch (PDOException $e) {
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
/trunk/services/modules/Meta.php
New file
0,0 → 1,112
<?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);
extract($p);
$nom_table = strtolower($projet).'_meta';
$donnees = false;
if (isset($projet)) {
$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;
}
/**
* 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);
}
}
/trunk/services/modules/ArchiverReferentiel.php
New file
0,0 → 1,57
<?php
/**
* Service réalisant l'archivage d'une version de travail d'un référentiel.
* 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 ArchiverReferentiel extends Ref {
/**
* 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('code', 'version');
$params_proteges = $this->traiterParametresPost($params_attendus, $params_post);
$nom_table_origine = strtolower($params_post['code']);
$nom_table_copie = strtolower($params_post['code']).'_v'.str_replace('.', '_', $params_post['version']);
$retour = false;
try {
$requete = "SHOW CREATE TABLE `$nom_table_origine`";
$resultat = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);
if ($resultat === false) {
$this->debug[] = "La récupération de la commande sql de création de la table d'archive a échoué.";
} else {
$requete = $resultat['Create Table'];
$requete = str_replace($nom_table_origine, $nom_table_copie, $requete);
$resultat = $this->bdd->exec($requete);
if ($resultat === false) {
$this->debug[] = "La création de la structure de la table d'archive a échoué.";
} else {
$requete = "INSERT INTO `$nom_table_copie` SELECT * FROM `$nom_table_origine`";
$resultat = $this->bdd->exec($requete);
if ($resultat === false) {
$this->debug[] = "La copie des données a échoué.";
} else {
$retour = true;
}
}
}
} catch (PDOException $e) {
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
}
$this->envoyer($retour);
}
}
/trunk/services/modules/TableStructure.php
49,7 → 49,7
/* Méthode pour récupérer des informations sur les colonnes d'une table.
* Appelée avec les paramêtres d'url suivant :
* /RefTableStructure/colonnes/nom_de_la_table
* /TableStructure/colonnes/nom_de_la_table
*/
public function getElementColonnes($table) {
$requete = "SHOW COLUMNS FROM `$table` ";
68,7 → 68,7
/* Méthode pour récupérer un tableau d'analyse de la table.
* Appelée avec les paramêtres d'url suivant :
* /RefTableStructure/analyse/nom_de_la_table
* /TableStructure/analyse/nom_de_la_table
*/
public function getElementAnalyse($table) {
$requete = "SELECT * FROM `$table` PROCEDURE ANALYSE ( )";
/trunk/services/modules/Ref.php
126,10 → 126,23
return $PDO;
}
protected function executerRequete($requete, $message_echec) {
try {
$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
if ($infos === false) {
$this->messages[] = $message_echec;
}
} catch (PDOException $e) {
$this->messages[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
}
return $infos;
}
protected function getTxt($id) {
$sortie = '';
switch ($id) {
case 'sql_erreur' : $sortie = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s'; break;
case 'sql_erreur_requete' : $sortie = "Requête echec.\nFichier : %s.\nLigne : %s.\nMessage : %s.\nRequête : %s"; break;
default : $sortie = $id;
}
return $sortie;
/trunk/services/modules/Traitement.php
281,7 → 281,7
try {
$requete = "INSERT INTO ref_traitement ".
' (referentiel_code, script, script_parametres, nom, meta_date_creation) '.
" VALUES ({$params_proteges['referentiel_code']}, {$params_proteges['script_parametres']}, {$params_proteges['script']}, $nom, $meta_date_creation) ";
" VALUES ({$params_proteges['referentiel_code']}, {$params_proteges['script']}, {$params_proteges['script_parametres']}, $nom, $meta_date_creation) ";
$resultat = $this->bdd->exec($requete);
if ($resultat === false) {
$id = false;