Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 214 → Rev 215

/trunk/services/modules/0.2/commun/NomsListeGenerique.php
File deleted
\ No newline at end of file
/trunk/services/modules/0.2/commun/TaxonsListeGenerique.php
File deleted
\ No newline at end of file
/trunk/services/modules/0.2/commun/NomDetailsGenerique.php
File deleted
\ No newline at end of file
/trunk/services/modules/0.2/bdtfx/NomsListeBdtfx.php
New file
0,0 → 1,18
<?php
class NomsListeBdtfx implements NomsListe {
 
private $nomsListe = null;
 
public function __construct(NomsListeGenerique $nomsListe) {
$this->nomsListe = $nomsListe;
}
 
public function consulter() {
return $this->nomsListe->consulter();
}
 
public function ajouter() {
 
}
}
?>
/trunk/services/modules/0.2/bdtfx/NomDetailsBdtfx.php
New file
0,0 → 1,18
<?php
class NomDetailsBdtfx implements NomDetails {
 
private $nomDetails = null;
 
public function __construct(NomDetailsGenerique $nomDetails) {
$this->nomDetails = $nomDetails;
}
 
public function consulter() {
return $this->nomDetails->consulter();
}
 
public function ajouter() {
 
}
}
?>
/trunk/services/modules/0.2/fournier/NomsListeFournier.php
New file
0,0 → 1,18
<?php
class NomsListeFournier implements NomsListe {
 
private $nomsListe = null;
 
public function __construct(NomsListeGenerique $nomsListe) {
$this->nomsListe = $nomsListe;
}
 
public function consulter() {
return $this->nomsListe->consulter();
}
 
public function ajouter() {
 
}
}
?>
/trunk/services/modules/0.2/fournier/NomDetailsFournier.php
New file
0,0 → 1,18
<?php
class NomDetailsFournier implements NomDetails {
 
private $nomDetails = null;
 
public function __construct(NomDetailsGenerique $nomDetails) {
$this->nomDetails = $nomDetails;
}
 
public function consulter() {
return $this->nomDetails->consulter();
}
 
public function ajouter() {
 
}
}
?>
/trunk/services/modules/0.2/Projets.php
27,7 → 27,9
$reponseHttp = new ReponseHttp();
try {
$this->initialiserConteneur($ressources, $parametres);
$resultat = $this->executerProjetService();
$projet = $this->conteneur->getProjet();
$projet->verifier();
$resultat = $projet->consulter();
$reponseHttp->setResultatService($resultat);
} catch (Exception $e) {
$reponseHttp->ajouterErreur($e);
43,14 → 45,5
$this->conteneur->setParametre('parametres', $parametres);
$this->conteneur->setParametre('cheminBase', dirname(__FILE__).DS);
}
 
private function executerProjetService() {
$projet = $this->conteneur->getProjet();
$projet->verifier();
$classe = $projet->getServiceClasseNom();
$service = $this->conteneur->getService($classe);
$retour = $service->consulter();
return $retour;
}
}
?>
/trunk/services/bibliotheque/Versions.php
1,15 → 1,17
<?php
class Versions {
private $parametres = null;
private $ressources = null;
private $bdd = null;
private $projetNom = null;
private $versionsDispo = array();
private $versionCourrante = array();
 
public function __construct(Parametres $parametres, Bdd $bdd,$projetNom) {
public function __construct(Parametres $parametres, Ressources $ressources, Bdd $bdd) {
$this->parametres = $parametres;
$this->ressources = $ressources;
$this->bdd = $bdd;
$this->projetNom = $projetNom;
$this->projetNom = $this->ressources->getProjetNom();
$this->versionsDispo = $this->chargerVersionsDisponibles();
}
 
/trunk/services/bibliotheque/ParametresVerificateur.php
3,6 → 3,24
private $parametres = null;
private $parametresApi = array();
private $erreursParametres = array();
private $typesVerif = array(
'recherche' => 'Simple',
'ns.format' => 'Simple',
'retour' => 'Simple',
'retour.format' => 'Simple',
'retour.langue' => 'RegExp',
'ns.structure' => 'Multiple',
'version.projet' => 'RegExp'
);
private $valeursPermises = array(
'recherche' => 'stricte|floue|etendue',
'ns.format' => 'htm|txt',
'retour' => 'application/json|image/jpeg',
'retour.format' => 'min|max|oss|perso',
'retour.langue' => '/^(?:[*]|orig|[a-z]{2})$/',
'ns.structure' => '|an|au|bib|ad',
'version.projet' => '/^(?:[0-9]+[.][0-9]+|[*+])$/'
);
 
public function __construct(Parametres $parametres, Array $parametresApi) {
$this->parametres = $parametres;
14,7 → 32,8
$this->verifierValeurs();
}
 
private function verifierConformiteApi() {
public function verifierConformiteApi() {
$this->parametres->rewind();
while (is_null($parametre = $this->parametres->key()) === false) {
if (in_array($parametre, $this->parametresApi) === false) {
$message = "Le paramètre '$parametre' n'est pas pris en compte par cette version de l'API.";
25,24 → 44,23
}
}
 
private function verifierValeurs() {
$this->verifierValeurSimple('recherche', 'stricte|floue|etendue');
$this->verifierValeurSimple('ns.format', 'htm|txt');
$this->verifierValeurSimple('retour', 'application/json|image/jpeg');
$this->verifierValeurSimple('retour.format', 'min|max|oss|perso');
$this->verifierValeurRegExp('retour.langue', '/^(?:[*]|orig|[a-z]{2})$/');
$this->verifierValeurMultipe('ns.structure', '|an|au|bib|ad');
$this->verifierVersionProjet();
public function verifierValeurs() {
foreach ($this->typesVerif as $parametre => $type) {
$methode = "verifierValeur$type";
$this->$methode($parametre);
}
 
if (count($this->erreursParametres) > 0) {
$message = 'Erreur dans le paramètrage de votre URL : <br />'.implode('<br/>', $this->erreursParametres);
array_unshift($this->erreursParametres, 'Erreur dans le paramètrage de votre URL :');
$message = implode('<br/>', $this->erreursParametres);
$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
throw new Exception($message, $code);
}
}
 
private function verifierValeurSimple($parametre, $valeursPermises) {
private function verifierValeurSimple($parametre) {
$valeur = $this->parametres->get($parametre);
$valeursPermises = $this->valeursPermises[$parametre];
$permissionOk = $this->verifierValeursPermises($valeur, $valeursPermises);
if ($permissionOk == false) {
$this->erreursParametres[] = "Le paramètre '$parametre' ne peut pas prendre la valeur '$valeur'. Valeurs permises : $valeursPermises";
57,8 → 75,9
return $permise;
}
 
private function verifierValeurRegExp($parametre, $regexp) {
private function verifierValeurRegExp($parametre) {
$valeur = $this->parametres->get($parametre);
$regexp = $this->valeursPermises[$parametre];
$permissionOk = preg_match($regexp, $valeur) ? true : false;
if ($permissionOk == false) {
$this->erreursParametres[] = "Le paramètre '$parametre' ne peut pas prendre la valeur '$valeur'. Valeurs permises : $regexp";
65,8 → 84,9
}
}
 
private function verifierValeurMultipe($parametre, $valeursPermises) {
private function verifierValeurMultiple($parametre) {
$valeursConcatenees = $this->parametres->get($parametre);
$valeursPermises = $this->valeursPermises[$parametre];
$valeurs = explode(',', $valeursConcatenees);
foreach ($valeurs as $valeur) {
$permissionOk = $this->verifierValeursPermises($valeur, $valeursPermises);
75,12 → 95,5
}
}
}
 
private function verifierVersionProjet() {
$valeur = $this->parametres->get('version.projet');
if (preg_match('/^(?:[0-9]+[.][0-9]+|[*+])$/', $valeur) == 0) {
$this->erreursParametres[] = "Le paramètre 'version.projet' ne peut pas prendre la valeur '$valeur'. Valeurs permises : +,* ou [0-9]+.[0-9]+";
}
}
}
?>
/trunk/services/bibliotheque/Ressources.php
57,5 → 57,50
$etreRelationsType = in_array($aTester, $typesRelations) ? true : false;
return $etreRelationsType;
}
 
public function getServiceClasse() {
$classeNom = '';
if ($this->getNombre() == 2) {
if ($this->getServiceNom() == 'noms') {
$classeNom = 'NomsListe';
} else if ($this->getServiceNom() == 'taxons') {
$classeNom = 'TaxonsListe';
}
 
} else if ($this->getNombre() == 3) {
$position3 = $this->getParPosition(2);
if ($this->etreId($position3)) {
if ($this->getServiceNom() == 'noms') {
$classeNom = 'NomDetails';
} else if ($this->getServiceNom() == 'taxons') {
$classeNom = 'TaxonDetails';
}
}
} else if ($this->getNombre() == 4) {
$position3 = $this->getParPosition(2);
$position4 = $this->getParPosition(3);
if ($this->etreStats($position3)) {
if ($this->etreTypeDeStats($position4)) {
$classeNom = 'NomsStats'.ucfirst($position4);
}
} else if ($this->etreId($position3)) {
if ($this->etreRelations($position4)) {
$classeNom = 'NomRelations';
}
}
} else if ($this->getNombre() == 5) {
$position3 = $this->getParPosition(2);
$position4 = $this->getParPosition(3);
$position5 = $this->getParPosition(4);
if ($this->etreId($position3)) {
if ($this->etreRelations($position4)) {
if ($this->etreTypeDeRelations($position5)) {
$classeNom = 'NomRelations'.ucfirst($position5);
}
}
}
}
return $classeNom;
}
}
?>
/trunk/services/bibliotheque/interfaces/NomsListe.php
1,6 → 1,6
<?php
interface NomsListe {
public function __construct(Ressources $ressources, Parametres $parametres, NomDAO $nomDao, NomFormateur $nomFormateur);
public function __construct(NomsListeGenerique $nomsListe);
public function consulter();
}
?>
/trunk/services/bibliotheque/interfaces/NomDetails.php
1,6 → 1,6
<?php
interface NomDetails {
public function __construct(Ressources $ressources, Parametres $parametres, NomDAO $nomDao, NomFormateur $nomFormateur);
public function __construct(NomDetailsGenerique $nomDetails);
public function consulter();
}
?>
/trunk/services/bibliotheque/generique/NomsListeGenerique.php
New file
0,0 → 1,188
<?php
class NomsListeGenerique {
 
private $parametres = null;
private $ressources = null;
private $nomDao = null;
private $nomFormateur = null;
 
private $listeUrl = null;
private $nbreTotalNoms = 0;
private $noms = array();
 
public function __construct(Ressources $ressources, Parametres $parametres, NomDAO $nomDao, NomFormateur $nomFormateur) {
$this->ressources = $ressources;
$this->parametres = $parametres;
$this->nomDao = $nomDao;
$this->nomFormateur = $nomFormateur;
}
 
public function setListeUrl($url) {
$this->listeUrl = $url;
}
 
public function consulter() {
$this->noms = $this->rechercher();
$this->nbreNomsTotal = $this->nomDao->recupererNombreNomsTotal();
$this->trierNoms();
$retour = $this->construireTableauRetour();
return $retour;
}
 
 
private function rechercher() {
$resultats = array();
$recherche = $this->parametres->get('recherche');
 
if ($recherche == 'stricte') {
$resultats = $this->nomDao->rechercherStricte();
} else if ($recherche == 'etendue') {
$resultats = $this->nomDao->rechercherEtendue();
} else if ($recherche == 'floue') {
$resultats = $this->nomDao->rechercherFloue();
}
 
return $resultats;
}
 
private function trierNoms() {
$recherche = $this->parametres->get('recherche');
if ($recherche == 'floue') {
$this->trierRechercheFloue();
}
}
 
public function trierRechercheFloue() {
$nomDemande = $this->parametres->get('masque');
$nomDemandeSimple = strtolower(Chaine::supprimerAccents($nomDemande));
 
foreach ($this->noms as $id => $nom) {
$nomFlouSimple = strtolower(Chaine::supprimerAccents($nom['nom_sci']));
// Prime pour la ressemblance globale :
$score = 500 - levenshtein($nomFlouSimple, $nomDemandeSimple);
// On affine
$score += similar_text($nomDemandeSimple, $nomFlouSimple) * 3;
$this->noms[$id]['score'] = $score;
}
$noms = $this->noms;
$this->noms = Tableau::trierMD($noms, array('score' => false));
//print_r($this->noms);
}
 
private function construireTableauRetour() {
$retour = array('entete' => array(), 'resultats' => array());
$retour['resultats'] = $this->construireResultats();
$retour['entete'] = $this->construireEntete();
return $retour;
}
 
private function construireResultats() {
$nomsFormates = array();
foreach ($this->noms as $nom) {
$id = $nom['num_nom'];
$nomsFormates[$id] = $this->formaterNom($nom);
}
return $nomsFormates;
}
 
private function formaterNom($infos) {
$nomAFormater = new NomDO($infos);
$this->nomFormateur->setNomAFormater($nomAFormater);
$this->nomFormateur->setChampsRetour($this->parametres->getListe('retour.champs'));
$nom = $this->nomFormateur->formaterListe();
return $nom;
}
 
private function construireEntete() {
$entete = array('masque' => '', 'depart' => 0, 'limite' => 100, 'total' => 0);
$entete['masque'] = $this->formaterEnteteMasque();
$entete['depart'] = (int) $this->parametres->get('navigation.depart');
$entete['limite'] = (int) $this->parametres->get('navigation.limite');
$entete['total'] = $this->nbreNomsTotal;
if ($hrefPrecedent = $this->formaterEnteteHrefPrecedent()) {
$entete['href.precedent'] = $hrefPrecedent;
}
if ($hrefSuivant = $this->formaterEnteteHrefSuivant()) {
$entete['href.suivant'] = $hrefSuivant;
}
return $entete;
}
 
private function formaterEnteteMasque() {
$masqueComplet = array();
if ($this->parametres->exister('masque')) {
$masque = '';
$masque .= 'nom_sci='.$this->parametres->get('masque');
if ($this->parametres->get('recherche') == 'etendue') {
$masque .= '%';
}
$masqueComplet[] = $masque;
}
if ($this->parametres->exister('masque.sg')) {
$masque = '';
$masque .= 'nom_supra_generique='.$this->parametres->get('masque.sg');
if ($this->parametres->get('recherche') == 'etendue') {
$masque .= '%';
}
$masqueComplet[] = $masque;
}
if ($this->parametres->exister('masque.gen')) {
$masque = '';
$masque .= 'genre='.$this->parametres->get('masque.gen');
if ($this->parametres->get('recherche') == 'etendue') {
$masque .= '%';
}
$masqueComplet[] = $masque;
}
if ($this->parametres->exister('masque.sp')) {
$masque = '';
$masque .= 'epithete_sp='.$this->parametres->get('masque.sp');
if ($this->parametres->get('recherche') == 'etendue') {
$masque .= '%';
}
$masqueComplet[] = $masque;
}
return implode('&', $masqueComplet);
}
 
private function formaterEnteteHrefPrecedent() {
$limite = $this->parametres->get('navigation.limite');
$departActuel = $this->parametres->get('navigation.depart');
$departPrecedent = $departActuel - $limite;
$href = null;
if ($departPrecedent >= 0) {
$squelette = $this->construireTplHrefNavigation();
$href = sprintf($squelette, $departPrecedent, $limite);
}
return $href;
}
 
private function formaterEnteteHrefSuivant() {
$limite = $this->parametres->get('navigation.limite');
$departActuel = $this->parametres->get('navigation.depart');
$departSuivant = $departActuel + $limite;
$href = null;
if ($departSuivant < $this->nbreNomsTotal) {
$squelette = $this->construireTplHrefNavigation();
$href = sprintf($squelette, $departSuivant, $limite);
}
return $href;
}
 
private function construireTplHrefNavigation() {
$requetes = array();
$this->parametres->rewind();
while (is_null($parametre = $this->parametres->key()) === false) {
if (strpos($parametre, 'navigation') === false) {
$valeur = $this->parametres->current();
$requetes[] = "$parametre=$valeur";
}
$this->parametres->next();
}
$requetes[] = "navigation.depart=%s";
$requetes[] = "navigation.limite=%s";
$tpl = $this->listeUrl.'?'.implode('&', $requetes);
return $tpl;
}
}
?>
/trunk/services/bibliotheque/generique/TaxonsListeGenerique.php
New file
0,0 → 1,187
<?php
class TaxonsListeGenerique {
 
private $parametres = null;
private $ressources = null;
private $nomDao = null;
private $nomFormateur = null;
 
private $listeUrl = null;
private $nbreTotalNoms = 0;
private $noms = array();
 
public function __construct(Ressources $ressources, Parametres $parametres, NomDAO $nomDao, NomFormateur $nomFormateur) {
$this->ressources = $ressources;
$this->parametres = $parametres;
$this->nomDao = $nomDao;
$this->nomFormateur = $nomFormateur;
}
 
public function setListeUrl($url) {
$this->listeUrl = $url;
}
 
public function consulter() {
$this->noms = $this->rechercher();
$this->nbreNomsTotal = $this->nomDao->recupererNombreNomsTotal();
$this->trierNoms();
$retour = $this->construireTableauRetour();
return $retour;
}
 
private function rechercher() {
$resultats = array();
$recherche = $this->parametres->get('recherche');
 
if ($recherche == 'stricte') {
$resultats = $this->nomDao->rechercherStricte();
} else if ($recherche == 'etendue') {
$resultats = $this->nomDao->rechercherEtendue();
} else if ($recherche == 'floue') {
$resultats = $this->nomDao->rechercherFloue();
}
 
return $resultats;
}
 
private function trierNoms() {
$recherche = $this->parametres->get('recherche');
if ($recherche == 'floue') {
$this->trierRechercheFloue();
}
}
 
public function trierRechercheFloue() {
$nomDemande = $this->parametres->get('masque');
$nomDemandeSimple = strtolower(Chaine::supprimerAccents($nomDemande));
 
foreach ($this->noms as $id => $nom) {
$nomFlouSimple = strtolower(Chaine::supprimerAccents($nom['nom_sci']));
// Prime pour la ressemblance globale :
$score = 500 - levenshtein($nomFlouSimple, $nomDemandeSimple);
// On affine
$score += similar_text($nomDemandeSimple, $nomFlouSimple) * 3;
$this->noms[$id]['score'] = $score;
}
$noms = $this->noms;
$this->noms = Tableau::trierMD($noms, array('score' => false));
//print_r($this->noms);
}
 
private function construireTableauRetour() {
$retour = array('entete' => array(), 'resultats' => array());
$retour['resultats'] = $this->construireResultats();
$retour['entete'] = $this->construireEntete();
return $retour;
}
 
private function construireResultats() {
$nomsFormates = array();
foreach ($this->noms as $nom) {
$id = $nom['num_nom'];
$nomsFormates[$id] = $this->formaterNom($nom);
}
return $nomsFormates;
}
 
private function formaterNom($infos) {
$nomAFormater = new NomDO($infos);
$this->nomFormateur->setNomAFormater($nomAFormater);
$this->nomFormateur->setChampsRetour($this->parametres->getListe('retour.champs'));
$nom = $this->nomFormateur->formaterListe();
return $nom;
}
 
private function construireEntete() {
$entete = array('masque' => '', 'depart' => 0, 'limite' => 100, 'total' => 0);
$entete['masque'] = $this->formaterEnteteMasque();
$entete['depart'] = (int) $this->parametres->get('navigation.depart');
$entete['limite'] = (int) $this->parametres->get('navigation.limite');
$entete['total'] = $this->nbreNomsTotal;
if ($hrefPrecedent = $this->formaterEnteteHrefPrecedent()) {
$entete['href.precedent'] = $hrefPrecedent;
}
if ($hrefSuivant = $this->formaterEnteteHrefSuivant()) {
$entete['href.suivant'] = $hrefSuivant;
}
return $entete;
}
 
private function formaterEnteteMasque() {
$masqueComplet = array();
if ($this->parametres->exister('masque')) {
$masque = '';
$masque .= 'nom_sci='.$this->parametres->get('masque');
if ($this->parametres->get('recherche') == 'etendue') {
$masque .= '%';
}
$masqueComplet[] = $masque;
}
if ($this->parametres->exister('masque.sg')) {
$masque = '';
$masque .= 'nom_supra_generique='.$this->parametres->get('masque.sg');
if ($this->parametres->get('recherche') == 'etendue') {
$masque .= '%';
}
$masqueComplet[] = $masque;
}
if ($this->parametres->exister('masque.gen')) {
$masque = '';
$masque .= 'genre='.$this->parametres->get('masque.gen');
if ($this->parametres->get('recherche') == 'etendue') {
$masque .= '%';
}
$masqueComplet[] = $masque;
}
if ($this->parametres->exister('masque.sp')) {
$masque = '';
$masque .= 'epithete_sp='.$this->parametres->get('masque.sp');
if ($this->parametres->get('recherche') == 'etendue') {
$masque .= '%';
}
$masqueComplet[] = $masque;
}
return implode('&', $masqueComplet);
}
 
private function formaterEnteteHrefPrecedent() {
$limite = $this->parametres->get('navigation.limite');
$departActuel = $this->parametres->get('navigation.depart');
$departPrecedent = $departActuel - $limite;
$href = null;
if ($departPrecedent >= 0) {
$squelette = $this->construireTplHrefNavigation();
$href = sprintf($squelette, $departPrecedent, $limite);
}
return $href;
}
 
private function formaterEnteteHrefSuivant() {
$limite = $this->parametres->get('navigation.limite');
$departActuel = $this->parametres->get('navigation.depart');
$departSuivant = $departActuel + $limite;
$href = null;
if ($departSuivant < $this->nbreNomsTotal) {
$squelette = $this->construireTplHrefNavigation();
$href = sprintf($squelette, $departSuivant, $limite);
}
return $href;
}
 
private function construireTplHrefNavigation() {
$requetes = array();
$this->parametres->rewind();
while (is_null($parametre = $this->parametres->key()) === false) {
if (strpos($parametre, 'navigation') === false) {
$valeur = $this->parametres->current();
$requetes[] = "$parametre=$valeur";
}
$this->parametres->next();
}
$requetes[] = "navigation.depart=%s";
$requetes[] = "navigation.limite=%s";
$tpl = $this->listeUrl.'?'.implode('&', $requetes);
return $tpl;
}
}
?>
/trunk/services/bibliotheque/generique/NomDetailsGenerique.php
New file
0,0 → 1,30
<?php
class NomDetailsGenerique {
 
private $parametres = null;
private $ressources = null;
private $nomDao = null;
private $nomFormateur = null;
private $nom = array();
 
public function __construct(Ressources $ressources, Parametres $parametres, NomDAO $nomDao, NomFormateur $nomFormateur) {
$this->ressources = $ressources;
$this->parametres = $parametres;
$this->nomDao = $nomDao;
$this->nomFormateur = $nomFormateur;
}
 
public function consulter() {
$this->nom = $this->nomDao->rechercherInfosNom();
$retour = $this->formaterDetails();
return $retour;
}
 
private function formaterDetails() {
$this->nomFormateur->setNomAFormater($this->nom);
$this->nomFormateur->setChampsRetour($this->parametres->getListe('retour.champs'));
$details = $this->nomFormateur->formaterDetails();
return $details;
}
}
?>
/trunk/services/bibliotheque/Conteneur.php
67,6 → 67,24
return $this->partages['RessourcesVerificateur'];
}
 
public function getBdd() {
if (!isset($this->partages['Bdd'])){
$this->partages['Bdd'] = new Bdd();
}
return $this->partages['Bdd'];
}
 
public function getVersions() {
if (!isset($this->partages['Versions'])){
$parametres = $this->getParametresUrl();
$ressources = $this->getRessourcesUrl();
$bdd = $this->getBdd();
$versions = new Versions($parametres, $ressources, $bdd);
$this->partages['Versions'] = $versions;
}
return $this->partages['Versions'];
}
 
public function getProjet() {
if (!isset($this->partages['Projet'])){
$ressources = $this->getRessourcesUrl();
77,36 → 95,18
$projet->initialiser();
$projet->setParamsVerif($this->getParametresUrlVerificateur());
$projet->setRessourcesVerif($this->getRessourcesUrlVerificateur());
$projet->setServiceGenerique($this->getServiceGenerique());
$this->partages['Projet'] = $projet;
}
return $this->partages['Projet'];
}
 
public function getVersions() {
if (!isset($this->partages['Versions'])){
$parametres = $this->getParametresUrl();
$bdd = $this->getBdd();
$projetNom = $this->getProjet()->getNom();
$versions = new Versions($parametres, $bdd, $projetNom);
$this->partages['Versions'] = $versions;
}
return $this->partages['Versions'];
}
 
public function getBdd() {
if (!isset($this->partages['Bdd'])){
$this->partages['Bdd'] = new Bdd();
}
return $this->partages['Bdd'];
}
 
public function getNomDao() {
$ressources = $this->getRessourcesUrl();
$parametres = $this->getParametresUrl();
$bdd = $this->getBdd();
$projet = $this->getProjet();
$versions = $this->getVersions();
$nomDao = new NomDAO($ressources, $parametres, $bdd, $projet, $versions);
$nomDao = new NomDAO($ressources, $parametres, $bdd, $versions);
return $nomDao;
}
 
119,9 → 119,11
return $formateur;
}
 
public function getService($classe) {
$service = new $classe($this->getRessourcesUrl(), $this->getParametresUrl(), $this->getNomDao(), $this->getNomFormateur());
if ($service instanceof NomsListe) {
public function getServiceGenerique() {
$classe = $this->getRessourcesUrl()->getServiceClasse();
$classeGenerique = $classe.'Generique';
$service = new $classeGenerique($this->getRessourcesUrl(), $this->getParametresUrl(), $this->getNomDao(), $this->getNomFormateur());
if ($classe == 'NomsListe') {
$service->setListeUrl($this->getParametre('listeUrl'));
}
return $service;
/trunk/services/bibliotheque/Parametres.php
1,9 → 1,11
<?php
// TODO : il est peut être nécessaire de mieux distinguer les attributs parametres et parametresOrigine
// TODO : déplacer les méthodes getMasquePourBdd et getPourBdd dans les DAO
class Parametres implements Iterator {
 
private $parametres = array();
private $parametresOrigine = array();
private $parametresTypeEntier = array('navigation.limite', 'navigation.depart');
private $bdd = null;
 
public function __construct(Array $parametres, Bdd $bdd) {
38,9 → 40,14
if ($this->exister($parametreCode)) {
$valeur = $this->parametres[$parametreCode];
}
return $valeur;
return $this->etreParametreDeTypeEntier($parametreCode) ? (int) $valeur : $valeur;
}
 
private function etreParametreDeTypeEntier($parametreCode) {
$entier = in_array($parametreCode, $this->parametresTypeEntier) ? true : false;
return $entier;
}
 
public function getListe($parametreCode) {
$valeurs = array();
if ($this->exister($parametreCode)) {
/trunk/services/bibliotheque/Projet.php
6,6 → 6,7
private $cheminBase = '';
private $cheminConfig = '';
private $cheminBiblio = '';
private $serviceGenerique = '';
 
public function __construct(Ressources $ressources) {
$this->ressources = $ressources;
31,6 → 32,10
$this->ressourcesVerif = $ressourcesVerificateur;
}
 
public function setServiceGenerique($generique) {
$this->serviceGenerique = $generique;
}
 
public function initialiser() {
$this->chargerConfig();
// php5.3 : Enregistrement en première position des autoload de la méthode gérant les classes des services
44,7 → 49,6
private function chargerConfig() {
$projet = $this->getNom();
$chemin = $this->cheminConfig."config_$projet.ini";
 
Config::charger($chemin);
}
 
52,6 → 56,10
return $this->ressources->getProjetNom();
}
 
public function getClasse() {
return $this->ressources->getServiceClasse().ucfirst($this->getNom());
}
 
private function chargerClasseProjet($classe) {
if (class_exists($classe)) {
return null;
61,6 → 69,7
$chemins[] = $this->cheminBase.$this->getNom().DS;
$chemins[] = $this->cheminBase.'commun'.DS;
$chemins[] = $this->cheminBiblio;
$chemins[] = $this->cheminBiblio.'generique'.DS;
$chemins[] = $this->cheminBiblio.'interfaces'.DS;
$chemins[] = $this->cheminBiblio.'nom'.DS;
$chemins[] = $this->cheminBiblio.'nom'.DS.'decorateurs'.DS;
73,52 → 82,6
}
}
 
public function getServiceClasseNom() {
$classeNom = '';
if ($this->ressources->getNombre() == 2) {
if ($this->ressources->getServiceNom() == 'noms') {
$classeNom = 'NomsListe';
} else if ($this->ressources->getServiceNom() == 'taxons') {
$classeNom = 'TaxonsListe';
}
 
} else if ($this->ressources->getNombre() == 3) {
$position3 = $this->ressources->getParPosition(2);
if ($this->ressources->etreId($position3)) {
if ($this->ressources->getServiceNom() == 'noms') {
$classeNom = 'NomDetails';
} else if ($this->ressources->getServiceNom() == 'taxons') {
$classeNom = 'TaxonDetails';
}
}
} else if ($this->ressources->getNombre() == 4) {
$position3 = $this->ressources->getParPosition(2);
$position4 = $this->ressources->getParPosition(3);
if ($this->ressources->etreStats($position3)) {
if ($this->ressources->etreTypeDeStats($position4)) {
$classeNom = 'NomsStats'.ucfirst($position4);
}
} else if ($this->ressources->etreId($position3)) {
if ($this->ressources->etreRelations($position4)) {
$classeNom = 'NomRelations';
}
}
} else if ($this->ressources->getNombre() == 5) {
$position3 = $this->ressources->getParPosition(2);
$position4 = $this->ressources->getParPosition(3);
$position5 = $this->ressources->getParPosition(4);
if ($this->ressources->etreId($position3)) {
if ($this->ressources->etreRelations($position4)) {
if ($this->ressources->etreTypeDeRelations($position5)) {
$classeNom = 'NomRelations'.ucfirst($position5);
}
}
}
}
$classeNomProjet = $classeNom.'Generique';//.ucfirst($this->getNom());
return $classeNomProjet;
}
 
public function verifier() {
$this->paramsVerif->verifier();
$this->ressourcesVerif->verifier();
126,12 → 89,21
}
 
private function verifierExistanceServiceClasse() {
$service = $this->ressources->getServiceNom();
$classe = $this->getServiceClasseNom();
$projet = $this->getNom();
$classe = $this->getClasse();
$existe = $this->verifierExistanceClasseDuProjet($classe);
 
if ($existe === false) {
$service = $this->ressources->getServiceNom();
$projet = $this->getNom();
$message = "La classe du service demandé '$service' n'existe pas dans le projet '$projet' !";
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
throw new Exception($message, $code);
}
}
 
private function verifierExistanceClasseDuProjet($classe) {
$chemins = array();
$chemins[] = $this->cheminBase.$projet.DS.$classe.'.php';
$chemins[] = $this->cheminBase.$this->getNom().DS.$classe.'.php';
$chemins[] = $this->cheminBase.'commun'.DS.$classe.'.php';
 
$existe = false;
141,12 → 113,15
break;
}
}
if ($existe === false) {
$message = "La classe '$classe' du service demandé '$service' n'existe pas dans le projet '$projet' !";
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
throw new Exception($message, $code);
}
return $existe;
}
 
public function consulter() {
$serviceNom = $this->getClasse();
$service = new $serviceNom($this->serviceGenerique);
$retour = $service->consulter();
return $retour;
}
 
}
?>
/trunk/services/bibliotheque/nom/NomDAO.php
1,14 → 1,12
<?php
class NomDAO {
private $bdd = null;
private $projet = null;
private $versions = null;
 
public function __construct(Ressources $ressources, Parametres $parametres, Bdd $bdd, Projet $projet, Versions $versions) {
public function __construct(Ressources $ressources, Parametres $parametres, Bdd $bdd, Versions $versions) {
$this->ressources = $ressources;
$this->parametres = $parametres;
$this->bdd = $bdd;
$this->projet = $projet;
$this->versions = $versions;
}
 
15,7 → 13,7
private function getTable() {
$versions = $this->versions->getVersions();
$derniereVersion = end($versions);
$projetNom = $this->projet->getNom();
$projetNom = strtolower($this->ressources->getProjetNom());
return $projetNom.'_v'.$derniereVersion;
}
 
/trunk/services/tests/0.2/bibliotheque/ParametresTest.php
3,15 → 3,87
 
class ParametresTest extends ServicePhpUnit {
 
public function testerParametreParDefaut() {
private function initialiser($parametresUrl = array()) {
$bdd = $this->getMock('Bdd');
$parametresUrl = array();
 
$parametres = new Parametres($parametresUrl, $bdd);
return $parametres;
}
 
public function testerParametreParDefaut() {
$parametres = $this->initialiser();
 
$this->assertEquals('stricte', $parametres->get('recherche'));
$this->assertEquals('ns.format', $parametres->get('txt'));
$this->assertEquals('ns.format', $parametres->get('txt'));
$this->assertEquals('txt', $parametres->get('ns.format'));
$this->assertEquals('application/json', $parametres->get('retour'));
$this->assertEquals('max', $parametres->get('retour.format'));
$this->assertEquals('fr', $parametres->get('retour.langue'));
$this->assertEquals('+', $parametres->get('version.projet'));
$this->assertSame(0, $parametres->get('navigation.depart'));
$this->assertSame(100, $parametres->get('navigation.limite'));
}
 
public function testerExisterRetourneBouleen() {
$parametresUrl = array('masque.id' => '12,15,18');
 
$parametres = $this->initialiser($parametresUrl);
 
$this->assertTrue($parametres->exister('masque.id'));
$this->assertFalse($parametres->exister('masque'));
$this->assertTrue($parametres->exister('recherche'));
}
 
public function testerGetRetourneValeur() {
$parametresUrl = array('masque.id' => '12,15,18');
 
$parametres = $this->initialiser($parametresUrl);
 
$this->assertEquals('12,15,18', $parametres->get('masque.id'));
}
 
public function testerGetListeRetourneTableau() {
$parametresUrl = array('masque.id' => '12,15,18');
 
$parametres = $this->initialiser($parametresUrl);
$liste = $parametres->getListe('masque.id');
 
$this->assertTrue(is_array($liste));
$this->assertCount(3, $liste);
$this->assertContains(12, $liste);
$this->assertContains(15, $liste);
$this->assertContains(18, $liste);
}
 
public function testerIterateur() {
$parametresUrl = array('code1' => 'val1', 'code2' => 'val2', 'code3' => 'val3');
 
$parametres = $this->initialiser($parametresUrl);
 
$parametres->rewind();
$code = $parametres->key();
$valeur = $parametres->current();
$this->assertEquals('code1', $code);
$this->assertEquals('val1', $valeur);
 
$parametres->next();
$code = $parametres->key();
$valeur = $parametres->current();
$this->assertEquals('code2', $code);
$this->assertEquals('val2', $valeur);
 
$parametres->next();
$code = $parametres->key();
$valeur = $parametres->current();
$this->assertEquals('code3', $code);
$this->assertEquals('val3', $valeur);
 
$parametres->next();
$this->assertFalse($parametres->valid());
 
$parametres->rewind();
$this->assertTrue($parametres->valid());
$code = $parametres->key();
$this->assertEquals('code1', $code);
}
 
}
/trunk/services/tests/0.2/bibliotheque/ProjetTest.php
New file
0,0 → 1,64
<?php
require_once dirname(__FILE__).'/../ServicePhpUnit.php';
 
class ProjetTest extends ServicePhpUnit {
 
private function initialiser($ressourcesUrl = array()) {
$ressources = new Ressources($ressourcesUrl);
$projet = new Projet($ressources);
$projet->setCheminBase(realpath(dirname(__FILE__).'/../../../modules/0.2').'/');
$projet->setCheminConfig(realpath(dirname(__FILE__).'/../../../configurations').'/');
$projet->setCheminBiblio(realpath(dirname(__FILE__).'/../../../bibliotheque').'/');
$paramsVerif = $this->getMock('ParametresVerificateur');
$projet->setParamsVerif($paramsVerif);
$ressourcesVerif = $this->getMock('RessourcesVerificateur');
$projet->setRessourcesVerif($ressourcesVerif);
return $projet;
}
 
public function testerInitialiserAutoLoad() {
$ressourcesUrl = array('fournier', 'noms', '1');
 
$projet = $this->initialiser($ressourcesUrl);
$projet->initialiser();
 
$nomDetails = $this->getMock('NomDetailsGenerique');
$test = new NomDetailsFournier($nomDetails);
}
 
public function testerInitialiserConfig() {
$ressourcesUrl = array('fournier', 'noms', '1');
 
$projet = $this->initialiser($ressourcesUrl);
$projet->initialiser();
 
$this->assertNotNull(Config::get('nomProjet'));
$this->assertNotNull(Config::get('bddTable'));
$this->assertNotNull(Config::get('bddTableMeta'));
$this->assertNotNull(Config::get('baseServiceUrl'));
$this->assertNotNull(Config::get('baseProjetUrl'));
$this->assertNotNull(Config::get('listeUrl'));
$this->assertNotNull(Config::get('detailsHrefTpl'));
$this->assertNotNull(Config::get('ontologieHrefTpl'));
$this->assertNotNull(Config::get('servicesDispo'));
$this->assertNotNull(Config::get('parametresAPI'));
$this->assertNotNull(Config::get('champsProjet'));
}
 
public function testerVerifierExistanceClasseService() {
$ressourcesUrl = array('fournier', 'ServiceInexistant', '1');
 
$projet = $this->initialiser($ressourcesUrl);
 
try {
$projet->verifier();
} catch(Exception $e) {
$messageAttendu = "La classe du service demandé 'ServiceInexistant' n'existe pas dans le projet 'fournier' !";
$this->assertEquals($messageAttendu, $e->getMessage());
$this->assertEquals(404, $e->getCode());
return null;
}
$this->fail("Aucune exception n'a été soulevée.");
}
}
?>
/trunk/services/tests/0.2/bibliotheque/EnteteHttpTest.php
New file
0,0 → 1,14
<?php
require_once dirname(__FILE__).'/../ServicePhpUnit.php';
 
class EnteteHttpTest extends ServicePhpUnit {
 
public function testerEnteteHttpParDefaut() {
$enteteHttp = new EnteteHttp();
 
$this->assertEquals('200', $enteteHttp->code);
$this->assertEquals('utf-8', $enteteHttp->encodage);
$this->assertEquals('application/json', $enteteHttp->mime);
}
}
?>
/trunk/services/tests/0.2/bibliotheque/ParametresVerificateurTest.php
New file
0,0 → 1,112
<?php
require_once dirname(__FILE__).'/../ServicePhpUnit.php';
 
class ParametresVerificateurTest extends ServicePhpUnit {
 
private function initialiser($parametresUrl = array(), $parametresAPI = array()) {
$bdd = $this->getMock('Bdd');
$parametres = new Parametres($parametresUrl, $bdd);
$verificateur = new ParametresVerificateur($parametres, $parametresAPI);
return $verificateur;
}
 
public function testerValeursPermises() {
$parametresUrl = array(
'recherche' => 'declencheException',
'ns.format' => 'declencheException',
'retour' => 'declencheException',
'retour.format' => 'declencheException',
'retour.langue' => 'declencheException',
'ns.structure' => 'declencheException',
'version.projet' => 'declencheException');
 
$verificateur = $this->initialiser($parametresUrl);
 
try {
$verificateur->verifierValeurs();
} catch(Exception $e) {
$messageComplet = array("Erreur dans le paramètrage de votre URL :");
$messageTpl = "Le paramètre '%s' ne peut pas prendre la valeur 'declencheException'. Valeurs permises : %s";
$messageComplet[] = $messageAttendu = sprintf($messageTpl, 'recherche', 'stricte|floue|etendue');
$this->assertContains($messageAttendu, $e->getMessage());
$messageComplet[] = $messageAttendu = sprintf($messageTpl, 'ns.format', 'htm|txt');
$this->assertContains($messageAttendu, $e->getMessage());
$messageComplet[] = $messageAttendu = sprintf($messageTpl, 'retour', 'application/json|image/jpeg');
$this->assertContains($messageAttendu, $e->getMessage());
$messageComplet[] = $messageAttendu = sprintf($messageTpl, 'retour.format', 'min|max|oss|perso');
$this->assertContains($messageAttendu, $e->getMessage());
$messageComplet[] = $messageAttendu = sprintf($messageTpl, 'retour.langue', '/^(?:[*]|orig|[a-z]{2})$/');
$this->assertContains($messageAttendu, $e->getMessage());
$messageComplet[] = $messageAttendu = sprintf($messageTpl, 'ns.structure', '|an|au|bib|ad');
$this->assertContains($messageAttendu, $e->getMessage());
$messageComplet[] = $messageAttendu = sprintf($messageTpl, 'version.projet', '/^(?:[0-9]+[.][0-9]+|[*+])$/');
$this->assertContains($messageAttendu, $e->getMessage());
 
$this->assertEquals(implode('<br/>', $messageComplet), $e->getMessage());
return null;
}
$this->fail("Aucune exception n'a été soulevée.");
}
 
public function testerExceptionVerificationConformiteApi() {
$parametresUrl = array('code1' => 'val1');
$parametresAPI = array('paramApi');
 
$verificateur = $this->initialiser($parametresUrl, $parametresAPI);
 
try {
$verificateur->verifierConformiteApi();
} catch(Exception $e) {
$messageAttendu = "Le paramètre 'code1' n'est pas pris en compte par cette version de l'API.";
$this->assertEquals($messageAttendu, $e->getMessage());
return null;
}
$this->fail("Aucune exception n'a été soulevée.");
}
 
public function testerExceptionVerifierValeurSimple() {
$parametresUrl = array('recherche' => 'declencheException');
 
$verificateur = $this->initialiser($parametresUrl);
 
try {
$verificateur->verifierValeurs();
} catch(Exception $e) {
$messageAttendu = "Le paramètre 'recherche' ne peut pas prendre la valeur 'declencheException'. Valeurs permises : ";
$this->assertContains($messageAttendu, $e->getMessage());
return null;
}
$this->fail("Aucune exception n'a été soulevée.");
}
 
public function testerExceptionVerifierValeurRegExp() {
$parametresUrl = array('retour.langue' => '1');
 
$verificateur = $this->initialiser($parametresUrl);
 
try {
$verificateur->verifierValeurs();
} catch(Exception $e) {
$messageAttendu = "Le paramètre 'retour.langue' ne peut pas prendre la valeur '1'. Valeurs permises : ";
$this->assertContains($messageAttendu, $e->getMessage());
return null;
}
$this->fail("Aucune exception n'a été soulevée.");
}
 
public function testerExceptionVerifierValeurMultiple() {
$parametresUrl = array('ns.structure' => 'an,1');
 
$verificateur = $this->initialiser($parametresUrl);
 
try {
$verificateur->verifierValeurs();
} catch(Exception $e) {
$messageAttendu = "Le paramètre 'ns.structure' ne peut pas prendre la valeur '1'. Valeurs permises : ";
$this->assertContains($messageAttendu, $e->getMessage());
return null;
}
$this->fail("Aucune exception n'a été soulevée.");
}
}
?>