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 Cartopoint extends WidgetCommun { const DS = DIRECTORY_SEPARATOR; const SERVICE_CARTO_NOM = 'CelWidgetMapPoint'; 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 private $titre = null; // Indication s'il faut le titre par défaut, personnalisé ou bien sans titre private $logo = null; // url du logo à ajouter si nécessaire private $url_site = null; // url du site auquel le logo est lié private $image = null; // url d'une image à ajouter dans l'interface private $nbjours = null; // nombre de jours à partir de la date courante pour lesquels on affiche les points private $annee = null; // filtre par année private $referentiel = null; // référentiel /** boîte englobante (bounding box), représentée par deux paires de coordonnées : gauche-bas / droite-haut * http://wiki.openstreetmap.org/wiki/Bounding_Box * (chaque bibliothèque donne les 4 coins dans un ordre différent... autant choisir celui-là) * Exemple de paramètre: 43.6650177|3.8706364,43.7410594|4.0111413 (latS, lonO, latN, lonE) */ private $bbox = null; /** * 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->pays = (isset($pays) ? $pays : '*'); $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->titre = (isset($titre) ? urldecode($titre) : null); $this->logo = (isset($logo) ? urldecode($logo) : null); $this->url_site = (isset($url_site) ? urldecode($url_site) : null); $this->image = (isset($image) ? urldecode($image) : null); $this->nbjours = (isset($nbjours) ? urldecode($nbjours) : null); $this->annee = (isset($annee) ? urldecode($annee) : null); $this->referentiel = (isset($referentiel) ? urldecode($referentiel) : null); $this->bbox = (isset($bbox) ? urldecode($bbox) : null); // on s'emmerde pas à faire un tableau $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']['pays'] = $this->pays; $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']['titre'] = $this->titre; $widget['donnees']['logo'] = $this->logo; $widget['donnees']['url_site'] = $this->url_site; $widget['donnees']['image'] = $this->image; $widget['donnees']['nbjours'] = $this->nbjours; $widget['donnees']['annee'] = $this->annee; $widget['donnees']['referentiel'] = $this->referentiel; $widget['donnees']['bbox'] = $this->bbox; $widget['donnees']['url_limites_communales'] = $this->obtenirUrlsLimitesCommunales(); $widget['donnees']['communeImageUrl'] = $this->config['carto']['communeImageUrl']; $widget['donnees']['pointImageUrl'] = $this->config['carto']['pointImageUrl']; $widget['donnees']['groupeImageUrlTpl'] = $this->config['carto']['groupeImageUrlTpl']; $widget['donnees']['url_widget_saisie'] = $this->config['urls']['widgetSaisie']; $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', 'nbjours', 'referentiel','pays', 'start', 'limit'); 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(); if (isset($this->config['carto']['communesKmzChemin'])) { $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); } } } else { $this->messages[] = 'Veuillez configurer le paramètres carto.communesKmzChemin.'; } return $fichiers; } /** * Afficher message d'avertissement. */ public function executerAvertissement() { $widget = null; // Création des infos du widget $widget['donnees']['contenu_aide'] = $this->chargerAideWiki(); $widget['donnees']['url_base'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], ''); $widget['squelette'] = 'avertissement'; return $widget; } /** * Charge le contenu du wikini demandé */ function chargerAideWiki() { $url = str_replace('{page}','AideCarto',$this->config['carto']['aideWikiniUrlCartoPoint']); $infos_aide = file_get_contents($url); $aide = ''; if($infos_aide != null && $infos_aide != '') { $infos_aide = json_decode($infos_aide); $infos_aide = (is_a($infos_aide, 'StdClass') && $infos_aide->texte != null) ? $infos_aide->texte : ''; } return $infos_aide; } } ?>