/trunk/scripts/modules/versionnage/squelettes/meta.tpl.tsv |
---|
New file |
0,0 → 1,22 |
titre <?=$titre?> |
code <?=$acronyme?> |
domaine_taxo <?=$dom_tax?> |
domaine_geo <?=$dom_geo?> |
domaine_nom <?=$dom_code?> |
classification <?=$classification?> |
version <?=$version?> |
auteur <?=$auteur_principal?> |
coordinateur <?=$coordinateur?> |
contributeur <?=$contributeur?> |
contributeur <?=$contributeur?> |
date_production <?=$date_prod?> |
source <?=$source?> |
contact <?=$contact?> |
editeur <?=$editeur?> |
droit <?=$copyright?> |
licence <?=$licence?> |
referencement <?=$referencement?> |
stat_combinaison <?=$stats['combinaison']?> |
stat_taxon <?=$stats['taxon']?> |
stat_modification <?=$stats['modification']?> |
signature <?=$signature?> |
/trunk/scripts/modules/versionnage/squelettes/diff.tpl.tsv |
---|
New file |
0,0 → 1,6 |
<?=implode("\t", $champs)?> |
<?php foreach ($diff as $nom_infos) : ?> |
<?=implode("\t", $nom_infos)?> |
<?php endforeach; ?> |
/trunk/scripts/modules/versionnage/Versionnage.php |
---|
22,11 → 22,20 |
private $projet = null; |
private $traitement = null; |
private $meta = null; |
private $messages = null; |
private $manuel = null; |
private $noms = null; |
private $noms_precedents = null; |
private $noms_stat = null; |
private $champs_ordre = null; |
private $champs_nom = null; |
private $diff_modif_types = null; |
private $signature_md5 = null; |
private $resultatDao = null; |
private $traitementDao = null; |
private $metaDao = null; |
private $tableStructureDao = null; |
private $referentielDao = null; |
52,10 → 61,11 |
$cmd = $this->getParam('a'); |
switch ($cmd) { |
case 'tout' : |
$this->metaDao = new MetaDao(); |
$this->resultatDao = new ResultatDao(); |
$this->referentielDao = new ReferentielDao(); |
$this->manuel = parse_ini_file(Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS.'referentiel_v2.1.ini'); |
Debug::printr('Départ lancement test:'); |
Debug::printr('Départ lancement versionnage:'); |
$this->lancerVersionnage(); |
break; |
default : |
67,33 → 77,76 |
} |
public function lancerVersionnage() { |
// Récupération des données à tester |
$noms = $this->referentielDao->getTout($this->projet); |
Debug::printr('Nbre noms :'.count($noms)); |
$this->chargerTraitementParametre(); |
$this->archiver(); |
$this->chargerNomsATraiter(); |
$this->analyserNomsATraiter(); |
$this->creerFichiers(); |
$this->traiterMessages(); |
} |
$this->versionnerBdnt($noms); |
$this->traiterMessagesErreur(); |
private function chargerTraitementParametre() { |
$this->meta = unserialize($this->traitement['script_parametres']); |
} |
private function versionnerBdnt($noms) { |
Debug::printr("Element courrant du tableau des noms : ".print_r(current($noms),true)); |
//Debug::printr("Taille mémoire du tableau des noms : ".Debug::tailleMemoireVar($noms)); |
$champs_ordre = $this->determinerOrdreDesChamps(current($noms)); |
Debug::printr("Tableau ordre des champs : ".print_r($champs_ordre, true)); |
private function archiver() { |
$ok = $this->referentielDao->archiver($this->projet, $this->meta['version']); |
if ($ok) { |
$m = "L'archivage de la version '{$this->meta['version']}' du référentiel '{$this->projet}' a réussi"; |
$this->ajouterMessage($m); |
} else { |
$m = "L'archivage de la version '{$this->meta['version']}' du référentiel '{$this->projet}' a échoué"; |
$this->ajouterMessage($m); |
} |
} |
private function chargerNomsATraiter() { |
$archive_courante = strtolower($this->projet).'_v'.str_replace('.', '_', $this->meta['version']); |
Debug::printr("Nom archive courante :".$archive_courante); |
$this->noms = $this->referentielDao->getTout($archive_courante); |
} |
private function analyserNomsATraiter() { |
$this->noms_stat['combinaison'] = $this->getNombreCombinaison(); |
$this->noms_stat['taxon'] = $this->getNombreTaxon(); |
Debug::printr("Stats :".print_r($this->noms_stat, true)); |
} |
private function getNombreCombinaison() { |
return count($this->noms); |
} |
private function getNombreTaxon() { |
$nbre = 0; |
foreach ($this->noms as $nom) { |
if ($nom['num_nom_retenu'] == $nom['num_nom']) { |
$nbre++; |
} |
} |
return $nbre; |
} |
private function creerFichiers() { |
// Respecter l'ordre de traitement : BDNT puis DIFF puis META |
$this->creerFichierBdnt(); |
$this->creerFichierDiff(); |
$this->creerFichierMeta(); |
} |
private function creerFichierBdnt() { |
Debug::printr("Element courrant du tableau des noms : ".print_r(current($this->noms),true)); |
//Debug::printr("Taille mémoire du tableau des noms : ".Debug::tailleMemoireVar($this->noms)); |
$this->determinerOrdreDesChamps(); |
$this->definirNomDesChamps(); |
$donnees = array(); |
$donnees['champs'] = array_flip($champs_ordre); |
//$donnees['noms'] = $noms; |
foreach ($noms as $id => $nom) { |
// Suppression de la ligne du tableau pour gagner de l'espace mémoire |
unset($noms[$id]); |
$donnees['champs'] = $this->champs_nom; |
foreach ($this->noms as &$nom) { |
$infos = array(); |
foreach ($nom as $champ => $valeur) { |
if (isset($champs_ordre[$champ])) { |
$ordre = $champs_ordre[$champ]; |
$infos[$ordre] = $valeur; |
foreach ($nom as $champ => &$valeur) { |
if (isset($this->champs_ordre[$champ])) { |
$ordre = $this->champs_ordre[$champ]; |
$infos[$ordre] = trim($valeur); |
} else { |
$e = "Le champ '$champ' n'a pas été pris en compte dans l'attribution de l'ordre des champs."; |
$this->ajouterMessage($e); |
102,22 → 155,23 |
$donnees['noms'][] = $infos; |
} |
$bdtn_tsv = $this->getVue('versionnage/squelettes/bdnt', $donnees, '.tpl.tsv'); |
if (file_put_contents(Config::get('chemin_referentiel_zip').'bdnt.txt', $bdtn_tsv) == false) { |
Debug::printr("une erreur est survenu lors de l'écriture du fichier"); |
} else { |
} |
$bdnt_tsv = $this->getVue('versionnage/squelettes/bdnt', $donnees, '.tpl.tsv'); |
$this->ecrireFichierBdnt($bdnt_tsv); |
} |
private function determinerOrdreDesChamps($nom) { |
private function determinerOrdreDesChamps() { |
$champs_ordre = explode(',', $this->manuel['champs']); |
$champs_ordre = array_flip($champs_ordre); |
$champs_ordre = $this->attribuerOrdreChampsSupplémentaires($champs_ordre, $nom); |
$nom_courant = current($this->noms); |
$champs_ordre = $this->attribuerOrdreChampsSupplémentaires($champs_ordre, $nom_courant); |
asort($champs_ordre); |
return $champs_ordre; |
$this->champs_ordre = $champs_ordre; |
} |
private function definirNomDesChamps() { |
$this->champs_nom = array_flip($this->champs_ordre); |
} |
private function attribuerOrdreChampsSupplémentaires($champs_ordre, $nom) { |
foreach ($nom as $champ => $info) { |
if (!isset($champs_ordre[$champ])) { |
132,6 → 186,151 |
$this->messages[] = array($titre, $message); |
} |
private function ecrireFichierBdnt($contenu) { |
$fichier_nom = $this->getBaseNomFichier().'_ref.txt'; |
$fichier_chemin = Config::get('chemin_referentiel_zip').$fichier_nom; |
if ($this->ecrireFichier($fichier_chemin, $contenu)) { |
$this->ajouterMessage("Écriture du fichier bdnt réussie."); |
$this->signature_md5 = md5_file($fichier_chemin); |
$this->ajouterMessage("Signature MD5 du fichier bdnt :".$this->signature_md5); |
$this->ajouterMessage("Nombre de noms traités : ".count($noms)); |
} |
} |
private function getBaseNomFichier() { |
return strtolower($this->meta['acronyme'].'_v'.$this->meta['version']); |
} |
private function ecrireFichier($fichier_chemin, $contenu) { |
$retour = true; |
if (file_put_contents($fichier_chemin, $contenu) == false) { |
$e = "Une erreur est survenu lors de l'écriture du fichier : $fichier_chemin"; |
$this->ajouterMessage($e); |
$retour = false; |
} |
return $retour; |
} |
private function creerFichierDiff() { |
$derniere_meta = $this->metaDao->getDerniere($this->projet); |
if ($derniere_meta === false) { |
$this->ajouterMessage("Premier versionnage pour ce projet, aucun fichier différentiel ne sera créé."); |
} else { |
$code_projet_precedent = strtolower($derniere_meta['code']).'_v'.str_replace('.', '_', $derniere_meta['version']); |
$this->noms_precedents = $this->referentielDao->getTout($code_projet_precedent); |
$donnees = array(); |
$donnees['diff'] = $this->realiserDiff(); |
$donnees['champs'] = $this->champs_nom; |
$diff_tsv = $this->getVue('versionnage/squelettes/diff', $donnees, '.tpl.tsv'); |
$this->ecrireFichierDiff($diff_tsv); |
} |
} |
private function realiserDiff() { |
$diff = array(); |
$this->noms_stat['modification'] = 0; |
foreach ($this->noms as $id => &$nom) { |
if (!isset($this->noms_precedents[$id])) { |
$diff[$id] = $nom; |
$diff[$id]['modification_type'] = 'A'; |
$diff[$id]['modification_type_1'] = '0'; |
$diff[$id]['modification_type_2'] = '0'; |
$diff[$id]['modification_type_3'] = '0'; |
$this->noms_stat['modification']++; |
} else { |
$nom_precedent =& $this->noms_precedents[$id]; |
$nom_diff = array_diff_assoc($noms, $nom_precedent); |
if (count($nom_diff) > 0) { |
$this->noms_stat['modification']++; |
$modif['modification_type'] = 'M'; |
$modif['modification_type_1'] = '0'; |
$modif['modification_type_2'] = '0'; |
$modif['modification_type_3'] = '0'; |
$this->chargerTableauChampsModifTypes(); |
foreach ($this->champs_nom as $champ) { |
if (isset($nom_diff[$champ])) { |
$diff[$id][$champ] = $nom_diff[$champ]; |
$type = $this->getDiffType($champ); |
$modif['modification_type_'.$type] = '1'; |
} else { |
$diff[$id][$champ] = ''; |
} |
} |
foreach ($modif as $cle => $val) { |
$diff[$id][$cle] = $val; |
} |
} |
} |
} |
return $diff; |
} |
private function chargerTableauChampsModifTypes() { |
$champs = explode(',', $this->manuel['champs_diff_type']); |
foreach ($champs as $champ) { |
list($champ_nom, $type) = explode('=', $champ); |
$this->diff_modif_types[$champ_nom] = $type; |
} |
} |
private function getDiffType($champ_nom) { |
$type = isset($this->diff_modif_types[$champ_nom]) ? $this->diff_modif_types[$champ_nom] : '3'; |
return $type; |
} |
private function ecrireFichierDiff($contenu) { |
$fichier_nom = $this->getBaseNomFichier().'diff.txt'; |
$fichier_chemin = Config::get('chemin_referentiel_zip').$fichier_nom; |
if ($this->ecrireFichier($fichier_chemin, $contenu)) { |
$this->ajouterMessage("Écriture du fichier diff réussie."); |
} |
} |
private function creerFichierMeta() { |
$donnees = array(); |
$donnees = $this->meta; |
$donnees['stats'] = $this->noms_stat; |
$donnees['signature'] = $this->signature_md5; |
$meta_tsv = $this->getVue('versionnage/squelettes/meta', $donnees, '.tpl.tsv'); |
$this->ecrireFichierMeta($meta_tsv); |
} |
private function ecrireFichierMeta($contenu) { |
$fichier_nom = $this->getBaseNomFichier().'_meta.txt'; |
$fichier_chemin = Config::get('chemin_referentiel_zip').$fichier_nom; |
if ($this->ecrireFichier($fichier_chemin, $contenu)) { |
$this->ajouterMessage("Écriture du fichier meta réussie."); |
$this->archiverMetadonnees(); |
} |
} |
private function archiverMetadonnees() { |
$metadonnees = $this->meta; |
$metadonnees['code'] = $this->meta['acronyme']; |
unset($metadonnees['acronyme']); |
$metadonnees['domaine_taxo'] = $this->meta['dom_tax']; |
unset($metadonnees['dom_tax']); |
$metadonnees['domaine_geo'] = $this->meta['dom_geo']; |
unset($metadonnees['dom_geo']); |
$metadonnees['domaine_nom'] = $this->meta['dom_code']; |
unset($metadonnees['dom_code']); |
$metadonnees['auteur'] = $this->meta['auteur_principal']; |
unset($metadonnees['auteur_principal']); |
$metadonnees['date_production'] = $this->meta['date_prod']; |
unset($metadonnees['date_prod']); |
$metadonnees['droit'] = $this->meta['copyright']; |
unset($metadonnees['copyright']); |
$ok = $this->metaDao->ajouter($metadonnees); |
if ($ok === false) { |
$this->ajouterMessage("L'archivage des métadonnées a échoué."); |
} |
} |
private function traiterMessages() { |
if (isset($this->messages)) { |
foreach ($this->messages as $message) { |
/trunk/scripts/modules/tests/Tests.php |
---|
1202,8 → 1202,9 |
// Recercherche des erreurs |
$champs_erreur = array(); |
foreach ($champs_attendus as $champ_attendu) { |
list($champ_attendu_nom, $champ_attendu_type) = explode('=', trim($champ_attendu)); |
list($champ_attendu_nom, $champ_attendu_type_taille) = explode('=', trim($champ_attendu)); |
list($champ_attendu_type, $champ_attendu_taille) = explode('|', trim($champ_attendu_type_taille)); |
if (isset($champs_presents[$champ_attendu_nom])) { |
$champs_present_type = $champs_presents[$champ_attendu_nom]; |
/trunk/configurations/referentiel_v2.1.ini |
---|
3,41 → 3,77 |
; Noms des champs |
champs = "num_nom,num_nom_retenu,num_tax_sup,rang,nom_complet,nom_supra_generique,genre,epithete_infra_generique,epithete_sp,type_epithete,epithete_infra_sp,cultivar_groupe,cultivar,nom_commercial,auteur,annee,biblio_origine,notes,nom_addendum,homonyme,basionyme,synonyme_proparte,synonyme_douteux,synonyme_mal_applique,synonyme_orthographique,biblio_statut,hybride_parent_01,hybride_parent_01_notes,hybride_parent_02,hybride_parent_02_notes,nom_francais,presence,statut_origine,statut_introduction,statut_culture" |
; Noms et types des champs |
champs_type = "num_nom=INT, |
num_nom_retenu=VARCHAR, |
num_tax_sup=VARCHAR, |
rang=INT, |
nom_complet=VARCHAR, |
nom_supra_generique=VARCHAR, |
genre=VARCHAR, |
epithete_infra_generique=VARCHAR, |
epithete_sp=VARCHAR, |
type_epithete=VARCHAR, |
epithete_infra_sp=VARCHAR, |
cultivar_groupe=VARCHAR, |
cultivar=VARCHAR, |
nom_commercial=VARCHAR, |
auteur=VARCHAR, |
annee=VARCHAR, |
biblio_origine=VARCHAR, |
champs_type = "num_nom=INT|7, |
num_nom_retenu=VARCHAR|7, |
num_tax_sup=VARCHAR|7, |
rang=INT|4, |
nom_complet=VARCHAR|500, |
nom_supra_generique=VARCHAR|100, |
genre=VARCHAR|100, |
epithete_infra_generique=VARCHAR|100, |
epithete_sp=VARCHAR|100, |
type_epithete=VARCHAR|100, |
epithete_infra_sp=VARCHAR|100, |
cultivar_groupe=VARCHAR|100, |
cultivar=VARCHAR|100, |
nom_commercial=VARCHAR|100, |
auteur=VARCHAR|100, |
annee=VARCHAR|4, |
biblio_origine=VARCHAR|500, |
notes=TEXT, |
nom_addendum=VARCHAR, |
homonyme=VARCHAR, |
basionyme=VARCHAR, |
synonyme_proparte=VARCHAR, |
synonyme_douteux=VARCHAR, |
synonyme_mal_applique=VARCHAR, |
synonyme_orthographique=VARCHAR, |
nom_addendum=VARCHAR|500, |
homonyme=VARCHAR|7, |
basionyme=VARCHAR|7, |
synonyme_proparte=VARCHAR|100, |
synonyme_douteux=VARCHAR|7, |
synonyme_mal_applique=VARCHAR|7, |
synonyme_orthographique=VARCHAR|7, |
biblio_statut=TEXT, |
hybride_parent_01=VARCHAR, |
hybride_parent_01=VARCHAR|7, |
hybride_parent_01_notes=TEXT, |
hybride_parent_02=VARCHAR, |
hybride_parent_02=VARCHAR|7, |
hybride_parent_02_notes=TEXT, |
nom_francais=VARCHAR, |
presence=VARCHAR, |
statut_origine=VARCHAR, |
statut_introduction=VARCHAR, |
statut_culture=VARCHAR" |
nom_francais=VARCHAR|500, |
presence=VARCHAR|100, |
statut_origine=VARCHAR|100, |
statut_introduction=VARCHAR|100, |
statut_culture=VARCHAR|100" |
; Classement des champs dans les différentes classes de modification |
champs_diff_type = "num_nom=1, |
num_nom_retenu=1, |
num_tax_sup=1, |
rang=1, |
nom_complet=2, |
nom_supra_generique=2, |
genre=2, |
epithete_infra_generique=2, |
epithete_sp=2, |
type_epithete=2, |
epithete_infra_sp=2, |
cultivar_groupe=2, |
cultivar=2, |
nom_commercial=2, |
auteur=3, |
annee=3, |
biblio_origine=3, |
notes=3, |
nom_addendum=3, |
homonyme=3, |
basionyme=3, |
synonyme_proparte=3, |
synonyme_douteux=3, |
synonyme_mal_applique=3, |
synonyme_orthographique=3, |
biblio_statut=3, |
hybride_parent_01=3, |
hybride_parent_01_notes=3, |
hybride_parent_02=3, |
hybride_parent_02_notes=3, |
nom_francais=3, |
presence=3, |
statut_origine=3, |
statut_introduction=3, |
statut_culture=3" |
; Valeurs numériques des rangs |
rangs = "10,20,30,40,50,55,40,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,340,350,360,370,380,390,400,410,420,430" |
; Valeur numérique indiquant le rang du genre |
/trunk/bibliotheque/dao/ReferentielDao.php |
---|
15,6 → 15,7 |
*/ |
class ReferentielDao extends Dao { |
const SERVICE = 'Referentiel'; |
const SERVICE_ARCHIVAGE = 'ArchiverReferentiel'; |
/** |
* Retourne des infos sur l'ensemble des référentiels disponibles. |
60,5 → 61,24 |
$nbre = json_decode($json, true); |
return $nbre; |
} |
/** |
* Copie la table de travail du référentiel pour l'archiver avec une numéro de version. |
* |
* @param string le code du référentiel. |
* @param string la version du référentiel. |
* @return bool true en cas de succé ou false en cas d'échec. |
*/ |
public function archiver($code_projet, $version) { |
$url = $this->url_jrest.self::SERVICE_ARCHIVAGE; |
// Préparation des données à passer par POST |
$donnees['code'] = $code_projet; |
$donnees['version'] = $version; |
// Envoie des données et récupération du retour |
$json = $this->envoyerRequeteAjout($url, $donnees); |
$ok = json_decode($json, true); |
return $ok; |
} |
} |
?> |
/trunk/bibliotheque/dao/MetaDao.php |
---|
New file |
0,0 → 1,45 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Modèle d'accès à la base de données des Référentiels. |
* Permet d'accèder au méta-données des référentiels. |
* |
* @package Referentiel |
* @category Php 5.2 |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright 2010 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL |
* @version SVN: $Id$ |
* |
*/ |
class MetaDao extends Dao { |
const SERVICE = 'Meta'; |
/** |
* Retourne les dernières méta-données pour un projet donné. |
* |
* @param string le code du projet de référentiel. |
* @return mixed un tableau contenant les informations sur les dernières méta-données ou false en cas d'échec. |
*/ |
public function getDerniere($code_projet) { |
$url = $this->url."/Derniere/$code_projet"; |
$json = $this->envoyerRequeteConsultation($url); |
$traitements = json_decode($json, true); |
return $traitements; |
} |
/** |
* Ajoute des méta-données pour une référentiel donné. |
* |
* @param array les méta-données dans un tableau dont les clés correspondent aux champs de la table. |
* @return mixed l'id du traitement ou false en cas d'échec. |
*/ |
public function ajouter($metadonnees) { |
// Envoie des données et récupération du retour |
$json = $this->envoyerRequeteAjout($this->url, $metadonnees); |
$id = json_decode($json, true); |
return $id; |
} |
} |
/trunk/interfaces/controleurs/Versionnage.php |
---|
197,7 → 197,7 |
'contributeur' => 'Auteurs/Contributeurs'); |
foreach ($champs_contact as $champ_id => $champ_nom) { |
if (isset($_POST[$champ_id]) && ! $this->verifierContact($_POST[$champ_id])) { |
$this->addMessage("Le champ '$champ_nom' n'est pas au format : Prénom1 NOM1 (Organisation1) <courriel1>, Prénom2 NOM2 (Organisation2) <courriel2>."); |
$this->addMessage("Le champ '$champ_nom' n'est pas au format : Prénom1 NOM1 (Organisation1) [courriel1], Prénom2 NOM2 (Organisation2) [courriel2]."); |
$ok = false; |
} |
} |
220,7 → 220,7 |
$contacts = explode(',', $txt); |
foreach ($contacts as $contact) { |
$contact = trim($contact); |
if (! preg_match("/^$pp $pn $po <$pc>(?:|.)$/u", $contact)) { |
if (! preg_match("/^$pp $pn $po \[$pc\](?:|.)$/u", $contact)) { |
$ok = false; |
} |
} |
/trunk/interfaces/controleurs/AppliControleur.php |
---|
294,6 → 294,13 |
* Lance l'ajout d'un traitement |
*/ |
protected function ajouterTraitement($referentiel_code, $script_nom) { |
$this->ajouterTraitementParametre($referentiel_code, null, $script_nom); |
} |
/** |
* Lance l'ajout d'un traitement |
*/ |
protected function ajouterTraitementParametre($referentiel_code, $parametres_serialises, $script_nom) { |
if (is_null($referentiel_code)) { |
$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff)."); |
} else { |
325,7 → 332,7 |
} |
} |
} else { |
$resultat = $traitementDao->ajouterTraitement($referentiel_code, $script_nom); |
$resultat = $traitementDao->ajouterTraitementParametre($referentiel_code, $parametres_serialises, $script_nom); |
if ($resultat != false) { |
$this->addMessage("Le traitement #'$resultat' a été ajouté."); |
$this->lancerScript($referentiel_code, $script_nom); |
/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; |