Subversion Repositories Applications.referentiel

Compare Revisions

Ignore whitespace Rev 343 → Rev 344

/branches/v2.0-betulales/bibliotheque/dao/RechercheDao.php
New file
0,0 → 1,58
<?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 Delphine CAUQUIL <delphine@tela-botanica.org>
* @author aurelien <aurelien@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 RechercheDao extends Dao {
const SERVICE = 'Recherche';
/**
* Recherche un référentiel en fonction de paramètres
* @return le nombre de résultats répondant à la requête
*/
public function chercherStructureNbre($type, $parametres) {
$url = $this->construireUrlRecherche($type, $parametres, false);
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json);
return $donnees;
}
/**
* Recherche un référentiel en fonction de paramètres
* @return array un tableau contenant des objets d'informations sur les taxons
*/
public function chercher($type, $parametres) {
$this->ordre['nom_sci'] = 'ASC';
$url = $this->construireUrlRecherche($type, $parametres);
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
 
private function construireUrlRecherche($type, $parametres, $limitation = true) {
$url = $this->url_jrest.self::SERVICE.'/'.$type;
$params_a_passer = array('ref', 'mots', 'sg', 'gen', 'sp', 'ssp', 'au', 'an', 'nn', 'bib', 'nr', 'tax', 'pre', 'taxref', 'classif', 'rg');
foreach ($params_a_passer as $param_cle) {
if (isset($parametres[$param_cle]) && $parametres[$param_cle] != '') {
$valeur = urlencode(trim($parametres[$param_cle]));
$url .= '/'.$valeur;
} else {
$url .= '/*';
}
}
return $url;
}
}
?>
/branches/v2.0-betulales/bibliotheque/dao/TableStructureDao.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.
* Service concernant les tests
*
* @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 TableStructureDao extends Dao {
const SERVICE = 'TableStructure';
/**
* Retourne l'ensemble des information sur les colonnes d'une table.
*
* @param string le nom de la table.
* @return array un tableau contenant les informations sur les colonnes de la table.
*/
public function getColonnes($table) {
$url = $this->url_jrest.self::SERVICE."/colonnes/$table";
$json = file_get_contents($url);
$donnees = json_decode($json, true);
return $donnees['colonnes'];
}
/**
* Retourne l'ensemble des information d'analyse de la structure d'une table.
*
* @param string le nom de la table.
* @return array un tableau contenant les informations de l'analyse de la table.
*/
public function getAnalyse($table) {
$url = $this->url_jrest.self::SERVICE."/analyse/$table";
$json = file_get_contents($url);
$donnees = json_decode($json, true);
return $donnees['analyses'];
}
}
?>
/branches/v2.0-betulales/bibliotheque/dao/TaxonDao.php
New file
0,0 → 1,76
<?php
// declare(encoding='UTF-8');
/**
* DAO des Taxons pour le module Taxons.
*
* @package Taxon
* @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: TaxonDao.php 151 2010-09-06 16:03:09Z jpm $
*
*/
class TaxonDao extends Dao {
const SERVICE = 'FicheTaxon';
/**
* Retourne l'ensemble des information sur un taxon.
*
* @param integer le numéro du taxon.
* @return array un tableau contenant les informations sur la taxon.
*/
public function getTaxon($ref, $id) {
$url = $this->url_jrest.self::SERVICE."/Taxon/$ref/$id";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees[0];
}
// Nomanclature
public function getNomenclature($ref, $id) {
$url = $this->url_jrest.self::SERVICE."/Nomenclature/$ref/$id";
$json = $this->envoyerRequeteConsultation($url);
$resultats = json_decode($json, true);
return $resultats[0];
}
public function getParentsHybride($ref, $id) {
$url = $this->url_jrest.self::SERVICE."/ParentsHybride/$ref/$id";
$json = $this->envoyerRequeteConsultation($url);
$parents = json_decode($json, true);
return $parents[0];
}
//Synonymie
public function getTaxonAffichage($ref, $id) {
$url = $this->url_jrest.self::SERVICE."/TaxonAffichage/$ref/$id";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees[0];
}
public function getHomonyme($ref, $nom) {
$url = $this->url_jrest.self::SERVICE."/Homonyme/$ref/$nom";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
public function getNomsBasionymeCommun($ref, $basionyme) {
$url = $this->url_jrest.self::SERVICE."/Basionyme/$ref/$basionyme";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
//Classification
public function getClassification($type, $ref, $id) {
$url = $this->url_jrest.self::SERVICE."/Taxon$type/$ref/$id";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
 
}
?>
/branches/v2.0-betulales/bibliotheque/dao/TraitementDao.php
New file
0,0 → 1,193
<?php
// declare(encoding='UTF-8');
/**
* DAO des traitements à réaliser sur les 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 $Id$
*
*/
class TraitementDao extends Dao {
const SERVICE = 'Traitement';
private $url = null;
public function __construct() {
parent::__construct();
$this->url = $this->url_jrest.self::SERVICE;
}
/**
* Retourne les infos d'un traitement enregistré dans la bdd pour un id donné.
*
* @param integer l'id du traitement.
* @return array le tableau d'infos ou false en cas d'échec.
*/
public function getInfos($id_traitement) {
$url = $this->url."/Info/$id_traitement";
$json = $this->envoyerRequeteConsultation($url);
$infos = json_decode($json, true);
return $infos;
}
/**
* Retourne l'ensemble des traitements en attente.
*
* @param string le code du projet de référentiel.
* @param string le nom du script à lancer en minuscule.
* @return mixed un tableau contenant les informations sur les traitements en attente ou false en cas d'échec.
*/
public function getTraitementsEnAttente($code_projet, $script) {
$url = $this->url."/EnAttente/$code_projet/$script";
$json = $this->envoyerRequeteConsultation($url);
$traitements = json_decode($json, true);
return $traitements;
}
/**
* Retourne l'ensemble des traitements en cours.
*
* @param string le code du projet de référentiel.
* @param string le nom du script à lancer en minuscule.
* @return mixed un tableau contenant les informations sur les traitements en cours ou false en cas d'échec.
*/
public function getTraitementsEnCours($code_projet, $script) {
$url = $this->url."/EnCours/$code_projet/$script";
$json = $this->envoyerRequeteConsultation($url);
$traitements = json_decode($json, true);
return $traitements;
}
/**
* Retourne les ids de l'ensemble des traitements obsolètes.
*
* @param string le code du projet de référentiel.
* @param string le nom du script à lancer en minuscule.
* @return mixed un tableau contenant les ids des traitements obsolètes ou false en cas d'échec.
*/
public function getTraitementsObsoletes($code_projet, $script) {
$url = $this->url."/Obsolete/$code_projet/$script";
$json = $this->envoyerRequeteConsultation($url);
$traitements = json_decode($json, true);
return $traitements;
}
/**
* Retourne le dernier traitement demandé et non traité pour un projet donné.
*
* @param string le code du projet de référentiel.
* @param string le nom du script à lancer en minuscule.
* @return mixed un tableau contenant les informations sur le dernier traitement demandé et non traité ou false en cas d'échec.
*/
public function getDernierTraitement($code_projet, $script) {
$url = $this->url."/DerniereDemande/$code_projet/$script";
$json = $this->envoyerRequeteConsultation($url);
$traitements = json_decode($json, true);
return $traitements;
}
/**
* Retourne l'ensemble des traitements terminés.
*
* @param string le code du projet de référentiel.
* @param string le nom du script à lancer en minuscule.
* @return mixed un tableau contenant les informations sur les traitements terminés ou false en cas d'échec.
*/
public function getTraitementsTermines($code_projet, $script) {
$url = $this->url."/Termines/$code_projet/$script";
$json = $this->envoyerRequeteConsultation($url);
$traitements = json_decode($json, true);
return $traitements;
}
/**
* Ajoute une demande de traitement pour une référentiel donné.
*
* @param string le code du référentiel.
* @param string le nom du script à lancer en minuscule.
* @return mixed l'id du traitement ou false en cas d'échec.
*/
public function ajouterTraitement($code_projet, $script) {
return $this->ajouterTraitementParametre($code_projet, null, $script);
}
/**
* Ajoute une demande de traitement pour une référentiel donné
* en passant des paramêtres au script.
*
* @param string le code du référentiel.
* @param string les données serialisées.
* @param string le nom du script à lancer en minuscule.
* @return mixed l'id du traitement ou false en cas d'échec.
*/
public function ajouterTraitementParametre($code_projet, $parametres, $script) {
// Préparation des données à passer par POST
$donnees['referentiel_code'] = $code_projet;
$donnees['script'] = $script;
$donnees['script_parametres'] = (isset($parametres)) ? $parametres : null;
// Envoie des données et récupération du retour
$json = $this->envoyerRequeteAjout($this->url, $donnees);
$id = json_decode($json, true);
return $id;
}
/**
* Modifie un traitement pour indiquer qu'il est débuté.
*
* @param integer l'id du traitement
* @return boolean true en cas de succés sinon false.
*/
public function debuterTraitement($id_traitement) {
$url = $this->url."/$id_traitement";
$donnees['action'] = 'Debuter';
// Envoie des données et récupération du retour
$json = $this->envoyerRequeteModif($url, $donnees);
$ok = json_decode($json, true);
return $ok;
}
/**
* Modifie un traitement pour indiquer qu'il est terminé.
*
* @param integer l'id du traitement
* @return boolean true en cas de succés sinon false.
*/
public function terminerTraitement($id_traitement) {
$url = $this->url."/$id_traitement";
$donnees['action'] = 'Terminer';
// Envoie des données et récupération du retour
$json = $this->envoyerRequeteModif($url, $donnees);
$ok = json_decode($json, true);
return $ok;
}
/**
* Supprime des traitments en fonction de leur id.
*
* @param array le tableau des id des traitements à supprimer
* @return boolean true en cas de succès ou false en cas d'échec.
*/
public function supprimer(Array $ids) {
// Préparation de l'url
$url = $this->url.'/'.implode(',', $ids);
// Envoie des données et récupération du retour
$json = $this->envoyerRequeteSuppression($url);
$ok = json_decode($json, true);
return $ok;
}
}
?>
/branches/v2.0-betulales/bibliotheque/dao/Dao.php
New file
0,0 → 1,217
<?php
// declare(encoding='UTF-8');
/**
* Classe modèle spécifique à l'application, donc d'accés au données, elle ne devrait pas être appelée de l'extérieur.
* Elle est abstraite donc doit obligatoirement être étendue.
*
* @category Php5
* @package Referentiel
* @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$
*/
abstract class Dao {
const ORDRE_ASCENDANT = 'ASC';
const ORDRE_DESCENDANT = 'DESC';
const HTTP_REQUETE_SEPARATEUR = '&';
protected $distinction = '0';
protected $limite_debut = null;
protected $limite_nbre = null;
protected $ordre = null;
protected $url_jrest = null;
public function __construct() {
$this->url_jrest = Config::get('url_jrest');
}
//+----------------------------------------------------------------------------------------------------------------+
// ACCESSEURS
public function setDistinction($distinct) {
$this->distinction = $distinct;
}
public function getDistinction() {
return $this->distinction;
}
public function viderDistinction() {
$this->distinction = null;
}
public function avoirLimitation() {
$limitation = false;
if (!is_null($this->limite_debut) && !is_null($this->limite_nbre)) {
$limitation = true;
}
return $limitation;
}
public function setLimitation($limite_debut, $limite_nbre) {
$this->limite_debut = $limite_debut;
$this->limite_nbre = $limite_nbre;
}
public function getLimiteDebut() {
return $this->limite_debut;
}
public function getLimiteNbre() {
return $this->limite_nbre;
}
public function viderLimite() {
$this->limite_debut = null;
$this->limite_nbre = null;
}
public function addOrdre($champ, $trie = self::ORDRE_ASCENDANT) {
if (!isset($this->ordre[$champ])) {
if (self::ORDRE_ASCENDANT == $trie || self::ORDRE_DESCENDANT == $trie) {
$this->ordre[$champ] = $trie;
} else {
$e = "La valeur pour le trie doit être : {self::ORDRE_ASCENDANT} ou {self::ORDRE_DESCENDANT}.";
trigger_error($e, E_USER_WARNING);
}
} else {
$e = "Le champ $champ existe déjà dans le tableau des ordres.";
trigger_error($e, E_USER_WARNING);
}
}
public function getOrdre() {
$champs = array();
foreach ($this->ordre as $champ => $trie) {
$champs[] = "$champ $trie";
}
return implode(', ', $champs);
}
public function viderOrdre() {
$this->ordre = null;
}
//+----------------------------------------------------------------------------------------------------------------+
// MÉTHODES
protected function envoyerRequeteConsultation($url) {
$url = $this->traiterUrlParametres($url);
$retour = $this->envoyerRequete($url, 'GET');
return $retour;
}
protected function envoyerRequeteAjout($url, Array $donnees) {
$retour = $this->envoyerRequete($url, 'PUT', $donnees);
return $retour;
}
protected function envoyerRequeteModif($url, Array $donnees) {
$retour = $this->envoyerRequete($url, 'POST', $donnees);
return $retour;
}
protected function envoyerRequeteSuppression($url) {
$retour = $this->envoyerRequete($url, 'DELETE');
return $retour;
}
private function envoyerRequete($url, $mode, Array $donnees = array()) {
$contenu = false;
if ($mode != 'GET' && $mode != 'PUT' && $mode != 'POST' && $mode != 'DELETE') {
$e = "Le mode de requête '$mode' n'est pas accepté!";
trigger_error($e, E_USER_WARNING);
} else {
$contexte = stream_context_create(array(
'http' => array(
'method' => $mode,
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'content' => http_build_query($donnees, null, self::HTTP_REQUETE_SEPARATEUR))));
$flux = @fopen($url, 'r', false, $contexte);
if (!$flux) {
$this->traiterEntete($http_response_header, $url);
$e = "L'ouverture de l'url '$url' par la méthode HTTP '$mode' a échoué!";
trigger_error($e, E_USER_WARNING);
} else {
// Informations sur les en-têtes et métadonnées du flux
$entetes = stream_get_meta_data($flux);
$this->traiterEntete($entetes, $url);
// Contenu actuel de $url
$contenu = stream_get_contents($flux);
fclose($flux);
}
}
$this->reinitialiser();
return $contenu;
}
private function traiterUrlParametres($url) {
$parametres = array();
if (! is_null($this->getLimiteDebut())) {
$parametres[] = 'start='.$this->getLimiteDebut();
}
if (! is_null($this->getLimiteNbre())) {
$parametres[] = 'limit='.$this->getLimiteNbre();
}
if (! is_null($this->ordre)) {
$parametres[] = 'orderby='.urlencode($this->getOrdre());
}
if ($this->getDistinction() != 0) {
$parametres[] = 'distinct='.$this->getDistinction();
}
if (count($parametres) > 0) {
$url_parametres = implode('&', $parametres);
$url = $url.'?'.$url_parametres;
}
return $url;
}
private function traiterEntete($entetes, $uri) {
$infos = $this->analyserEntete($entetes, $uri);
$this->traiterEnteteDebug($infos);
$this->traiterEnteteMessage($infos);
}
private function analyserEntete($entetes, $uri) {
$infos = array('date' => null, 'uri' => $uri, 'debugs' => null, 'messages' => null);
if (isset($entetes['wrapper_data'])) {
$entetes = $entetes['wrapper_data'];
}
foreach ($entetes as $entete) {
if (preg_match('/^X-DebugJrest-Data: (.+)$/', $entete, $match)) {
$infos['debugs'] = json_decode($match[1]);
}
if (preg_match('/^X-MessageJrest-Data: (.+)$/', $entete, $match)) {
$infos['messages'] = json_decode($match[1]);
}
if (preg_match('/^Date: .+ ([012][0-9]:[012345][0-9]:[012345][0-9]) .*$/', $entete, $match)) {
$infos['date'] = $match[1];
}
}
return $infos;
}
private function traiterEnteteDebug($entetes) {
if (isset($entetes['debugs'])) {
$date = $entetes['date'];
$uri = $entetes['uri'];
$debugs = $entetes['debugs'];
foreach ($debugs as $debug) {
Debug::printr("DEBUG : $date - $uri :\n$debug");
}
}
}
private function traiterEnteteMessage($entetes) {
if (isset($entetes['messages'])) {
$date = $entetes['date'];
$uri = $entetes['uri'];
$messages = $entetes['messages'];
foreach ($messages as $message) {
Debug::printr("MESSAGE : $date - $uri :\n$message");
}
}
}
private function reinitialiser() {
$this->viderDistinction();
$this->viderLimite();
$this->viderOrdre();
}
}
/branches/v2.0-betulales/bibliotheque/dao/ResultatDao.php
New file
0,0 → 1,88
<?php
// declare(encoding='UTF-8');
/**
* DAO des résultats des traitements.
*
* @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 $Id$
*
*/
class ResultatDao extends Dao {
const SERVICE = 'Resultat';
private $url = null;
public function __construct() {
parent::__construct();
$this->url = $this->url_jrest.self::SERVICE;
}
/**
* Retourne les infos d'un résultat enregistré dans la bdd pour un traitement donné.
*
* @param integer l'id du résultat.
* @return array le tableau d'infos ou false en cas d'échec.
*/
public function getInfos($id_resultat) {
$url = $this->url."/Info/$id_resultat";
$json = $this->envoyerRequeteConsultation($url);
$infos = json_decode($json, true);
return $infos;
}
/**
* Retourne des infos partielles des résultats (id, nom, resultat) d'un traitement donné.
*
* @param integer l'id du traitement.
* @return mixed le tableau de tableau d'infos ou false en cas d'échec.
*/
public function getResultatsTraitement($id_traitement) {
$url = $this->url."/Traitement/$id_traitement";
$json = $this->envoyerRequeteConsultation($url);
$infos = json_decode($json, true);
return $infos;
}
/**
* Retourne le nombre de résultat enregistré dans la bdd pour un traitement donné.
*
* @param integer l'id du traitement.
* @return mixed le nombre de résultat ou false en cas d'échec.
*/
public function getNombre($id_traitement) {
$url = $this->url."/Nombre/$id_traitement";
$json = $this->envoyerRequeteConsultation($url);
$traitements = json_decode($json, true);
return $traitements;
}
/**
* Ajoute un résultat de traitement pour une référentiel donné.
*
* @param integer l'id du traitement en cours.
* @param array un tableau contenant les clés 'nom', 'message', 'description' et 'resultat'.
*
* @return mixed l'id du résultat ou false en cas d'échec.
*/
public function ajouter($id_traitement, Array $resultat) {
// Préparation des données à passer par POST
$donnees = $resultat;
$donnees['id_traitement'] = $id_traitement;
// Envoie des données et récupération du retour
$json = $this->envoyerRequeteAjout($this->url, $donnees);
$id = json_decode($json, true);
return $id;
}
}
?>
/branches/v2.0-betulales/bibliotheque/dao/ReferentielDao.php
New file
0,0 → 1,169
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données des Référentiels.
* Permet d'accèder au 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 ReferentielDao extends Dao {
const SERVICE = 'Referentiel';
const SERVICE_ARCHIVAGE = 'ArchiverReferentiel';
 
/**
* Retourne des infos sur l'ensemble des référentiels disponibles.
*
* @return array un tableau contenant les informations sur les référentiels disponibles.
*/
public function getReferentielsDispo() {
$url = $this->url_jrest.self::SERVICE."/Dispo";
$json = $this->envoyerRequeteConsultation($url);
$noms = json_decode($json, true);
return $noms;
}
/**
* Retourne l'ensemble des information sur les noms d'un référentiel.
*
* @param string le code du référentiel.
* @return array un tableau contenant les informations sur les noms du référentiel.
*/
public function getTout($code_projet) {
$url = $this->url_jrest.self::SERVICE."/Tout/$code_projet";
$nbre = $this->getNombre($code_projet);
$noms = array();
$pas = 5000;
for ($i = 0; $i < $nbre ; $i += $pas) {
$this->setLimitation($i, $pas);
$json = $this->envoyerRequeteConsultation($url);
$noms_partiel = json_decode($json, true);
Tableau::etendre($noms, $noms_partiel);
}
return $noms;
}
/**
* Retourne le nombre de noms présents dans la table de travail du référentiel.
*
* @param string le code du référentiel.
* @return int le nombre de noms.
*/
public function getNombre($code_projet) {
$url = $this->url_jrest.self::SERVICE."/Nombre/$code_projet";
$json = $this->envoyerRequeteConsultation($url);
$nbre = json_decode($json, true);
return $nbre;
}
/**
* Retourne le titre du projet dans la table des meta-données du référentiel.
*
* @param string le code du référentiel.
* @return int le nombre de noms.
*/
public function getNom($code_projet) {
$url = $this->url_jrest.self::SERVICE."/Nom/$code_projet";
$json = $this->envoyerRequeteConsultation($url);
$nbre = json_decode($json, true);
return $nbre;
}
/**
* Retourne la date de mise à jour dans la table des meta-données du référentiel.
*
* @param string le code du référentiel.
* @return int le nombre de noms.
*/
public function getDateMiseAJour($code_projet) {
$url = $this->url_jrest.self::SERVICE."/DateMiseAJour/$code_projet";
$json = $this->envoyerRequeteConsultation($url);
$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;
}
/**
* Créer un fichier csv d'export d'une version d'un ref en sélectionnant les champs et filtrant en fonction de paramètres
* @return l'url de stockage
*/
public function exporter($parametres) {
$this->ordre['nom_sci'] = 'ASC';
$url = $this->construireUrlExport($parametres);
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
private function construireUrlExport($parametres) {
$url = $this->url_jrest.self::SERVICE.'/Export';
$params_a_passer = array('ref', 'version', 'champs', 'filtres');
foreach ($params_a_passer as $param_cle) {
if (isset($parametres[$param_cle]) && $parametres[$param_cle] != '') {
$valeur = urlencode(trim($parametres[$param_cle]));
$url .= '/'.$valeur;
} else {
$url .= '/*';
}
}
return $url;
}
/**
* Modifie un référentiel pour ajouter une colonne famille
* @param integer l'id du traitement
* @return boolean true en cas de succés sinon false.
*/
public function preparerTablePrChpFamille($referentiel) {
$url = $this->url_jrest.self::SERVICE.'/TablePrChpFamille/'.$referentiel;
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
/*$donnees['referentiel'] = $referentiel;
$donnees['action'] = 'TablePrChpFamille';
// Envoie des données et récupération du retour
$json = $this->envoyerRequeteModif($url, $donnees);
$ok = json_decode($json, true);
return $ok;*/
}
public function remplirChpFamille($referentiel, $noms) {
$url = $this->url_jrest.self::SERVICE.'/ChpFamille/';
$donnees['referentiel'] = $referentiel;
$donnees['noms'] = $noms;
// Envoie des données et récupération du retour
$json = $this->envoyerRequeteModif($url, $donnees);
$ok = json_decode($json, true);
return $ok;
}
}
?>
/branches/v2.0-betulales/bibliotheque/dao/MetaDao.php
New file
0,0 → 1,56
<?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_jrest.self::SERVICE."/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) {
$url = $this->url_jrest.self::SERVICE;
$json = $this->envoyerRequeteAjout($url, $metadonnees);
$id = json_decode($json, true);
return $id;
}
/**
* Créer un fichier csv d'export d'une version de métadonnées
*/
public function exporter($parametres) {
$url = $this->url_jrest.self::SERVICE.'/Export/'.$parametres["ref"]."/".$parametres["version"];
$json = $this->envoyerRequeteConsultation($url);
$fichier = json_decode($json, true);
return $fichier;
}
}
/branches/v2.0-betulales/bibliotheque/utilitaires/Fichier.php
New file
0,0 → 1,27
<?php
class Fichier {
/**
* Supprime récursivement le contenu d'un dossier.
*
* @param string $dossier le chemin vers le dossier à supprimer.
* @return void
*/
public static function supprimerDossier($dossier) {
if (is_dir($dossier)) {
$objets = scandir($dossier);
foreach ($objets as $objet) {
if ($objet != '.' && $objet != '..') {
$chemin = $dossier.'/'.$objet;
if (filetype($chemin) == 'dir') {
$this->supprimerDossier($chemin);
} else {
unlink($chemin);
}
}
}
reset($objets);
rmdir($dossier);
}
}
}
?>
/branches/v2.0-betulales/bibliotheque/utilitaires/Pattern.php
New file
0,0 → 1,7
<?php
class Pattern {
const PRENOM = "[\p{L}-]+";// Pattern prénom
const NOM = "[\p{Lu}]+";// Pattern nom
const COURRIEL = "[a-z0-9!#$%&'*+=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?";// Pattern courriel
}
?>
/branches/v2.0-betulales/bibliotheque/utilitaires/Tableau.php
New file
0,0 → 1,30
<?php
class Tableau {
/**
* Etend le tableau à étendre avec les données du tableau à copier. Si des clés sont identiques entre les deux tableaux
* une erreur est déclenchée et la valeur du tableau à étendre est gardée. Si les deux tableaux ont des clés numériques
* leurs valeurs sont gardées (à la différence de array_merge).
* Les tableaux sont passés par références et le tableau à copier est progressivement détruit pour éviter la consomation
* de mémoire.
*
* @param array $tableau_a_etendre
* @param array $tableau_a_copier
* @return void
*/
public static function etendre(Array &$tableau_a_etendre, Array &$tableau_a_copier) {
$cles_existantes = null;
foreach ($tableau_a_copier as $cle => $val) {
if (!isset($tableau_a_etendre[$cle])) {
$tableau_a_etendre[$cle] = $val;
unset($tableau_a_copier[$cle]);
} else {
$cles_existantes[] = $cle;
}
}
if (is_array($cles_existantes)) {
$e = "Le tableau a étendre contenait déjà les clés suivantes : ".implode(', ', $cles_existantes);
trigger_error($e, E_USER_WARNING);
}
}
}
?>