New file |
0,0 → 1,200 |
<?php |
|
class Cartes { |
|
const MIME_MAP = "text/html"; |
const MIME_PNG = "image/png"; |
|
private $ressources; |
private $parametres; |
|
private $referentiel = ''; |
private $taxon = null; |
private $sources = array(); |
private $format = 'max'; |
private $retour = self::MIME_MAP; |
private $erreurs = array(); |
|
|
public function consulter($ressources, $parametres) { |
$this->parametres = $parametres; |
$this->ressources = $ressources; |
$resultat = null; |
$this->chargerClassesSousDossier(); |
if ($this->analyserRessources() == true) { |
$resultat = $this->formerLegende(); |
} else { |
$this->traiterParametres(); |
$resultat = $this->formerCarte(); |
} |
return $resultat; |
} |
|
private function analyserRessources() { |
$ok = false; |
if (isset($this->ressources[0]) && $this->ressources[0] == 'legende') { |
$ok = true; |
} |
return $ok; |
} |
|
private function formerLegende() { |
$legende = new LegendeCartes(); |
$resultat = $legende->obtenirLegende(); |
return $resultat; |
} |
|
private function chargerClassesSousDossier() { |
$this->verifierExistenceDossier("cartes"); |
$nomDossier = dirname(__FILE__).DS."cartes"; |
$dossier = opendir($nomDossier); |
$fichiersAInclure = array(); |
while ($fichier = readdir($dossier)) { |
if (filetype($nomDossier.DS.$fichier) == 'file') { |
$fichiersAInclure[] = $nomDossier.DS.$fichier; |
} |
} |
$fichiersAInclure = array_reverse($fichiersAInclure); |
foreach ($fichiersAInclure as $fichier) { |
include_once($fichier); |
} |
} |
|
private function verifierExistenceDossier($nomDossier) { |
$dossier = dirname(__FILE__).DS.$nomDossier; |
if (!file_exists($dossier) || !is_dir($dossier)) { |
$message = "Problème rencontré lors de la génération de la carte : des ressources ". |
"nécessaires au fonctionnement du service n'ont pas été localisées sur le serveur.\n"; |
throw new Exception($message); |
} |
} |
|
private function verifierExistenceFichier($nomFichier) { |
if (!file_exists($nomFichier)) { |
$message = "Problème rencontré lors de la génération de la carte : des ressources ". |
"nécessaires au fonctionnement du service n'ont pas été localisées sur le serveur.\n"; |
throw new Exception($message); |
} |
} |
|
private function traiterParametres() { |
$this->verifierReferentielEtTaxon(); |
$this->verifierParametreSource(); |
$this->verifierParametreFormat(); |
$this->verifierParametreRetour(); |
if (count($this->erreurs) > 0) { |
$this->renvoyerErreurs(); |
} |
} |
|
private function verifierParametreFormat() { |
if (!isset($this->parametres['format'])) { |
$this->erreurs[] = "Le paramètre format (dimensions) de l'image n'a pas été indiqué dans l'URL du service."; |
} elseif (preg_match('/^[1-9]\d{2}$/', $this->parametres['format']) != 1) { |
$this->erreurs[] = "La valeur du paramètre format n'est pas acceptée par le service. ". |
"Une largeur valide doit être un nombre entier compris entre 100 et 999."; |
} else { |
$this->format = $this->parametres['format']; |
} |
} |
|
private function verifierParametreRetour() { |
$typesMime = array(self::MIME_MAP, self::MIME_PNG); |
if (!isset($this->parametres['retour'])) { |
$this->erreurs[] = "Le paramètre type de retour de l'image n'a pas été indiqué dans l'URL du service."; |
} elseif (!in_array($this->parametres['retour'], $typesMime)) { |
$this->erreurs[] = "Le format de retour ".$this->parametres['retour']." n'est pas acceptée par le service. ". |
" Seuls les types MIME suivants sont gérés : ".implode(',', $typesMime); |
} else { |
$this->retour = $this->parametres['retour']; |
} |
} |
|
private function verifierParametreSource() { |
$sourcesDisponibles = explode(',', trim(Config::get('sourcesDonnees'))); |
if (isset($this->parametres['source'])) { |
$sourcesParametre = explode(',', trim($this->parametres['source'])); |
foreach ($sourcesParametre as $source) { |
if (!in_array($source, $sourcesDisponibles)) { |
$this->erreurs[] = "La source de données $source n'est pas disponible pour ce service. ". |
"Les sources suivantes sont utilisables : ".implode(',', $sourcesDisponibles)."."; |
} else { |
$this->sources[] = $source; |
} |
} |
} else { |
$this->sources = $sourcesDisponibles; |
} |
} |
|
private function verifierReferentielEtTaxon() { |
if (!$this->estReferentielDisponible()) { |
$this->erreurs[] = "Le référentiel ".$this->parametres['referentiel']." n'a pas été trouvé. ". |
"La liste des référentiels disponibles pour ce service sont : ".Config::get('referentielsDispo'); |
} else { |
$this->referentiel = $this->parametres['referentiel']; |
$taxon = $this->recupererInformationsTaxon(); |
if (is_null($taxon)) { |
$this->erreurs[] = "Le taxon d'espèce que vous avez demandé n'a pas été trouvé dans le référentiel."; |
} else { |
$this->taxon = $taxon; |
} |
} |
} |
|
private function renvoyerErreurs() { |
$message = "Les erreurs suivantes ont été rencontrées : \n".implode('\n', $this->erreurs); |
throw new Exception($message, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
|
private function estReferentielDisponible() { |
$referentielsDispo = explode(',', Config::get('referentielsDispo')); |
$estDisponible = (isset($this->parametres['referentiel']) |
&& in_array($this->parametres['referentiel'], $referentielsDispo)); |
return $estDisponible; |
} |
|
private function recupererInformationsTaxon() { |
$taxon = null; |
if (isset($this->parametres['num_taxon'])) { |
$numTaxon = $this->parametres['num_taxon']; |
$nomTable = $this->recupererNomTableReferentiel(); |
$bdd = new Bdd(); |
$requete = "SELECT num_nom, num_nom_retenu, nom_sci, rang, num_taxonomique FROM {$nomTable} ". |
"WHERE num_taxonomique={$numTaxon} ORDER BY If(num_nom=num_nom_retenu,0,1) LIMIT 0,1"; |
$taxon = $bdd->recuperer($requete); |
if ($taxon === false) { |
$taxon = null; |
} |
} |
return $taxon; |
} |
|
private function recupererNomTableReferentiel() { |
$tablesReferentiel = explode(',', Config::get('bdd_table_referentiel')); |
$nomTable = ''; |
foreach ($tablesReferentiel as $table) { |
if (strstr($table, $this->referentiel) !== false) { |
$nomTable = $table; |
} |
} |
return $nomTable; |
} |
|
private function formerCarte() { |
$suffixe = 'france_moissonnage'; |
$nomFichierSVG = Config::get('chemin')."{$suffixe}.svg"; |
$this->verifierExistenceFichier($nomFichierSVG); |
|
$formateur = new FormateurSVG($nomFichierSVG, $this->sources, $this->retour, $this->format); |
$formateur->formaterCarte($this->taxon); |
$resultat = new ResultatService(); |
$resultat->corps = $formateur->renvoyerCarte(); |
$resultat->mime = $this->retour; |
|
return $resultat; |
} |
|
} |
|
?> |