* @license GPL v3 * @license CECILL v2 * @version $Id$ * @copyright Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org) */ class Export extends WidgetCommun { const DS = DIRECTORY_SEPARATOR; const SERVICE_DEFAUT = 'export'; private $export_url = null; private $eflore_url_tpl = null; /** Si spécifié, on ajoute une barre de navigation inter-applications */ private $bar; /** pré-chargement du champ "projet" (pour les fainéants) - @TODO étendre à tous les champs ? */ protected $projet; /** * Méthode appelée par défaut pour charger ce widget. */ public function executer() { $retour = null; extract($this->parametres); // aaaargh mon pauvre cœur :'( if (!isset($mode)) { $mode = self::SERVICE_DEFAUT; } $this->bar = (isset($bar)) ? $bar : false; $this->projet = (isset($projet)) ? $projet : ''; $methode = $this->traiterNomMethodeExecuter($mode); if (method_exists($this, $methode)) { $retour = $this->$methode(); } else { $this->messages[] = "Ce type de service '$methode' n'est pas disponible."; } if (is_null($retour)) { $contenu = 'Un problème est survenu : '.print_r($this->messages, true); } else { $urlWsCommune = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'LocationSearch'); $retour['donnees']['url_ws_autocompletion_commune'] = $urlWsCommune; $urlWsNomSci = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'NameSearch'); $retour['donnees']['url_ws_autocompletion_nom_sci'] = $urlWsNomSci; $retour['donnees']['url_base'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], ''); $retour['donnees']['url_export'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelWidgetExport'); $retour['donnees']['url_script_navigation'] = sprintf($this->config['chemins']['baseURLRessources'], 'tb/reseau/navigation.js'); $retour['donnees']['bar'] = $this->bar; $retour['donnees']['projet'] = $this->projet; $retour['donnees']['liste_pays'] = $this->obtenirListePays(); $retour['donnees']['prod'] = ($this->config['parametres']['modeServeur'] == "prod"); $squelette = dirname(__FILE__).self::DS.'squelettes'.self::DS.$retour['squelette'].'.tpl.html'; $contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']); } $this->envoyer($contenu); } private function executerAjax() { $widget = $this->executerObservation(); $widget['squelette'] = 'export_ajax'; return $widget; } private function executerExport() { $widget = array('squelette' => 'export', 'donnees' => array()); extract($this->parametres); $max_obs = (isset($max_obs) && preg_match('/^[0-9]+,[0-9]+$/', $max_obs)) ? $max_obs : '10'; return $widget; } private function traiterParametres() { $parametres_export = '?'; $criteres = array('utilisateur', 'commune', 'dept', 'taxon', 'commentaire', 'date', 'projet', 'programme', 'identiplante'); foreach($this->parametres as $nom_critere => $valeur_critere) { if (in_array($nom_critere, $criteres)) { $valeur_critere = str_replace(' ', '%20', $valeur_critere); $parametres_export .= $nom_critere.'='.$valeur_critere.'&'; } } if ($parametres_export == '?') { $parametres_export = ''; } else { $parametres_export = rtrim($parametres_export, '&'); } return $parametres_export; } protected function obtenirListePays() { $url = $this->config['chemins']['infosPaysUrl']; $liste_pays = json_decode(file_get_contents($url), true); $pays_fmt = array(); foreach($liste_pays['resultat'] as $pays) { // Les pays renvoyé par le web service sont tous en majuscule $nom = mb_convert_case($pays['nom'], MB_CASE_TITLE, 'UTF-8'); // Cas spécial de la france qui différencie france métropolitaine et "DOM TOM" if($pays['code'] == "FR") { $pays_fmt[] = array('code_iso_3166_1' => 'FR,FX,GF,PF,TF', 'nom' => 'France (tout)'); $pays_fmt[] = array('code_iso_3166_1' => 'FR,FX', 'nom' => 'France métropolitaine'); } else { $pays_fmt[] = array('code_iso_3166_1' => $pays['code'], 'nom' => $nom); } } // Tri par nom plutot que par code usort($pays_fmt, array($this, "trierPays")); return $pays_fmt; } protected function trierPays($a, $b) { return strcmp($a['nom'], $b['nom']); } } ?>