Subversion Repositories eFlore/Applications.cel

Rev

Rev 970 | Rev 1338 | 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
13
 *
14
 * Les paramêtres :
15
 *  - "start" indique le numéro du premier item à afficher
16
 *  - "limit" nombre d'items à afficher
17
 *
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 {
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(
1330 aurelien 34
		'utilisateur' => 'courriel_utilisateur',
970 aurelien 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');
416 aurelien 41
 
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 = '';
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;
416 aurelien 58
 
525 jpm 59
			// Récupération de la liste des flux
60
			$this->chargerListeDesFlux();
61
 
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
					}
76
 
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);
81
 
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
		}
92
 
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
	}
99
 
100
	private function getUrlBase() {
637 jpm 101
		$url_base = sprintf($this->config['settings']['baseURLAbsolu'], get_class($this).'/');
416 aurelien 102
		return $url_base;
103
	}
104
 
105
	private function getUrlServiceBase() {
528 jpm 106
		$url_service = $this->getUrlBase().implode('/', $this->parametres_origines);
416 aurelien 107
		return $url_service;
108
	}
109
 
110
	private function traiterNomService($nom) {
111
		$nom = strtolower($nom);
112
		return $nom;
113
	}
114
 
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
	}
121
 
122
	private function getTypeMime() {
123
		$mime = '';
124
		$test = isset($this->format) ? $this->format : $this->service;
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
	}
141
 
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
	}
153
 
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
	}
168
 
169
	private function chargerListeDesFlux() {
170
		$this->setFlux('par-defaut', 'Flux de syndication des observations publiques du CEL',
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
	}
182
 
183
	private function getServiceListeDesFlux() {
184
		return $this->flux;
185
	}
186
 
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
		}
200
 
201
		$this->squelette = $this->squelette_dossier.'opml.tpl.xml';
202
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
203
		return $contenu;
204
	}
205
 
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 ";
213
 
214
		$elements = $this->executerRequete($requete);
215
 
216
		// Création du contenu
217
		$contenu = $this->executerService($elements);
218
		return $contenu;
219
	}
220
 
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 {
743 delphine 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
	}
238
 
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 {
743 delphine 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
	}
256
 
715 delphine 257
	private function getServiceMultiCriteres() {
258
		$contenu = '';
259
		if (isset($_GET['debut'])) $this->start = $_GET['debut'];
260
		if (isset($_GET['limite'])) $this->limite = $_GET['limite'];
261
 
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 ');
715 delphine 266
 
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);
274
			}
275
		}
276
		$requete = rtrim($requete, 'AND ');
814 delphine 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
		}
289
 
290
        return $contenu;
291
	}
292
 
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;
306
					case "date_observation" :
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;
715 delphine 314
					case "nom_ret" :
315
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
316
						$requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR nom_sel LIKE "%'.
317
							$nom_valeur[1].'%") AND '; break;
1330 aurelien 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
	}
326
 
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
	}
346
 
347
	private function traiterCriteresMultiples($tableau_criteres) {
348
		$tableau_criteres_pour_bdd = array();
349
 
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
	}
357
 
358
	private function creerSousRequeteRechercheGenerale($chaine_requete) {
359
		$requete = '';
360
		if (trim($chaine_requete) != '') {
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
	}
381
 
382
	private function estUneRechercheGenerale() {
383
		return isset($_GET['recherche']);
384
	}
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) {
1330 aurelien 392
				$identifiants[$element['ce_utilisateur']] = $element['ce_utilisateur'];
790 delphine 393
			}
394
			$this->auteurs = $this->creerAuteurs($identifiants);
395
			foreach ($elements as $element) {
416 aurelien 396
				$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
397
			}
398
 
399
			// Création du contenu à partir d'un template PHP
400
			if (isset($this->squelette)) {
401
				$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
402
			}
403
		}
404
		return $contenu;
405
	}
406
 
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';
416 aurelien 422
		return $donnees;
423
	}
424
 
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
	}
442
 
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'].')';
446
		$utilisateur = $obs['prenom_utilisateur'].' '.$obs['nom_utilisateur'];
416 aurelien 447
		$titre = "$nom_plante à $lieu par $utilisateur";
448
		$titre = $this->nettoyerTexte($titre);
449
		return $titre;
450
	}
451
 
452
	private function creerGuidItem($element) {
1330 aurelien 453
		$guid = sprintf($this->config['settings']['guidObsTpl'], $element['id_observation']);
416 aurelien 454
		return $guid;
455
	}
456
 
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
	}
464
 
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'];
1330 aurelien 470
		$auteur = $obs['prenom_utilisateur'].' '.$obs['nom_utilisateur'];
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';
483
 
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
	}
506
 
507
	private function creerCategorie($element) {
508
		$categorie = '';
509
		$categorie = 'Observation';
510
		$categorie = $this->nettoyerTexte($categorie);
511
		return $categorie;
512
	}
513
 
514
	private function etreFluxAdmin() {
715 delphine 515
		return (isset($_GET['admin']) && $_GET['admin'] == '1') ? true : false;
416 aurelien 516
	}
517
 
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
	}
529
}