utilisateur = identifiant * Affiche seulement les observations d'un utilisateur donné. L'identifiant correspond au courriel de * l'utilisateur avec lequel il s'est inscrit sur Tela Botanica. * ===> dept = code_du_département * Affiche seulement les observations pour le département français métropolitain indiqué. Les codes de département utilisables * sont : 01 à 19, 2A, 2B et 21 à 95. * ===> projet = mot-clé * Affiche seulement les observations pour le projet d'observations indiqué. Dans l'interface du CEL, vous pouvez taguer vos * observations avec un mot-clé de projet. Si vous voulez regrouper des observations de plusieurs utilisateurs, communiquez un * mot-clé de projet à vos amis et visualisez les informations ainsi regroupées. * ===> num_taxon = num_taxon * Affiche seulement les observations pour la plante indiquée. Le num_taxon correspond au numéro taxonomique de la plante. * Ce numéro est disponible dans les fiches d'eFlore. Par exemple, pour "Poa bulbosa L." le numéro taxonomique vaut 7080. * * @author Jean-Pascal MILCENT * @license GPL v3 * @license CECILL v2 * @version $Id$ * @copyright Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org) */ class Carto extends WidgetCommun { const DS = DIRECTORY_SEPARATOR; const SERVICE_CARTO_NOM = 'CelWidgetMap'; const SERVICE_CARTO_ACTION_DEFAUT = 'carte-defaut'; private $carte = null; private $utilisateur = null; private $projet = null; private $dept = null; private $num_taxon = null; private $station = null; private $format = null;// Format des obs pour les stations (tableau/liste) private $photos = null; // Seulement les obs avec photos ou bien toutes /** * Méthode appelée par défaut pour charger ce widget. */ public function executer() { $retour = null; $this->extraireParametres(); $methode = $this->traiterNomMethodeExecuter($this->carte); if (method_exists($this, $methode)) { $retour = $this->$methode(); } else { $this->messages[] = "Ce type de service '$methode' n'est pas disponible."; } if (is_null($retour)) { $info = 'Un problème est survenu : '.print_r($this->messages, true); $this->envoyer($info); } else { $squelette = dirname(__FILE__).self::DS.'squelettes'.self::DS.$retour['squelette'].'.tpl.html'; $html = $this->traiterSquelettePhp($squelette, $retour['donnees']); $this->envoyer($html); } } public function extraireParametres() { extract($this->parametres); $this->carte = (isset($carte) ? $carte : self::SERVICE_CARTO_ACTION_DEFAUT); $this->utilisateur = (isset($utilisateur) ? $utilisateur : '*'); $this->projet = (isset($projet) ? $projet : '*'); $this->tag = (isset($tag) ? $tag : '*'); $this->tag = (isset($motcle) ? $motcle : $this->tag); $this->dept = (isset($dept) ? $dept : '*'); $this->commune = (isset($commune) ? $commune : '*'); $this->num_taxon = (isset($num_taxon) ? $num_taxon : '*'); $this->date = (isset($date) ? $date : '*'); $this->taxon = (isset($taxon) ? $taxon : '*'); $this->commentaire = (isset($commentaire) ? $commentaire : null); $this->station = (isset($station) ? $station : null); $this->format = (isset($format) ? $format : null); $this->photos = (isset($photos) ? $photos : null); $this->start = (isset($start) ? $start : null); $this->limit = (isset($limit) ? $limit : null); } /** * Carte par défaut */ public function executerCarteDefaut() { $widget = null; $url_stations = $this->contruireUrlServiceCarto('stations'); $url_base = sprintf($this->config['chemins']['baseURLAbsoluDyn'], ''); // Création des infos du widget $widget['donnees']['url_cel_carto'] = $this->contruireUrlServiceCarto(); $widget['donnees']['url_stations'] = $url_stations; $widget['donnees']['url_base'] = $url_base; $widget['donnees']['utilisateur'] = $this->utilisateur; $widget['donnees']['projet'] = $this->projet; $widget['donnees']['tag'] = $this->tag; $widget['donnees']['dept'] = $this->dept; $widget['donnees']['commune'] = $this->commune; $widget['donnees']['num_taxon'] = $this->num_taxon; $widget['donnees']['date'] = $this->date; $widget['donnees']['taxon'] = $this->taxon; $widget['donnees']['commentaire'] = $this->commentaire; $widget['donnees']['photos'] = $this->photos; $widget['donnees']['url_limites_communales'] = $this->obtenirUrlsLimitesCommunales(); $widget['donnees']['prod'] = ($this->config['parametres']['modeServeur'] == "prod"); $widget['donnees']['cleGoogleMaps'] = $this->config['api']['cleGoogleMapsCarto']; $widget['squelette'] = 'carte_defaut'; return $widget; } private function contruireUrlServiceCarto($action = null) { // Création url données json $url = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::SERVICE_CARTO_NOM); if ($action) { $url .= "/$action"; $parametres_retenus = array(); $parametres_a_tester = array('station', 'utilisateur', 'projet', 'tag', 'dept', 'commune', 'num_taxon', 'taxon', 'date', 'commentaire', 'start', 'limit', 'photos'); foreach ($parametres_a_tester as $param) { if (isset($this->$param) && $this->$param != '*') { $parametres_retenus[$param] = $this->$param; } } if (count($parametres_retenus) > 0) { $parametres_url = array(); foreach ($parametres_retenus as $cle => $valeur) { $parametres_url[] = $cle.'='.$valeur; } $url .= '?'.implode('&', $parametres_url); } } return $url; } private function obtenirUrlsLimitesCommunales() { $urls = null; if (isset($this->dept)) { // si on veut afficher les limites départementales on va compter et chercher les noms de fichiers $fichiersKml = $this->chercherFichierKml(); if (count($fichiersKml) > 0) { foreach ($fichiersKml as $kml => $dossier){ $url_limites_communales = sprintf($this->config['carto']['limitesCommunaleUrlTpl'], $dossier, $kml); $urls[] = $url_limites_communales; } } } $urls = json_encode($urls); return $urls; } private function chercherFichierKml(){ $fichiers = array(); $chemins = explode(',', $this->config['carto']['communesKmzChemin']); $departements = explode(',', $this->dept);// plrs code de départements peuvent être demandés séparés par des virgules $departements_trouves = array(); foreach ($chemins as $dossier_chemin) { if ($dossier_ressource = opendir($dossier_chemin)) { while ($element = readdir($dossier_ressource)) { if ($element != '.' && $element != '..') { foreach ($departements as $departement) { $nom_dossier = basename($dossier_chemin); if (!isset($departements_trouves[$departement]) || $departements_trouves[$departement] == $nom_dossier) { $dept_protege = preg_quote($departement); if (!is_dir($dossier_chemin.'/'.$element) && preg_match("/^$dept_protege(?:_[0-9]+|)\.km[lz]$/", $element)) { $fichiers[$element] = $nom_dossier; $departements_trouves[$departement] = $nom_dossier; } } } } } closedir($dossier_ressource); } } return $fichiers; } /** * Afficher message d'avertissement. */ public function executerAvertissement() { $widget = null; // Création des infos du widget $widget['donnees']['url_base'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], ''); $widget['donnees']['url_remarques'] = $this->config['chemins']['widgetRemarquesUrl']; $widget['squelette'] = 'avertissement'; return $widget; } } ?>