Rev 1190 | 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 cd_protection IN (".implode(',',$id_lois).") ORDER BY zone_application ASC";$lois = $this->bdd->recupererTous($requete, 'ASSOC');foreach ($lois as $loi) {$retour[$loi['cd_protection']] = $loi;}return $retour;}private function obtenirLoisZoneGeo(Array $id_lois) {$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois);$requete = "SELECT DISTINCT zone_application, code_zone_application, type_protection FROM ".Config::get('bdd_table_lois').' '."WHERE cd_protection IN (".implode(',',$id_lois).") ORDER BY zone_application ASC";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->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->recupererTous($requete, 'ASSOC');//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) {$retour = "";if ($statuts_taxon) {foreach ($statuts_taxon as $nom) {$f[$nom['cd_protection']][$nom['num_nom']] = $nom['nom_sci'];$lois_statuts[] = $nom['cd_protection'];}switch($this->retour_format) {case 'zone_geo':$retour = $this->obtenirLoisZoneGeo($lois_statuts);break;case 'nom':$lois = $this->obtenirLois($lois_statuts);foreach ($statuts_taxon as $nom) {$retour[$nom['num_nom']]['num_nom'] = $nom['num_nom'];$retour[$nom['num_nom']]['nom_sci'] = $nom['nom_sci'];$retour[$nom['num_nom']]['lois'][$nom['cd_protection']] = $lois[$nom['cd_protection']];}break;case 'complet':$lois = $this->obtenirLois($lois_statuts);foreach ($lois as $id => $loi) {$retour[$loi['zone_application']][$id] = $loi;if (isset($f[$id])) {foreach ($f[$id] as $num_nom => $nom_sci) {$retour[$loi['zone_application']][$id]['nom_sci'][$num_nom] = $nom_sci;}}}break;default:$retour = $this->formaterStatutsTaxon();break;}}return $retour;}}?>