Rev 941 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');// declare(tension='220v');// declare(couleur_du_ciel='bleu');/*** Classe implémentant l'API d'eFlore concernant les statuts de protection** @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=EfloreApi01Status** @package eFlore/services* @author Aurélien PERONNET <aurelien@tela-botanica.org>* * @author Mathias CHOUET <mathias@tela-botanica.org>* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>* @version 1.0* @copyright 1999-2014 Tela Botanica (accueil@tela-botanica.org)*/// TODO : Config et Outils sont des classes statiques qui doivent poser des pb pour les tests...class Statuts extends Commun {protected $parametres = array();protected $ressources = array();private $bdd;private $retour_format = 'complet';private $retours_formats_autorises = array('complet','zone_geo');protected $nn_demande;protected $navigation_depart;protected $navigation_limite;public function __construct($config = null) {$this->config = $config;$this->bdd = $this->getBdd();}public function consulter($ressources, $parametres) {$this->parametres = $parametres;$this->ressources = $ressources;$this->affecterParametres();$resultat = new ResultatService();$resultat->corps = $this->obtenirStatuts();return $resultat;}/*** Affecte et vérifie les paramètres* @throws Exception*/private function affecterParametres() {$erreurs = array();if (isset($this->parametres['retour.format'])) {if(!in_array($this->retour_format, $this->retours_formats_autorises)) {$erreurs[] = 'la valeur '.$this->retour_format.' est inconnue';}$this->retour_format = $this->parametres['retour.format'];}if (isset($this->parametres['masque.nn']) && ($this->parametres['masque.nn'] != '')) {if(!is_numeric($this->parametres['masque.nn'])) {$erreurs[] = 'la valeur pour masque.nn doit être un entier';}$this->nn_demande = $this->parametres['masque.nn'];}if (isset($this->parametres['masque.zone']) && ($this->parametres['masque.zone'] != '')) {if(!is_numeric($this->parametres['masque.zone']) || !($this->parametres['masque.zone'] > 0 && $this->parametres['masque.zone'] <= 64)) {$erreurs[] = 'la valeur pour masque.zone doit être un entier compris entre 1 et 64';}$this->zone = $this->parametres['masque.zone'];}if (isset($this->parametres['navigation.depart']) && ($this->parametres['navigation.depart'] != '')) {if (!is_numeric($this->parametres['navigation.depart'])) {$erreurs[] = 'la valeur pour navigation.depart doit être un entier';}$this->navigation_depart = max(0, intval($this->parametres['navigation.depart']));} else {$this->navigation_depart = 0;}if (isset($this->parametres['navigation.limite']) && ($this->parametres['navigation.limite'] != '')) {if (!is_numeric($this->parametres['navigation.limite'])) {$erreurs[] = 'la valeur pour navigation.limite doit être un entier';}$this->navigation_limite = intval($this->parametres['navigation.limite']);} else {$this->navigation_limite = 100;}if (count($erreurs) > 0) {$message = implode('<br />', $erreurs);$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;throw new Exception($message, $code);}}private function obtenirLois(Array $id_lois) {$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois);$requete = "SELECT * FROM ".Config::get('bdd_table_lois').' '."WHERE id IN (".implode(',',$id_lois).") ";return $this->bdd->recupererTous($requete);}private function obtenirLoisZoneGeo(Array $id_lois) {$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois);$requete = "SELECT DISTINCT zone_application, code_zone_application FROM ".Config::get('bdd_table_lois').' '."WHERE id IN (".implode(',',$id_lois).") ";return $this->bdd->recupererTous($requete);}private function obtenirStatuts() {if ($this->nn_demande != null) {$conditions_taxons = array();$conditions_taxons = $this->obtenirNumNomTaxonsSuperieurs(Config::get('referentiel'), $this->nn_demande);$conditions_taxons[] = $this->bdd->proteger($this->nn_demande);}$requete = "SELECT * FROM ".Config::get('bdd_table_especes');if ($this->nn_demande != null) {$requete .= " WHERE num_nom_retenu IN (".implode(', ', $conditions_taxons).") OR ". "num_nom IN (".implode(', ', $conditions_taxons).") ";}// pagination$requete .= " LIMIT " . $this->navigation_depart . ", " . $this->navigation_limite;$requete .= ' -- ' . __FILE__ . ':' . __LINE__;//echo "REQ: $requete\n";$statuts = $this->bdd->recuperer($requete);//echo "STATUTS: " . print_r($statuts, true) . "\n";//echo "CPT: " . count($statuts) . "\n";$statuts = $this->formaterRetour($statuts);return $statuts;}//+---------------------------FONCTIONS DE FORMATAGE---------------------------------------------------------+private function formaterRetour($statuts_taxon) {switch($this->retour_format) {case 'zone_geo':$retour = $this->formaterStatutsTaxonZoneGeo($statuts_taxon);break;case 'complet':$retour = $this->formaterStatutsTaxon($statuts_taxon);break;default:$retour = $this->formaterStatutsTaxon();break;}return $retour;}private function formaterStatutsTaxonZoneGeo($statuts_taxon) {$lois_statuts = array();// cas ou la requête (obtenirStatuts()) ne retourne rienif(!$statuts_taxon) return array();foreach ($statuts_taxon as $champ => $statut) {if($statut == "1") {$lois_statuts[] = $champ;}}$zones_geo_lois = (!empty($lois_statuts)) ? $this->obtenirLoisZoneGeo($lois_statuts) : array();return $zones_geo_lois;}private function formaterStatutsTaxon($statuts_taxon) {$statuts_formates = array();$lois_statuts = array();if(is_array($statuts_taxon)) {unset($statuts_taxon['num_nom']);unset($statuts_taxon['num_nom_retenu']);unset($statuts_taxon['nom_sci']);foreach ($statuts_taxon as $champ => $statut) {if($statut == "1") {$lois_statuts[] = $champ;}}}$statuts_formates = (!empty($lois_statuts)) ? $this->obtenirLois($lois_statuts) : array();return $statuts_formates;}}?>