* @license GPL v3 * @license CECILL v2 * @version 1.0 * @copyright 1999-2012 Tela Botanica (accueil@tela-botanica.org) */ // TODO : Config et Outils sont des classes statiques qui doivent poser des pb pour les tests... class ChorodepCartes { private $parametres = array(); private $ressources = array(); public function consulter($ressources, $parametres) { $this->parametres = $parametres; $this->ressources = $ressources; $this->analyserRessources(); $resultat = $this->executerSousService(); return $resultat; } private function analyserRessources() { $nbreRessources = count($this->ressources); if ($nbreRessources == 0) { $this->sousService = 'France'; } else if ($nbreRessources == 1) { if ($this->etreRessourceIdentifiants(0)) { $this->sousService = 'Taxons'; } else if ($this->etreRessourceLegende(0)) { // cas de la légende de la carte globale par taxons // qui utilise le même sous service que la carte globale // elle même $this->sousService = 'France'; } else { $message = "La ressource n°1 '{$this->ressources[0]} indiquée n'est pas valable."; $code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE; throw new Exception($message, $code); } } else if ($nbreRessources == 2) { if ($this->etreRessourceIdentifiants(0) && $this->etreRessourceLegende(1)) { $this->sousService = 'Legende'; } } } private function etreRessourceIdentifiants($position) { $ok = true; if (isset($this->ressources[$position])) { $ids = $this->ressources[$position]; $projetPattern = '(?:(?:(?:[A-Za-z0-9]+\.)?(?:nn|nt)?:)?(?:[0-9]+,)*[0-9]+)'; $patternComplet = "/^$projetPattern(?:;$projetPattern)*$/i"; $ok = preg_match($patternComplet, $ids) ? true : false; } return $ok; } private function etreRessourceLegende($position) { $ok = true; if (isset($this->ressources[$position])) { $legende = $this->ressources[$position]; $ok = ($legende == 'legende') ? true : false; } return $ok; } private function executerSousService() { if (isset($this->sousService)) { $classe = $this->sousService.'Cartes'; require_once dirname(__FILE__).DS.'cartes'.DS.$classe.'.php'; $sousService = new $classe(new Conteneur()); $resultat = $sousService->consulter($this->ressources, $this->parametres); } else { $message = "L'analyse des ressources n'a pu aboutir à déterminer le sous service à executer."; $code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; throw new Exception($message, $code); } return $resultat; } } ?>