/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."); |
} |
} |
?> |