Rev 811 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpclass 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;}}?>