Subversion Repositories eFlore/Applications.cel

Rev

Rev 813 | Rev 942 | 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(
741 delphine 34
		'utilisateur' => 'identifiant',
715 delphine 35
		'commune' => 'location',
741 delphine 36
		'dept' => 'id_location',
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').' * '.
814 delphine 209
			'FROM cel_inventory WHERE identifiant like "%@%" '.
210
			(($this->etreFluxAdmin()) ? '' : 'AND 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();
223
		$infos[0]['num_nom_sel'] = '';
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();
241
		$infos[0]['num_nom_sel'] = '';
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').' * '.
264
				'FROM cel_inventory '.
814 delphine 265
				'WHERE identifiant like "%@%" 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  :
715 delphine 278
			'date_modification DESC, location ASC').' '.
279
				"LIMIT $this->start,$this->limit ";
280
 
281
		$elements = $this->executerRequete($requete);//echo $requete;
282
 
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;
312
					case "nom_ret" :
313
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
314
						$requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR nom_sel LIKE "%'.
315
							$nom_valeur[1].'%") AND '; break;
316
					case "mots-cles" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]); break;
317
					default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
318
				}
319
			}
320
		}
321
		$requete = rtrim($requete,' AND ');
322
		return $requete;
323
	}
324
 
325
	private function creerSousRequeteMotsCles($mot_cle) {
326
		$requete = 'mots_cles like "inexistant" OR';
741 delphine 327
		if (preg_match('/.*OU.*/', $mot_cle)) {
715 delphine 328
			$requete = $this->creerSousRequeteMotsClesOu($mot_cle);
329
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
330
			$requete = $this->creerSousRequeteMotsClesEt($mot_cle);
331
		} else {
332
			// Construction de la requête
333
			$prerequete = 	'SELECT * '.
334
				'FROM cel_mots_cles_obs '.
335
				'WHERE cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle($mot_cle));
336
			$elements = $this->executerRequete($prerequete);
337
			if ($elements != false && count($elements) > 0) {
338
				$requete = '';
339
				foreach ($elements as $occurence) {
340
					$requete .= '(mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" AND identifiant = '.
341
						$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
342
				}
343
			}
344
		}
345
		$requete = rtrim($requete,' OR ').' AND ';
346
		return $requete;
347
	}
348
 
349
	private function creerSousRequeteMotsClesOu($mot_cle) {
350
		$requete = 'mots_cles like "inexistant" OR';
741 delphine 351
		$tab_mots_cles = explode('OU', $mot_cle);
715 delphine 352
		$where = '';
353
		foreach ($tab_mots_cles as $mot) {
741 delphine 354
			$where .= 'cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle(trim($mot))).' OR ';
715 delphine 355
		}
356
		$where = rtrim($where,' OR ');
357
 
358
		// Construction de la requête
359
		$prerequete = 	"SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles_obs WHERE $where ";
360
		$elements = $this->executerRequete($prerequete);//print_r($elements);
361
		if ($elements != false && count($elements) > 0) {
362
			$requete = '';
363
			foreach ($elements as $occurence) {
364
				$requete .= '(mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" AND identifiant = '.
365
					$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
366
			}
367
		}
368
		return $requete;
369
	}
370
 
371
	private function creerSousRequeteMotsClesEt($mot_cle) {
372
		$requete = 'mots_cles like "inexistant" OR';
373
		$where = '';
374
		$champs = 'a.cmc_id_proprietaire , ';
375
		$table = '';
376
		$i = "a"; $j = "a";
377
 
378
		$tab_mots_cles = explode("ET", $mot_cle);
379
		foreach ($tab_mots_cles as $mot) {
380
			$champs .= "$i.cmc_id_mot_cle_utilisateur as $i , ";
381
			$table .= "cel_mots_cles_obs $i , ";
741 delphine 382
			$where .= "$i.cmc_id_mot_cle_general = ".$this->bdd->quote($this->encoderMotCle(trim($mot))).' AND ';
715 delphine 383
			if ($i !== "a") {
384
				$where .= " $i.cmc_id_proprietaire = ".$j.".cmc_id_proprietaire AND ";
385
				$j++;
386
			}
387
			$i++;
388
		}
389
		$where = rtrim($where,' AND '); $champs = rtrim($champs,' , '); $table = rtrim($table,' , ');
390
 
391
		// Construction de la requête
392
		$prerequete = 	"SELECT $champs FROM $table WHERE $where ";
393
		$elements = $this->executerRequete($prerequete);//print_r($elements);
394
		if ($elements != false && count($elements) > 0) {
395
			$requete = '';
396
			foreach ($elements as $occurence) {
397
				$requete = ' (';
398
				for ($j = 'a'; $j < $i; $j++) {
399
					$requete .= 'mots_cles like "%'.$occurence[$j].'%" AND ';
400
				}
401
				$requete .= ' identifiant = '.$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
402
			}
403
		}
404
		return $requete;
405
	}
406
 
407
	private function traiterCriteresMultiples($tableau_criteres) {
408
		$tableau_criteres_pour_bdd = array();
409
 
410
		foreach($tableau_criteres as $nom_critere => $valeur_critere) {
411
			if (isset($this->criteres[$nom_critere])) {
412
				$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
413
			}
414
		}
415
		return $tableau_criteres_pour_bdd;
416
	}
417
 
418
	private function creerSousRequeteRechercheGenerale($chaine_requete) {
419
		$requete = '';
420
		if (trim($chaine_requete) != '') {
421
			$chaine_requete = strtolower($chaine_requete);
422
			$chaine_requete = str_replace(' ', '_', $chaine_requete);
423
			$requete = ' ('.
424
				'nom_ret LIKE "'.$chaine_requete.'%"'.
425
				' OR '.
426
				'nom_sel LIKE "'.$chaine_requete.'%"'.
427
				' OR '.
428
				'location LIKE "'.$chaine_requete.'%" '.
429
				' OR '.
430
				'id_location LIKE "'.$chaine_requete.'%" '.
431
				' OR '.
432
				'identifiant LIKE "'.$chaine_requete.'%" '.
433
				') ';
434
		}
435
		return $requete;
436
	}
437
 
438
	private function estUneRechercheGenerale() {
439
		return isset($_GET['recherche']);
440
	}
441
 
416 aurelien 442
	private function executerService($elements) {
443
		$contenu = '';
444
		if (is_array($elements)) {
445
			// Prétraitement des données
446
			$donnees = $this->construireDonneesCommunesAuFlux($elements);
447
			foreach ($elements as $element) {
790 delphine 448
				$identifiants[$element['identifiant']] = $element['identifiant'];
449
			}
450
			$this->auteurs = $this->creerAuteurs($identifiants);
451
			foreach ($elements as $element) {
416 aurelien 452
				$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
453
			}
454
 
455
			// Création du contenu à partir d'un template PHP
456
			if (isset($this->squelette)) {
457
				$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
458
			}
459
		}
460
		return $contenu;
461
	}
462
 
463
	private function construireDonneesCommunesAuFlux($observations) {
464
		$donnees = $this->getFlux($this->service);
465
		$donnees['guid'] = $this->getUrlServiceBase();
741 delphine 466
		$donnees['titre'] = 'Flux des observations du CEL';
416 aurelien 467
		$donnees['lien_service'] = $this->creerUrlService();
715 delphine 468
		$donnees['lien_cel'] = $this->config['settings']['baseURLAbsolu'];
416 aurelien 469
		$donnees['editeur'] = $this->config['settings']['editeur'];
470
		$derniere_info_en_date = reset($observations);
471
		$date_modification_timestamp = strtotime($derniere_info_en_date['date_modification']);
472
		$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
473
		$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
474
		$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
475
		$donnees['annee_courante'] = date('Y');
476
		$donnees['generateur'] = 'CEL - Jrest - CelSyndicationObservation';
715 delphine 477
		$donnees['generateur_version'] = (preg_match('/([0-9]+)/', '$Revision$', $match)) ?  $match[1] : '0';
416 aurelien 478
		return $donnees;
479
	}
480
 
481
	private function construireDonneesCommunesAuxItems($observation) {
482
		$item = array();
528 jpm 483
		$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($observation['date_modification']);
416 aurelien 484
		$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp);
485
		$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
486
		$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
487
		$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
488
		$item['date_creation_simple'] = strftime('%A %d %B %Y à %H:%M', strtotime($observation['date_creation']));
489
		$item['titre'] = $this->creerTitre($observation);
490
		$item['guid'] = $this->creerGuidItem($observation);
491
		$item['lien'] = $this->creerLienItem($observation);
492
		$item['categorie'] = $this->creerCategorie($item);
528 jpm 493
		$item['description'] = $this->creerDescription($this->protegerCaracteresHtmlDansChamps($observation), $item);
494
		$item['description_encodee'] = htmlspecialchars($this->creerDescription($observation, $item));
790 delphine 495
		$item['modifier_par'] = $this->auteurs[$observation['identifiant']];
416 aurelien 496
		return $item;
497
	}
498
 
499
	private function creerTitre($obs) {
500
		$nom_plante = $obs['nom_sel'].' [nn'.$obs['num_nom_sel'].']';
501
		$lieu = $obs['location'].' ('.$obs['id_location'].')';
790 delphine 502
		$utilisateur = $this->auteurs[$obs['identifiant']];
416 aurelien 503
		$titre = "$nom_plante à $lieu par $utilisateur";
504
		$titre = $this->nettoyerTexte($titre);
505
		return $titre;
506
	}
507
 
508
	private function creerGuidItem($element) {
509
		$guid = sprintf($this->config['settings']['guidObsTpl'], 'obs'.$element['id']);
510
		return $guid;
511
	}
512
 
513
	private function creerLienItem($element) {
506 jpm 514
		$lien = null;
515
		if ($element['num_nom_sel'] != 0) {
585 jpm 516
			$lien = sprintf($this->config['settings']['efloreUrlTpl'], urlencode($element['num_nom_sel']), 'cel');
506 jpm 517
		}
416 aurelien 518
		return $lien;
519
	}
520
 
521
	private function creerDescription($obs, $item) {
568 jpm 522
		$id_obs = $obs['id'];
528 jpm 523
		$famille = $obs['famille'];
524
		$nom_saisi = $obs['nom_sel'];
525
		$nom_retenu = $obs['nom_ret'];
790 delphine 526
		$auteur = $this->auteurs[$obs['identifiant']];
813 delphine 527
		$auteur_mail = $obs['identifiant'];
528 jpm 528
		$mots_cles_obs = $this->decoderMotsClesObs($obs['identifiant'], $obs['mots_cles']);
416 aurelien 529
		$lien_correction = sprintf($this->config['settings']['phpEditUrlTpl'], $obs['id']);
528 jpm 530
		$lieu = $obs['location'].' ('.$obs['id_location'].') > '.$obs['lieudit'].' > '.$obs['station'];
531
		$milieu = $obs['milieu'];
532
		$coordonnees = ($this->etreNull($obs['coord_x']) && $this->etreNull($obs['coord_y'])) ? '' : $obs['coord_x'].'/'.$obs['coord_y'];
529 jpm 533
		$commentaire = $obs['commentaire'];
528 jpm 534
		$date_observation = $this->formaterDate($obs['date_observation'], '%A %d %B %Y');
535
		$date_transmission = $this->formaterDate($obs['date_transmission']);
536
		$date_modification = $this->formaterDate($obs['date_modification']);
537
		$date_creation = $this->formaterDate($obs['date_creation']);
538
		$transmission = $obs['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
539
 
540
		$description = '<h2>'."Observation #$id_obs de $nom_saisi".'</h2>'.
416 aurelien 541
			'<ul>'.
528 jpm 542
			'<li>'.'Famille : '.$famille.'</li>'.
543
			'<li>'.'Nom saisi : '.$nom_saisi.'</li>'.
544
			'<li>'.'Nom retenu : '.$nom_retenu.'</li>'.
545
			'<li>'.'Observée le : '.$date_observation.'</li>'.
546
			'<li>'.'Lieu : '.$lieu.'</li>'.
547
			'<li>'.'Milieu : '.$milieu.'</li>'.
548
			(($this->etreFluxAdmin()) ? '<li>Coordonnées (Lat/Long) : '.$coordonnees.'</li>' : '').
549
			'<li>'.'Commentaire : '.$commentaire.'</li>'.
550
			'<li>'.'Mots-clés : '.implode(', ', $mots_cles_obs).'</li>'.
551
			(($this->etreFluxAdmin()) ? '<li>Transmis (= public) : '.$transmission.'</li>' : '').
552
			'<li>Modifiée le : '.$date_modification.'</li>'.
553
			'<li>Créée le : '.$date_creation.'</li>'.
813 delphine 554
			'<li>'.'Par : '.
555
				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
556
			'</li>'.
528 jpm 557
			(($this->etreFluxAdmin()) ? '<li><a href="'.$lien_correction.'">Corriger cette observation</a></li>' : '').
416 aurelien 558
			'</ul>';
559
		$description = $this->nettoyerTexte($description);
560
		return $description;
561
	}
562
 
563
	private function creerCategorie($element) {
564
		$categorie = '';
565
		$categorie = 'Observation';
566
		$categorie = $this->nettoyerTexte($categorie);
567
		return $categorie;
568
	}
569
 
570
	private function etreFluxAdmin() {
715 delphine 571
		return (isset($_GET['admin']) && $_GET['admin'] == '1') ? true : false;
416 aurelien 572
	}
573
 
574
	private function creerUrlService() {
575
		$url_service = $this->getUrlServiceBase();
528 jpm 576
		if (count($_GET) > 0) {
637 jpm 577
			$parametres_get = array();
578
			foreach ($_GET as $cle => $valeur) {
579
				$parametres_get[] = $cle.'='.$valeur;
580
			}
581
			$url_service .= '?'.implode('&amp;', $parametres_get);
416 aurelien 582
		}
583
		return $url_service;
584
	}
585
}