Subversion Repositories eFlore/Applications.cel

Rev

Rev 1330 | Rev 1361 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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