| 416 | aurelien | 1 | <?php
 | 
        
           | 2462 | jpm | 2 | // declare(encoding='UTF-8');
 | 
        
           | 416 | aurelien | 3 | /**
 | 
        
           |  |  | 4 |  * Service fournissant des informations concernant le CEL au format RSS1, RSS2 ou ATOM.
 | 
        
           |  |  | 5 |  * Encodage en entrée : utf8
 | 
        
           |  |  | 6 |  * Encodage en sortie : utf8
 | 
        
           |  |  | 7 |  * Format du service :
 | 
        
           |  |  | 8 |  * /CelSyndicationObservation/liste-des-flux
 | 
        
           |  |  | 9 |  * /CelSyndicationObservation/opml
 | 
        
           |  |  | 10 |  * /CelSyndicationObservation/par-defaut/(rss1|rss2|atom)?start=0&limit=150
 | 
        
           |  |  | 11 |  * /CelSyndicationObservation/pour-admin/(rss1|rss2|atom)?start=0&limit=150
 | 
        
           |  |  | 12 |  * /CelSyndicationObservation/par-mots-cles/(rss1|rss2|atom)/mot-cle?start=0&limit=150
 | 
        
           |  |  | 13 |  * /CelSyndicationObservation/par-commune/(rss1|rss2|atom)/nom-commune?start=0&limit=150
 | 
        
           | 1338 | jpm | 14 |  *
 | 
        
           | 416 | aurelien | 15 |  * Les paramêtres :
 | 
        
           |  |  | 16 |  *  - "start" indique le numéro du premier item à afficher
 | 
        
           |  |  | 17 |  *  - "limit" nombre d'items à afficher
 | 
        
           | 1338 | jpm | 18 |  *
 | 
        
           | 2462 | jpm | 19 |  * @internal   Mininum PHP version : 5.2
 | 
        
           |  |  | 20 |  * @category   CEL
 | 
        
           |  |  | 21 |  * @package    Services
 | 
        
           |  |  | 22 |  * @subpackage Syndication
 | 
        
           |  |  | 23 |  * @version    0.1
 | 
        
           |  |  | 24 |  * @author     Mathias CHOUET <mathias@tela-botanica.org>
 | 
        
           |  |  | 25 |  * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
 | 
        
           |  |  | 26 |  * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
 | 
        
           |  |  | 27 |  * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
 | 
        
           |  |  | 28 |  * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
 | 
        
           |  |  | 29 |  * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
 | 
        
           | 416 | aurelien | 30 |  */
 | 
        
           |  |  | 31 | class CelSyndicationObservation extends Cel {
 | 
        
           | 1338 | jpm | 32 |   | 
        
           | 528 | jpm | 33 | 	private $parametres_origines = null;
 | 
        
           | 416 | aurelien | 34 | 	private $format = null;
 | 
        
           |  |  | 35 | 	private $service = null;
 | 
        
           |  |  | 36 | 	private $squelette = null;
 | 
        
           |  |  | 37 | 	private $squelette_dossier = null;
 | 
        
           | 790 | delphine | 38 | 	private $auteurs = array();
 | 
        
           | 416 | aurelien | 39 | 	private $flux = array();
 | 
        
           | 715 | delphine | 40 | 	private $criteres = array(
 | 
        
           | 1338 | jpm | 41 | 		'utilisateur' => 'courriel_utilisateur',
 | 
        
           |  |  | 42 | 		'commune' => 'zone_geo',
 | 
        
           | 1330 | aurelien | 43 | 		'dept' => 'ce_zone_geo',
 | 
        
           | 715 | delphine | 44 | 		'taxon' => 'nom_ret',
 | 
        
           | 1464 | aurelien | 45 | 		'num_taxon' => 'nt',
 | 
        
           | 715 | delphine | 46 | 		'commentaire' => 'commentaire',
 | 
        
           |  |  | 47 | 		'date' => 'date_observation',
 | 
        
           | 1477 | aurelien | 48 | 		'motcle' => 'tags',
 | 
        
           | 2681 | aurelien | 49 | 		'projet' => 'mots-cles',
 | 
        
           |  |  | 50 | 		'groupe_zones_geo' => 'groupe_zones_geo');
 | 
        
           | 2394 | aurelien | 51 | 	private $catalogue_cles_labels_champs_etendus = array();
 | 
        
           | 1338 | jpm | 52 |   | 
        
           | 416 | aurelien | 53 | 	/**
 | 
        
           |  |  | 54 | 	 * Méthode appelée avec une requête de type GET.
 | 
        
           |  |  | 55 | 	 */
 | 
        
           |  |  | 56 | 	public function getElement($params = array()) {
 | 
        
           |  |  | 57 | 		// Initialisation des variables
 | 
        
           | 528 | jpm | 58 | 		$this->parametres_origines = $params;
 | 
        
           | 416 | aurelien | 59 | 		$info = array();
 | 
        
           |  |  | 60 | 		$contenu = '';
 | 
        
           | 1338 | jpm | 61 |   | 
        
           | 536 | jpm | 62 | 		if (! $this->etreFluxAdmin() || $this->authentifierAdmin()) {
 | 
        
           | 525 | jpm | 63 | 			// Pré traitement des paramêtres
 | 
        
           |  |  | 64 | 			$pour_bdd = false;
 | 
        
           |  |  | 65 | 			$p = $this->traiterParametres(array('service', 'format'), $params, $pour_bdd);
 | 
        
           |  |  | 66 | 			extract($p);
 | 
        
           |  |  | 67 | 			$this->parametres = $params;
 | 
        
           |  |  | 68 | 			$this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
 | 
        
           | 1338 | jpm | 69 |   | 
        
           | 525 | jpm | 70 | 			// Récupération de la liste des flux
 | 
        
           |  |  | 71 | 			$this->chargerListeDesFlux();
 | 
        
           | 1338 | jpm | 72 |   | 
        
           | 525 | jpm | 73 | 			// Chargement du bon type de service demandé
 | 
        
           |  |  | 74 | 			if (isset($service)) {
 | 
        
           |  |  | 75 | 				$this->service = $this->traiterNomService($service);
 | 
        
           |  |  | 76 | 				$methode = $this->getNomMethodeService();
 | 
        
           |  |  | 77 | 				if (method_exists($this, $methode)) {
 | 
        
           |  |  | 78 | 					if (isset($format) && preg_match('/^(?:rss1|rss2|atom)$/i', $format)) {
 | 
        
           |  |  | 79 | 						// Mise en minuscule de l'indication du format
 | 
        
           |  |  | 80 | 						$this->format = strtolower($format);
 | 
        
           |  |  | 81 | 						// Définition du fichier squelette demandé
 | 
        
           |  |  | 82 | 						$this->squelette = $this->squelette_dossier.$this->format.'.tpl.xml';
 | 
        
           |  |  | 83 | 					} else if (isset($this->flux[$this->service])) {
 | 
        
           |  |  | 84 | 						$this->format = '';
 | 
        
           |  |  | 85 | 						$this->messages[] = "Le service CEL Syndication nécessite d'indiquer en second paramètre le format : rss1, rss2 ou atom.";
 | 
        
           |  |  | 86 | 					}
 | 
        
           | 1338 | jpm | 87 |   | 
        
           | 525 | jpm | 88 | 					if (!isset($this->flux[$this->service]) || isset($this->format)) {
 | 
        
           |  |  | 89 | 						// Suppression des paramêtres inutile pour le reste des méthodes
 | 
        
           |  |  | 90 | 						array_shift($this->parametres);
 | 
        
           |  |  | 91 | 						array_shift($this->parametres);
 | 
        
           | 1338 | jpm | 92 |   | 
        
           | 525 | jpm | 93 | 						// Récupération du contenu à renvoyer
 | 
        
           |  |  | 94 | 						$contenu = $this->$methode();
 | 
        
           |  |  | 95 | 					}
 | 
        
           |  |  | 96 | 				} else {
 | 
        
           |  |  | 97 | 					$this->messages[] = "Le type d'information demandé '$this->service' n'est pas disponible.";
 | 
        
           | 416 | aurelien | 98 | 				}
 | 
        
           |  |  | 99 | 			} else {
 | 
        
           | 525 | jpm | 100 | 				$this->messages[] = "Le service CEL Syndication Observation nécessite d'indiquer en premier paramètre le type d'information demandé.";
 | 
        
           | 416 | aurelien | 101 | 			}
 | 
        
           |  |  | 102 | 		}
 | 
        
           | 1338 | jpm | 103 |   | 
        
           | 416 | aurelien | 104 | 		// Envoie sur la sortie standard
 | 
        
           |  |  | 105 | 		$encodage = 'utf-8';
 | 
        
           |  |  | 106 | 		$mime = $this->getTypeMime();
 | 
        
           |  |  | 107 | 		$formatage_json = $this->getFormatageJson();
 | 
        
           |  |  | 108 | 		$this->envoyer($contenu, $mime, $encodage, $formatage_json);
 | 
        
           |  |  | 109 | 	}
 | 
        
           | 1338 | jpm | 110 |   | 
        
           | 416 | aurelien | 111 | 	private function getUrlBase() {
 | 
        
           | 637 | jpm | 112 | 		$url_base = sprintf($this->config['settings']['baseURLAbsolu'], get_class($this).'/');
 | 
        
           | 416 | aurelien | 113 | 		return $url_base;
 | 
        
           |  |  | 114 | 	}
 | 
        
           | 1338 | jpm | 115 |   | 
        
           | 416 | aurelien | 116 | 	private function getUrlServiceBase() {
 | 
        
           | 528 | jpm | 117 | 		$url_service = $this->getUrlBase().implode('/', $this->parametres_origines);
 | 
        
           | 416 | aurelien | 118 | 		return $url_service;
 | 
        
           |  |  | 119 | 	}
 | 
        
           | 1338 | jpm | 120 |   | 
        
           | 416 | aurelien | 121 | 	private function traiterNomService($nom) {
 | 
        
           |  |  | 122 | 		$nom = strtolower($nom);
 | 
        
           |  |  | 123 | 		return $nom;
 | 
        
           |  |  | 124 | 	}
 | 
        
           | 1338 | jpm | 125 |   | 
        
           | 416 | aurelien | 126 | 	private function getNomMethodeService() {
 | 
        
           |  |  | 127 | 		$methode = '';
 | 
        
           |  |  | 128 | 		$service_formate = str_replace(' ', '', ucwords(implode(' ', explode('-', $this->service))));
 | 
        
           |  |  | 129 | 		$methode = 'getService'.$service_formate;
 | 
        
           |  |  | 130 | 		return $methode;
 | 
        
           |  |  | 131 | 	}
 | 
        
           | 1338 | jpm | 132 |   | 
        
           | 416 | aurelien | 133 | 	private function getTypeMime() {
 | 
        
           |  |  | 134 | 		$mime = '';
 | 
        
           | 1338 | jpm | 135 | 		$test = isset($this->format) ? $this->format : $this->service;
 | 
        
           | 416 | aurelien | 136 | 		switch ($test) {
 | 
        
           |  |  | 137 | 			case 'atom' :
 | 
        
           |  |  | 138 | 				$mime = 'application/atom+xml';
 | 
        
           |  |  | 139 | 				break;
 | 
        
           |  |  | 140 | 			case 'rss1' :
 | 
        
           |  |  | 141 | 			case 'rss2' :
 | 
        
           |  |  | 142 | 				$mime = 'application/rss+xml';
 | 
        
           |  |  | 143 | 				break;
 | 
        
           |  |  | 144 | 			case 'opml' :
 | 
        
           |  |  | 145 | 				$mime = 'text/x-opml';
 | 
        
           |  |  | 146 | 				break;
 | 
        
           |  |  | 147 | 			default:
 | 
        
           |  |  | 148 | 				$mime = 'text/html';
 | 
        
           |  |  | 149 | 		}
 | 
        
           |  |  | 150 | 		return $mime;
 | 
        
           |  |  | 151 | 	}
 | 
        
           | 1338 | jpm | 152 |   | 
        
           | 416 | aurelien | 153 | 	private function getFormatageJson() {
 | 
        
           |  |  | 154 | 		$json = false;
 | 
        
           |  |  | 155 | 		switch ($this->service) {
 | 
        
           |  |  | 156 | 			case 'liste-des-flux' :
 | 
        
           |  |  | 157 | 				$json = true;
 | 
        
           |  |  | 158 | 				break;
 | 
        
           |  |  | 159 | 			default:
 | 
        
           |  |  | 160 | 				$json = false;
 | 
        
           |  |  | 161 | 		}
 | 
        
           |  |  | 162 | 		return $json;
 | 
        
           |  |  | 163 | 	}
 | 
        
           | 1338 | jpm | 164 |   | 
        
           | 416 | aurelien | 165 | 	private function getFlux($nom) {
 | 
        
           |  |  | 166 | 		return isset($this->flux[$nom]) ? $this->flux[$nom] : array();
 | 
        
           |  |  | 167 | 	}
 | 
        
           |  |  | 168 |   | 
        
           |  |  | 169 | 	private function setFlux($nom, $titre, $description) {
 | 
        
           |  |  | 170 | 		$url_base = $this->getUrlBase();
 | 
        
           |  |  | 171 | 		$formats = array('atom', 'rss2', 'rss1');
 | 
        
           |  |  | 172 | 		$flux = array();
 | 
        
           |  |  | 173 | 		foreach ($formats as $format) {
 | 
        
           |  |  | 174 | 			$url = $url_base.$nom.'/'.$format;
 | 
        
           |  |  | 175 | 			$flux[$format] = $url;
 | 
        
           |  |  | 176 | 		}
 | 
        
           |  |  | 177 | 		$this->flux[$nom] = array('titre' => $titre, 'description' => $description, 'urls' => $flux);
 | 
        
           |  |  | 178 | 	}
 | 
        
           | 1338 | jpm | 179 |   | 
        
           | 416 | aurelien | 180 | 	private function chargerListeDesFlux() {
 | 
        
           | 1338 | jpm | 181 | 		$this->setFlux('par-defaut', 'Flux de syndication des observations publiques du CEL',
 | 
        
           | 416 | aurelien | 182 | 			'Ce flux fournit des informations sur les observations du CEL.');
 | 
        
           | 742 | delphine | 183 | 		$this->setFlux('multicriteres','Flux de syndication des nouvelles observations publiques du CEL '.
 | 
        
           |  |  | 184 | 			'filtrées par un ou plusieurs critères',
 | 
        
           |  |  | 185 | 			"Ce flux fournit des informations sur les nouvelles observations du CEL filtrées par ".
 | 
        
           |  |  | 186 | 			"auteur (mail), commune (nom), departement (code postal), taxon (nom scientifique), commentaire, projet ".
 | 
        
           |  |  | 187 | 			"et/ou date.");
 | 
        
           | 416 | aurelien | 188 | 	}
 | 
        
           | 1338 | jpm | 189 |   | 
        
           | 416 | aurelien | 190 | 	private function getServiceListeDesFlux() {
 | 
        
           |  |  | 191 | 		return $this->flux;
 | 
        
           |  |  | 192 | 	}
 | 
        
           | 1338 | jpm | 193 |   | 
        
           | 416 | aurelien | 194 | 	private function getServiceOpml() {
 | 
        
           |  |  | 195 | 		$donnees = array();
 | 
        
           |  |  | 196 | 		$id = 1;
 | 
        
           |  |  | 197 | 		foreach ($this->flux as $flux_nom => $flux){
 | 
        
           |  |  | 198 | 			$info = array();
 | 
        
           |  |  | 199 | 			$info['type'] = 'atom';
 | 
        
           |  |  | 200 | 			$info['titre'] = $flux['titre'];
 | 
        
           |  |  | 201 | 			$info['texte'] = "CEL - Obs - $flux_nom";
 | 
        
           |  |  | 202 | 			$info['description'] = $flux['description'];
 | 
        
           |  |  | 203 | 			$info['url_xml'] = $this->getUrlBase().$flux_nom.'/atom';
 | 
        
           |  |  | 204 | 			$info['url_html'] = $this->config['settings']['aideCelUrl'].'FluxSyndication';
 | 
        
           |  |  | 205 | 			$donnees['liste_flux'][] = $info;
 | 
        
           |  |  | 206 | 		}
 | 
        
           | 1338 | jpm | 207 |   | 
        
           | 416 | aurelien | 208 | 		$this->squelette = $this->squelette_dossier.'opml.tpl.xml';
 | 
        
           |  |  | 209 | 		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
 | 
        
           |  |  | 210 | 		return $contenu;
 | 
        
           |  |  | 211 | 	}
 | 
        
           | 1338 | jpm | 212 |   | 
        
           | 416 | aurelien | 213 | 	private function getServiceParDefaut() {
 | 
        
           |  |  | 214 | 		// Construction de la requête
 | 
        
           | 715 | delphine | 215 | 		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
 | 
        
           | 1330 | aurelien | 216 | 			'FROM cel_obs '.
 | 
        
           |  |  | 217 | 			(($this->etreFluxAdmin()) ? '' : 'WHERE transmission = 1 ').
 | 
        
           | 715 | delphine | 218 | 			'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'date_modification DESC').' '.
 | 
        
           | 416 | aurelien | 219 | 			"LIMIT $this->start,$this->limit ";
 | 
        
           | 1338 | jpm | 220 |   | 
        
           | 2143 | jpm | 221 | 		$elements = Cel::db()->requeter($requete);
 | 
        
           | 1338 | jpm | 222 |   | 
        
           | 416 | aurelien | 223 | 		// Création du contenu
 | 
        
           |  |  | 224 | 		$contenu = $this->executerService($elements);
 | 
        
           |  |  | 225 | 		return $contenu;
 | 
        
           |  |  | 226 | 	}
 | 
        
           | 1338 | jpm | 227 |   | 
        
           | 715 | delphine | 228 | 	private function getServiceMultiCriteres() {
 | 
        
           |  |  | 229 | 		$contenu = '';
 | 
        
           | 1338 | jpm | 230 | 		if (isset($_GET['debut'])) $this->start = $_GET['debut'];
 | 
        
           | 1550 | aurelien | 231 | 		if (isset($_GET['limite'])) $this->limit = $_GET['limite'];
 | 
        
           | 2143 | jpm | 232 |   | 
        
           | 1550 | aurelien | 233 | 		$this->limit = ($this->limit < 1000) ? $this->limit : 1000;// Pour éviter les abus !
 | 
        
           | 1338 | jpm | 234 |   | 
        
           | 715 | delphine | 235 | 		// Construction de la requête
 | 
        
           |  |  | 236 | 		$requete = (isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
 | 
        
           | 1330 | aurelien | 237 | 				'FROM cel_obs '.
 | 
        
           |  |  | 238 | 				'WHERE 1 AND '.(($this->etreFluxAdmin()) ? '' : ' transmission = 1 AND ');
 | 
        
           | 1338 | jpm | 239 |   | 
        
           | 715 | delphine | 240 | 		if ($this->estUneRechercheGenerale()) {
 | 
        
           |  |  | 241 | 			$chaine_requete = $_GET['recherche'];
 | 
        
           |  |  | 242 | 			$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
 | 
        
           |  |  | 243 | 		} else {
 | 
        
           |  |  | 244 | 			$criteres = $this->traiterCriteresMultiples($_GET) ;
 | 
        
           |  |  | 245 | 			if (!empty($criteres)) {
 | 
        
           |  |  | 246 | 				$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
 | 
        
           | 1338 | jpm | 247 | 			}
 | 
        
           | 715 | delphine | 248 | 		}
 | 
        
           |  |  | 249 | 		$requete = rtrim($requete, 'AND ');
 | 
        
           | 1338 | jpm | 250 | 		$requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  :
 | 
        
           | 1330 | aurelien | 251 | 			'date_modification DESC, zone_geo ASC').' '.
 | 
        
           | 715 | delphine | 252 | 				"LIMIT $this->start,$this->limit ";
 | 
        
           | 1330 | aurelien | 253 |   | 
        
           | 2143 | jpm | 254 | 		$elements = Cel::db()->requeter($requete);
 | 
        
           |  |  | 255 |   | 
        
           | 715 | delphine | 256 | 		// Création du contenu
 | 
        
           |  |  | 257 | 		if ($elements != false && count($elements) > 0) {
 | 
        
           |  |  | 258 | 			$contenu = $this->executerService($elements);
 | 
        
           |  |  | 259 | 		} else {
 | 
        
           |  |  | 260 | 			$this->messages[] = "Aucune observation disponible.";
 | 
        
           |  |  | 261 | 		}
 | 
        
           | 1338 | jpm | 262 |   | 
        
           | 715 | delphine | 263 |         return $contenu;
 | 
        
           |  |  | 264 | 	}
 | 
        
           | 1338 | jpm | 265 |   | 
        
           | 715 | delphine | 266 | 	private function creerSousRequeteRechercheParCriteres($criteres) {
 | 
        
           |  |  | 267 | 		$requete = '';
 | 
        
           |  |  | 268 | 		foreach ($criteres as $pair) {
 | 
        
           |  |  | 269 | 			$nom_valeur = explode("=",$pair);
 | 
        
           |  |  | 270 | 			if (sizeof($nom_valeur) != 0) {
 | 
        
           |  |  | 271 | 				switch ($nom_valeur[0]) {
 | 
        
           | 1765 | raphael | 272 | 					case "ci_limite" : $this->limit = Cel::db()->quote($nom_valeur[1]); break;
 | 
        
           | 715 | delphine | 273 | 					case "commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
 | 
        
           |  |  | 274 | 						foreach($mots_comment_liste as $mot_comment) {
 | 
        
           |  |  | 275 | 							$mot_comment = trim($mot_comment) ;
 | 
        
           | 1765 | raphael | 276 | 							$requete .= $nom_valeur[0].' LIKE '.Cel::db()->quote('%'.$mot_comment.'%').' AND ';
 | 
        
           | 715 | delphine | 277 | 						}
 | 
        
           |  |  | 278 | 						break;
 | 
        
           | 1338 | jpm | 279 | 					case "date_observation" :
 | 
        
           | 715 | delphine | 280 | 						$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
 | 
        
           |  |  | 281 | 						if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $nom_valeur[1], $matches)) {
 | 
        
           |  |  | 282 | 							$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
 | 
        
           |  |  | 283 | 						}
 | 
        
           | 1765 | raphael | 284 | 						$requete .= $nom_valeur[0].'='.Cel::db()->quote($nom_valeur[1]).' AND '; break;
 | 
        
           | 1330 | aurelien | 285 | 					case "ce_zone_geo" :
 | 
        
           |  |  | 286 | 						$requete .= ' ('.$nom_valeur[0].' LIKE "INSEE-C:'.$nom_valeur[1].'%") AND '; break;
 | 
        
           | 1338 | jpm | 287 | 					case "nom_ret" :
 | 
        
           |  |  | 288 | 						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
 | 
        
           | 715 | delphine | 289 | 						$requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR nom_sel LIKE "%'.
 | 
        
           |  |  | 290 | 							$nom_valeur[1].'%") AND '; break;
 | 
        
           | 1338 | jpm | 291 | 					case "mots-cles" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]).' AND '; break;
 | 
        
           | 1477 | aurelien | 292 | 					case "tags" : $requete .= $this->creerSousRequeteTags($nom_valeur[1]).' AND '; break;
 | 
        
           | 2681 | aurelien | 293 | 					case "groupe_zones_geo" : $requete .= $this->creerSousRequeteGroupeZonesGeo($nom_valeur[1])." AND "; break;
 | 
        
           | 715 | delphine | 294 | 					default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
 | 
        
           |  |  | 295 | 				}
 | 
        
           |  |  | 296 | 			}
 | 
        
           |  |  | 297 | 		}
 | 
        
           |  |  | 298 | 		$requete = rtrim($requete,' AND ');
 | 
        
           |  |  | 299 | 		return $requete;
 | 
        
           |  |  | 300 | 	}
 | 
        
           | 2681 | aurelien | 301 |   | 
        
           |  |  | 302 | 	private function creerSousRequeteGroupeZonesGeo($groupe_zones_geo) {
 | 
        
           |  |  | 303 | 		$req = "SELECT valeur FROM cel_groupes_zones WHERE id_groupe = ".Cel::db()->proteger($groupe_zones_geo);
 | 
        
           |  |  | 304 | 		$res = Cel::db()->requeter($req);
 | 
        
           |  |  | 305 | 		$zones = array();
 | 
        
           |  |  | 306 | 		foreach($res as &$r) {
 | 
        
           |  |  | 307 | 			$zones[] = Cel::db()->proteger($r['valeur']);
 | 
        
           |  |  | 308 | 		}
 | 
        
           |  |  | 309 | 		$sql = '(ce_zone_geo IN ('.implode(',', $zones).')) ';
 | 
        
           |  |  | 310 |   | 
        
           |  |  | 311 | 		return $sql;
 | 
        
           |  |  | 312 | 	}
 | 
        
           | 1338 | jpm | 313 |   | 
        
           | 715 | delphine | 314 | 	private function creerSousRequeteMotsCles($mot_cle) {
 | 
        
           | 1330 | aurelien | 315 | 		$requete = '';
 | 
        
           | 741 | delphine | 316 | 		if (preg_match('/.*OU.*/', $mot_cle)) {
 | 
        
           | 1330 | aurelien | 317 | 			$mots_cles_tab = explode('OU',$mot_cle);
 | 
        
           |  |  | 318 | 			foreach($mots_cles_tab as $mot_cle_item) {
 | 
        
           | 1765 | raphael | 319 | 				$requete .= '(mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
 | 
        
           | 1330 | aurelien | 320 | 			}
 | 
        
           |  |  | 321 | 			$requete = '('.rtrim($requete,'OR ').') ';
 | 
        
           | 715 | delphine | 322 | 		} else if (preg_match('/.*ET.*/', $mot_cle)) {
 | 
        
           | 1330 | aurelien | 323 | 			$mots_cles_tab = explode('ET',$mot_cle);
 | 
        
           |  |  | 324 | 			foreach($mots_cles_tab as $mot_cle_item) {
 | 
        
           | 1765 | raphael | 325 | 				$requete .= '(mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
 | 
        
           | 715 | delphine | 326 | 			}
 | 
        
           | 1330 | aurelien | 327 | 			$requete = '('.rtrim($requete, 'AND ').') ';
 | 
        
           |  |  | 328 | 		} else {
 | 
        
           | 1765 | raphael | 329 | 			$requete = "(mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
 | 
        
           | 715 | delphine | 330 | 		}
 | 
        
           |  |  | 331 | 		return $requete;
 | 
        
           |  |  | 332 | 	}
 | 
        
           | 2143 | jpm | 333 |   | 
        
           | 1477 | aurelien | 334 | 	private function creerSousRequeteTags($tag) {
 | 
        
           | 2446 | jpm | 335 | 		$requete = '(id_observation IN (SELECT ce_observation FROM cel_images ci WHERE ';
 | 
        
           | 1477 | aurelien | 336 | 		$where = '';
 | 
        
           |  |  | 337 | 		if (preg_match('/.*OU.*/', $tag)) {
 | 
        
           |  |  | 338 | 			$mots_cles_tab = explode('OU',$tag);
 | 
        
           |  |  | 339 | 			foreach($mots_cles_tab as $mot_cle_item) {
 | 
        
           | 1765 | raphael | 340 | 				$where .= '(ci.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
 | 
        
           | 1477 | aurelien | 341 | 			}
 | 
        
           |  |  | 342 | 			$where .= '('.rtrim($where,'OR ').') ';
 | 
        
           |  |  | 343 | 		} else if (preg_match('/.*ET.*/', $tag)) {
 | 
        
           |  |  | 344 | 			$mots_cles_tab = explode('ET',$tag);
 | 
        
           |  |  | 345 | 			foreach($mots_cles_tab as $mot_cle_item) {
 | 
        
           | 1765 | raphael | 346 | 				$where .= '(ci.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
 | 
        
           | 1477 | aurelien | 347 | 			}
 | 
        
           |  |  | 348 | 			$where .= '('.rtrim($where, 'AND ').') ';
 | 
        
           |  |  | 349 | 		} else {
 | 
        
           | 1765 | raphael | 350 | 			$where .= "(ci.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$tag.'%').') ';
 | 
        
           | 1477 | aurelien | 351 | 		}
 | 
        
           |  |  | 352 | 		$requete .= $where.' ))';
 | 
        
           |  |  | 353 | 		return $requete;
 | 
        
           |  |  | 354 | 	}
 | 
        
           | 1338 | jpm | 355 |   | 
        
           | 715 | delphine | 356 | 	private function traiterCriteresMultiples($tableau_criteres) {
 | 
        
           |  |  | 357 | 		$tableau_criteres_pour_bdd = array();
 | 
        
           | 1338 | jpm | 358 |   | 
        
           | 715 | delphine | 359 | 		foreach($tableau_criteres as $nom_critere => $valeur_critere) {
 | 
        
           |  |  | 360 | 			if (isset($this->criteres[$nom_critere])) {
 | 
        
           |  |  | 361 | 				$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
 | 
        
           |  |  | 362 | 			}
 | 
        
           |  |  | 363 | 		}
 | 
        
           |  |  | 364 | 		return $tableau_criteres_pour_bdd;
 | 
        
           |  |  | 365 | 	}
 | 
        
           | 1338 | jpm | 366 |   | 
        
           | 715 | delphine | 367 | 	private function creerSousRequeteRechercheGenerale($chaine_requete) {
 | 
        
           |  |  | 368 | 		$requete = '';
 | 
        
           | 1338 | jpm | 369 | 		if (trim($chaine_requete) != '') {
 | 
        
           | 715 | delphine | 370 | 			$chaine_requete = strtolower($chaine_requete);
 | 
        
           |  |  | 371 | 			$chaine_requete = str_replace(' ', '_', $chaine_requete);
 | 
        
           |  |  | 372 | 			$requete = ' ('.
 | 
        
           |  |  | 373 | 				'nom_ret LIKE "'.$chaine_requete.'%"'.
 | 
        
           |  |  | 374 | 				' OR '.
 | 
        
           |  |  | 375 | 				'nom_sel LIKE "'.$chaine_requete.'%"'.
 | 
        
           |  |  | 376 | 				' OR '.
 | 
        
           | 1330 | aurelien | 377 | 				'zone_geo LIKE "'.$chaine_requete.'%" '.
 | 
        
           | 715 | delphine | 378 | 				' OR '.
 | 
        
           | 1330 | aurelien | 379 | 				'ce_zone_geo LIKE "'.$chaine_requete.'%" '.
 | 
        
           | 715 | delphine | 380 | 				' OR '.
 | 
        
           | 1330 | aurelien | 381 | 				'ce_zone_geo LIKE "INSEE-C:'.$chaine_requete.'%" '.
 | 
        
           |  |  | 382 | 				' OR '.
 | 
        
           |  |  | 383 | 				'courriel_utilisateur LIKE "'.$chaine_requete.'%" '.
 | 
        
           |  |  | 384 | 				' OR '.
 | 
        
           |  |  | 385 | 				'mots_cles_texte LIKE "'.$chaine_requete.'%" '.
 | 
        
           | 715 | delphine | 386 | 				') ';
 | 
        
           |  |  | 387 | 		}
 | 
        
           |  |  | 388 | 		return $requete;
 | 
        
           |  |  | 389 | 	}
 | 
        
           | 1338 | jpm | 390 |   | 
        
           | 715 | delphine | 391 | 	private function estUneRechercheGenerale() {
 | 
        
           |  |  | 392 | 		return isset($_GET['recherche']);
 | 
        
           |  |  | 393 | 	}
 | 
        
           | 1338 | jpm | 394 |   | 
        
           | 416 | aurelien | 395 | 	private function executerService($elements) {
 | 
        
           |  |  | 396 | 		$contenu = '';
 | 
        
           |  |  | 397 | 		if (is_array($elements)) {
 | 
        
           |  |  | 398 | 			// Prétraitement des données
 | 
        
           |  |  | 399 | 			$donnees = $this->construireDonneesCommunesAuFlux($elements);
 | 
        
           | 1550 | aurelien | 400 | 			$ids_observations = array();
 | 
        
           | 416 | aurelien | 401 | 			foreach ($elements as $element) {
 | 
        
           | 1338 | jpm | 402 | 				$identifiants[$element['courriel_utilisateur']] = $element['courriel_utilisateur'];
 | 
        
           | 1550 | aurelien | 403 | 				$ids_observations[] = $element['id_observation'];
 | 
        
           | 790 | delphine | 404 | 			}
 | 
        
           | 1550 | aurelien | 405 | 			$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
 | 
        
           | 1571 | aurelien | 406 | 			$champs_etendus = $gestion_champs_etendus->consulterParLots($ids_observations);
 | 
        
           | 2394 | aurelien | 407 | 			if(!empty($champs_etendus)) {
 | 
        
           |  |  | 408 | 				$this->catalogue_cles_labels_champs_etendus = $gestion_champs_etendus->consulterCatalogueChampsEtendusPredefinis(true);
 | 
        
           | 2403 | aurelien | 409 | 				// afin de simplifier les erreurs de majuscules et minuscules
 | 
        
           |  |  | 410 | 				$this->catalogue_cles_labels_champs_etendus = array_change_key_case($this->catalogue_cles_labels_champs_etendus);
 | 
        
           | 2394 | aurelien | 411 | 			}
 | 
        
           | 790 | delphine | 412 | 			$this->auteurs = $this->creerAuteurs($identifiants);
 | 
        
           |  |  | 413 | 			foreach ($elements as $element) {
 | 
        
           | 1550 | aurelien | 414 | 				$element['obs_etendue'] = isset($champs_etendus[$element['id_observation']]) ? $champs_etendus[$element['id_observation']] : array();
 | 
        
           | 416 | aurelien | 415 | 				$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
 | 
        
           |  |  | 416 | 			}
 | 
        
           | 1338 | jpm | 417 |   | 
        
           | 416 | aurelien | 418 | 			// Création du contenu à partir d'un template PHP
 | 
        
           |  |  | 419 | 			if (isset($this->squelette)) {
 | 
        
           |  |  | 420 | 				$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
 | 
        
           |  |  | 421 | 			}
 | 
        
           | 1338 | jpm | 422 | 		}
 | 
        
           | 416 | aurelien | 423 | 		return $contenu;
 | 
        
           |  |  | 424 | 	}
 | 
        
           | 1338 | jpm | 425 |   | 
        
           | 416 | aurelien | 426 | 	private function construireDonneesCommunesAuFlux($observations) {
 | 
        
           |  |  | 427 | 		$donnees = $this->getFlux($this->service);
 | 
        
           |  |  | 428 | 		$donnees['guid'] = $this->getUrlServiceBase();
 | 
        
           | 741 | delphine | 429 | 		$donnees['titre'] = 'Flux des observations du CEL';
 | 
        
           | 416 | aurelien | 430 | 		$donnees['lien_service'] = $this->creerUrlService();
 | 
        
           | 715 | delphine | 431 | 		$donnees['lien_cel'] = $this->config['settings']['baseURLAbsolu'];
 | 
        
           | 416 | aurelien | 432 | 		$donnees['editeur'] = $this->config['settings']['editeur'];
 | 
        
           |  |  | 433 | 		$derniere_info_en_date = reset($observations);
 | 
        
           |  |  | 434 | 		$date_modification_timestamp = strtotime($derniere_info_en_date['date_modification']);
 | 
        
           |  |  | 435 | 		$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
 | 
        
           |  |  | 436 | 		$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
 | 
        
           |  |  | 437 | 		$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
 | 
        
           |  |  | 438 | 		$donnees['annee_courante'] = date('Y');
 | 
        
           |  |  | 439 | 		$donnees['generateur'] = 'CEL - Jrest - CelSyndicationObservation';
 | 
        
           | 715 | delphine | 440 | 		$donnees['generateur_version'] = (preg_match('/([0-9]+)/', '$Revision$', $match)) ?  $match[1] : '0';
 | 
        
           | 1338 | jpm | 441 | 		return $donnees;
 | 
        
           | 416 | aurelien | 442 | 	}
 | 
        
           | 1338 | jpm | 443 |   | 
        
           | 416 | aurelien | 444 | 	private function construireDonneesCommunesAuxItems($observation) {
 | 
        
           |  |  | 445 | 		$item = array();
 | 
        
           | 528 | jpm | 446 | 		$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($observation['date_modification']);
 | 
        
           | 416 | aurelien | 447 | 		$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp);
 | 
        
           |  |  | 448 | 		$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
 | 
        
           |  |  | 449 | 		$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
 | 
        
           |  |  | 450 | 		$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
 | 
        
           |  |  | 451 | 		$item['date_creation_simple'] = strftime('%A %d %B %Y à %H:%M', strtotime($observation['date_creation']));
 | 
        
           |  |  | 452 | 		$item['titre'] = $this->creerTitre($observation);
 | 
        
           |  |  | 453 | 		$item['guid'] = $this->creerGuidItem($observation);
 | 
        
           |  |  | 454 | 		$item['lien'] = $this->creerLienItem($observation);
 | 
        
           |  |  | 455 | 		$item['categorie'] = $this->creerCategorie($item);
 | 
        
           | 1790 | raphael | 456 | 		$item['description'] = $this->creerDescription(Cel::protegerCaracteresHtmlDansChamps($observation), $item);
 | 
        
           | 528 | jpm | 457 | 		$item['description_encodee'] = htmlspecialchars($this->creerDescription($observation, $item));
 | 
        
           | 2400 | jpm | 458 | 		$item['modifier_par'] = $this->nettoyerTexte($observation['id_observation']);
 | 
        
           | 416 | aurelien | 459 | 		return $item;
 | 
        
           |  |  | 460 | 	}
 | 
        
           | 1338 | jpm | 461 |   | 
        
           | 416 | aurelien | 462 | 	private function creerTitre($obs) {
 | 
        
           | 1464 | aurelien | 463 | 		$date = ($obs['date_observation'] != '0000-00-00 00:00:00') ? 'le '.date("d/m/Y", strtotime($obs['date_observation'])) : '' ;
 | 
        
           | 1330 | aurelien | 464 | 		$nom_plante = $obs['nom_sel'].' [nn'.$obs['nom_sel_nn'].']';
 | 
        
           | 2560 | aurelien | 465 | 		$lieu = Cel::formaterZoneGeoEtCodePourAffichage($obs);
 | 
        
           | 1361 | aurelien | 466 | 		$utilisateur = $this->getIntituleAuteur($obs['courriel_utilisateur']);
 | 
        
           | 1410 | aurelien | 467 | 		$titre = "$nom_plante à $lieu par $utilisateur $date";
 | 
        
           | 416 | aurelien | 468 | 		$titre = $this->nettoyerTexte($titre);
 | 
        
           |  |  | 469 | 		return $titre;
 | 
        
           |  |  | 470 | 	}
 | 
        
           | 1338 | jpm | 471 |   | 
        
           | 416 | aurelien | 472 | 	private function creerGuidItem($element) {
 | 
        
           | 1330 | aurelien | 473 | 		$guid = sprintf($this->config['settings']['guidObsTpl'], $element['id_observation']);
 | 
        
           | 416 | aurelien | 474 | 		return $guid;
 | 
        
           |  |  | 475 | 	}
 | 
        
           | 1338 | jpm | 476 |   | 
        
           | 416 | aurelien | 477 | 	private function creerLienItem($element) {
 | 
        
           | 506 | jpm | 478 | 		$lien = null;
 | 
        
           | 1330 | aurelien | 479 | 		if ($element['nom_sel_nn'] != 0) {
 | 
        
           | 1622 | aurelien | 480 | 			$lien = $this->getUrlEflore($element['nom_referentiel'], $element['nom_sel_nn'], 'cel');
 | 
        
           | 506 | jpm | 481 | 		}
 | 
        
           | 416 | aurelien | 482 | 		return $lien;
 | 
        
           |  |  | 483 | 	}
 | 
        
           | 1338 | jpm | 484 |   | 
        
           | 416 | aurelien | 485 | 	private function creerDescription($obs, $item) {
 | 
        
           | 1330 | aurelien | 486 | 		$id_obs = $obs['id_observation'];
 | 
        
           | 528 | jpm | 487 | 		$famille = $obs['famille'];
 | 
        
           |  |  | 488 | 		$nom_saisi = $obs['nom_sel'];
 | 
        
           |  |  | 489 | 		$nom_retenu = $obs['nom_ret'];
 | 
        
           | 1338 | jpm | 490 | 		$auteur = $this->getIntituleAuteur($obs['courriel_utilisateur']);
 | 
        
           | 1330 | aurelien | 491 | 		$auteur_mail = $obs['courriel_utilisateur'];
 | 
        
           |  |  | 492 | 		$mots_cles_obs = $obs['mots_cles_texte'];
 | 
        
           |  |  | 493 | 		$lien_correction = sprintf($this->config['settings']['phpEditUrlTpl'], $obs['id_observation']);
 | 
        
           | 2560 | aurelien | 494 |   | 
        
           |  |  | 495 | 		$lieu =  Cel::formaterZoneGeoEtCodePourAffichage($obs).' > '.$obs['lieudit'].' > '.$obs['station'];
 | 
        
           | 528 | jpm | 496 | 		$milieu = $obs['milieu'];
 | 
        
           | 1330 | aurelien | 497 | 		$coordonnees = ($this->etreNull($obs['latitude']) && $this->etreNull($obs['longitude'])) ? '' : $obs['latitude'].'/'.$obs['longitude'];
 | 
        
           | 529 | jpm | 498 | 		$commentaire = $obs['commentaire'];
 | 
        
           | 1464 | aurelien | 499 | 		$date_observation = ($obs['date_observation'] != '0000-00-00 00:00:00') ? $this->formaterDate($obs['date_observation'], '%A %d %B %Y') : '';
 | 
        
           | 528 | jpm | 500 | 		$date_transmission = $this->formaterDate($obs['date_transmission']);
 | 
        
           |  |  | 501 | 		$date_modification = $this->formaterDate($obs['date_modification']);
 | 
        
           |  |  | 502 | 		$date_creation = $this->formaterDate($obs['date_creation']);
 | 
        
           |  |  | 503 | 		$transmission = $obs['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
 | 
        
           | 1338 | jpm | 504 |   | 
        
           | 528 | jpm | 505 | 		$description = '<h2>'."Observation #$id_obs de $nom_saisi".'</h2>'.
 | 
        
           | 416 | aurelien | 506 | 			'<ul>'.
 | 
        
           | 528 | jpm | 507 | 			'<li>'.'Famille : '.$famille.'</li>'.
 | 
        
           |  |  | 508 | 			'<li>'.'Nom saisi : '.$nom_saisi.'</li>'.
 | 
        
           |  |  | 509 | 			'<li>'.'Nom retenu : '.$nom_retenu.'</li>'.
 | 
        
           |  |  | 510 | 			'<li>'.'Observée le : '.$date_observation.'</li>'.
 | 
        
           | 2400 | jpm | 511 | 			'<li>'.'Lieu : '.$lieu.'</li>'.
 | 
        
           | 528 | jpm | 512 | 			'<li>'.'Milieu : '.$milieu.'</li>'.
 | 
        
           |  |  | 513 | 			(($this->etreFluxAdmin()) ? '<li>Coordonnées (Lat/Long) : '.$coordonnees.'</li>' : '').
 | 
        
           | 2272 | aurelien | 514 | 			'<li>'.'Commentaire : '.$this->nePasInterpreterXml($commentaire).'</li>'.
 | 
        
           |  |  | 515 | 			'<li>'.'Mots-clés : '.$this->nePasInterpreterXml($mots_cles_obs).'</li>'.
 | 
        
           | 528 | jpm | 516 | 			(($this->etreFluxAdmin()) ? '<li>Transmis (= public) : '.$transmission.'</li>' : '').
 | 
        
           |  |  | 517 | 			'<li>Modifiée le : '.$date_modification.'</li>'.
 | 
        
           |  |  | 518 | 			'<li>Créée le : '.$date_creation.'</li>'.
 | 
        
           | 813 | delphine | 519 | 			'<li>'.'Par : '.
 | 
        
           |  |  | 520 | 				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
 | 
        
           |  |  | 521 | 			'</li>'.
 | 
        
           | 1550 | aurelien | 522 | 			$this->creerDescriptionChampsEtendus($obs, $item).
 | 
        
           | 528 | jpm | 523 | 			(($this->etreFluxAdmin()) ? '<li><a href="'.$lien_correction.'">Corriger cette observation</a></li>' : '').
 | 
        
           | 416 | aurelien | 524 | 			'</ul>';
 | 
        
           |  |  | 525 | 		$description = $this->nettoyerTexte($description);
 | 
        
           |  |  | 526 | 		return $description;
 | 
        
           |  |  | 527 | 	}
 | 
        
           | 2143 | jpm | 528 |   | 
        
           | 1550 | aurelien | 529 | 	private function creerDescriptionChampsEtendus($obs, $item) {
 | 
        
           |  |  | 530 | 		$champs_etendus = '';
 | 
        
           | 1571 | aurelien | 531 | 		foreach($obs['obs_etendue'] as $cle => &$champ) {
 | 
        
           | 2403 | aurelien | 532 | 			if($this->doitAfficherChampEtendu($champ->cle, $this->catalogue_cles_labels_champs_etendus)) {
 | 
        
           |  |  | 533 | 				if(isset($this->catalogue_cles_labels_champs_etendus[$champ->cle])) {
 | 
        
           |  |  | 534 | 					$label = $this->catalogue_cles_labels_champs_etendus[$champ->cle]['label'];
 | 
        
           |  |  | 535 | 				} else {
 | 
        
           | 2446 | jpm | 536 | 					$label = preg_replace("/(?<=\\w)(?=[A-Z])/"," $1", $champ->cle);
 | 
        
           | 2403 | aurelien | 537 | 					$label = trim($label);
 | 
        
           |  |  | 538 | 					$label = $label;
 | 
        
           |  |  | 539 | 				}
 | 
        
           |  |  | 540 | 				$champs_etendus .= '<li>'.$this->nePasInterpreterXml($label.' : '.$champ->valeur).' </li>';
 | 
        
           | 2394 | aurelien | 541 | 			}
 | 
        
           | 1550 | aurelien | 542 | 		}
 | 
        
           | 2143 | jpm | 543 |   | 
        
           | 1571 | aurelien | 544 | 		if($champs_etendus != '') {
 | 
        
           |  |  | 545 | 			$champs_etendus = '<li> Champs supplémentaires : <ul>'.$champs_etendus.'</ul></li>';
 | 
        
           |  |  | 546 | 		}
 | 
        
           | 2403 | aurelien | 547 |   | 
        
           | 1550 | aurelien | 548 | 		return $champs_etendus;
 | 
        
           |  |  | 549 | 	}
 | 
        
           | 2446 | jpm | 550 |   | 
        
           | 2403 | aurelien | 551 | 	private function doitAfficherChampEtendu($cle, $catalogue) {
 | 
        
           |  |  | 552 | 		// Suppression des nombres à la fin de la chaines dans le cas des clés
 | 
        
           |  |  | 553 | 		// "multiples" et mise en minuscule
 | 
        
           |  |  | 554 | 		$cle_simplifiee = preg_replace("/\d+$/","",$cle);
 | 
        
           |  |  | 555 | 		$cle_simplifiee = strtolower(rtrim($cle_simplifiee, ":"));
 | 
        
           | 2446 | jpm | 556 |   | 
        
           | 2403 | aurelien | 557 | 		// Un champ est affichable s'il n'est pas au catalogue ou bien
 | 
        
           |  |  | 558 | 		// s'il n'est pas marqué privé dans celui-ci
 | 
        
           |  |  | 559 | 		$affichable = !isset($catalogue[$cle_simplifiee]) ||
 | 
        
           |  |  | 560 | 						$catalogue[$cle_simplifiee]['options']['prive'] != 1;
 | 
        
           | 2446 | jpm | 561 |   | 
        
           |  |  | 562 | 		return $affichable;
 | 
        
           | 2403 | aurelien | 563 | 	}
 | 
        
           | 1338 | jpm | 564 |   | 
        
           | 416 | aurelien | 565 | 	private function creerCategorie($element) {
 | 
        
           |  |  | 566 | 		$categorie = '';
 | 
        
           |  |  | 567 | 		$categorie = 'Observation';
 | 
        
           |  |  | 568 | 		$categorie = $this->nettoyerTexte($categorie);
 | 
        
           |  |  | 569 | 		return $categorie;
 | 
        
           |  |  | 570 | 	}
 | 
        
           | 1338 | jpm | 571 |   | 
        
           | 416 | aurelien | 572 | 	private function etreFluxAdmin() {
 | 
        
           | 715 | delphine | 573 | 		return (isset($_GET['admin']) && $_GET['admin'] == '1') ? true : false;
 | 
        
           | 416 | aurelien | 574 | 	}
 | 
        
           | 1338 | jpm | 575 |   | 
        
           | 416 | aurelien | 576 | 	private function creerUrlService() {
 | 
        
           |  |  | 577 | 		$url_service = $this->getUrlServiceBase();
 | 
        
           | 528 | jpm | 578 | 		if (count($_GET) > 0) {
 | 
        
           | 637 | jpm | 579 | 			$parametres_get = array();
 | 
        
           |  |  | 580 | 			foreach ($_GET as $cle => $valeur) {
 | 
        
           |  |  | 581 | 				$parametres_get[] = $cle.'='.$valeur;
 | 
        
           |  |  | 582 | 			}
 | 
        
           |  |  | 583 | 			$url_service .= '?'.implode('&', $parametres_get);
 | 
        
           | 416 | aurelien | 584 | 		}
 | 
        
           |  |  | 585 | 		return $url_service;
 | 
        
           |  |  | 586 | 	}
 | 
        
           | 2143 | jpm | 587 |   | 
        
           |  |  | 588 | 	private function getIntituleAuteur($courriel) {
 | 
        
           | 1410 | aurelien | 589 | 		$courriel = strtolower($courriel);
 | 
        
           | 2143 | jpm | 590 | 		if(isset($this->auteurs[$courriel])) {
 | 
        
           | 1410 | aurelien | 591 | 			$intitule = $this->auteurs[$courriel];
 | 
        
           |  |  | 592 | 		} else {
 | 
        
           |  |  | 593 | 			$intitule = $courriel;
 | 
        
           | 2143 | jpm | 594 | 		}
 | 
        
           |  |  | 595 | 		return $intitule;
 | 
        
           | 1338 | jpm | 596 | 	}
 | 
        
           |  |  | 597 | }
 |