Subversion Repositories eFlore/Applications.cel

Rev

Rev 742 | Rev 790 | 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;
31
	private $flux = array();
715 delphine 32
	private $criteres = array(
741 delphine 33
		'utilisateur' => 'identifiant',
715 delphine 34
		'commune' => 'location',
741 delphine 35
		'dept' => 'id_location',
715 delphine 36
		'taxon' => 'nom_ret',
37
		'commentaire' => 'commentaire',
38
		'date' => 'date_observation',
39
		'projet' => 'mots-cles');
416 aurelien 40
 
41
	/**
42
	 * Méthode appelée avec une requête de type GET.
43
	 */
44
	public function getElement($params = array()) {
45
		// Initialisation des variables
528 jpm 46
		$this->parametres_origines = $params;
416 aurelien 47
		$info = array();
48
		$contenu = '';
49
 
536 jpm 50
		if (! $this->etreFluxAdmin() || $this->authentifierAdmin()) {
525 jpm 51
			// Pré traitement des paramêtres
52
			$pour_bdd = false;
53
			$p = $this->traiterParametres(array('service', 'format'), $params, $pour_bdd);
54
			extract($p);
55
			$this->parametres = $params;
56
			$this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
416 aurelien 57
 
525 jpm 58
			// Récupération de la liste des flux
59
			$this->chargerListeDesFlux();
60
 
61
			// Chargement du bon type de service demandé
62
			if (isset($service)) {
63
				$this->service = $this->traiterNomService($service);
64
				$methode = $this->getNomMethodeService();
65
				if (method_exists($this, $methode)) {
66
					if (isset($format) && preg_match('/^(?:rss1|rss2|atom)$/i', $format)) {
67
						// Mise en minuscule de l'indication du format
68
						$this->format = strtolower($format);
69
						// Définition du fichier squelette demandé
70
						$this->squelette = $this->squelette_dossier.$this->format.'.tpl.xml';
71
					} else if (isset($this->flux[$this->service])) {
72
						$this->format = '';
73
						$this->messages[] = "Le service CEL Syndication nécessite d'indiquer en second paramètre le format : rss1, rss2 ou atom.";
74
					}
75
 
76
					if (!isset($this->flux[$this->service]) || isset($this->format)) {
77
						// Suppression des paramêtres inutile pour le reste des méthodes
78
						array_shift($this->parametres);
79
						array_shift($this->parametres);
80
 
81
						// Récupération du contenu à renvoyer
82
						$contenu = $this->$methode();
83
					}
84
				} else {
85
					$this->messages[] = "Le type d'information demandé '$this->service' n'est pas disponible.";
416 aurelien 86
				}
87
			} else {
525 jpm 88
				$this->messages[] = "Le service CEL Syndication Observation nécessite d'indiquer en premier paramètre le type d'information demandé.";
416 aurelien 89
			}
90
		}
91
 
92
		// Envoie sur la sortie standard
93
		$encodage = 'utf-8';
94
		$mime = $this->getTypeMime();
95
		$formatage_json = $this->getFormatageJson();
96
		$this->envoyer($contenu, $mime, $encodage, $formatage_json);
97
	}
98
 
99
	private function getUrlBase() {
637 jpm 100
		$url_base = sprintf($this->config['settings']['baseURLAbsolu'], get_class($this).'/');
416 aurelien 101
		return $url_base;
102
	}
103
 
104
	private function getUrlServiceBase() {
528 jpm 105
		$url_service = $this->getUrlBase().implode('/', $this->parametres_origines);
416 aurelien 106
		return $url_service;
107
	}
108
 
109
	private function traiterNomService($nom) {
110
		$nom = strtolower($nom);
111
		return $nom;
112
	}
113
 
114
	private function getNomMethodeService() {
115
		$methode = '';
116
		$service_formate = str_replace(' ', '', ucwords(implode(' ', explode('-', $this->service))));
117
		$methode = 'getService'.$service_formate;
118
		return $methode;
119
	}
120
 
121
	private function getTypeMime() {
122
		$mime = '';
123
		$test = isset($this->format) ? $this->format : $this->service;
124
		switch ($test) {
125
			case 'atom' :
126
				$mime = 'application/atom+xml';
127
				break;
128
			case 'rss1' :
129
			case 'rss2' :
130
				$mime = 'application/rss+xml';
131
				break;
132
			case 'opml' :
133
				$mime = 'text/x-opml';
134
				break;
135
			default:
136
				$mime = 'text/html';
137
		}
138
		return $mime;
139
	}
140
 
141
	private function getFormatageJson() {
142
		$json = false;
143
		switch ($this->service) {
144
			case 'liste-des-flux' :
145
				$json = true;
146
				break;
147
			default:
148
				$json = false;
149
		}
150
		return $json;
151
	}
152
 
153
	private function getFlux($nom) {
154
		return isset($this->flux[$nom]) ? $this->flux[$nom] : array();
155
	}
156
 
157
	private function setFlux($nom, $titre, $description) {
158
		$url_base = $this->getUrlBase();
159
		$formats = array('atom', 'rss2', 'rss1');
160
		$flux = array();
161
		foreach ($formats as $format) {
162
			$url = $url_base.$nom.'/'.$format;
163
			$flux[$format] = $url;
164
		}
165
		$this->flux[$nom] = array('titre' => $titre, 'description' => $description, 'urls' => $flux);
166
	}
167
 
168
	private function chargerListeDesFlux() {
169
		$this->setFlux('par-defaut', 'Flux de syndication des observations publiques du CEL',
170
			'Ce flux fournit des informations sur les observations du CEL.');
742 delphine 171
		$this->setFlux('par-mots-cles', 'Flux de syndication obsolète',
172
			"Ce flux est désormais accessible via le flux multicriteres/atom/M?tag='mot-cle'.");
173
		$this->setFlux('par-commune','Flux de syndication obsolète',
174
			"Ce flux  est désormais accessible via le flux multicriteres/atom/M?commune='commune'.");
175
		$this->setFlux('multicriteres','Flux de syndication des nouvelles observations publiques du CEL '.
176
			'filtrées par un ou plusieurs critères',
177
			"Ce flux fournit des informations sur les nouvelles observations du CEL filtrées par ".
178
			"auteur (mail), commune (nom), departement (code postal), taxon (nom scientifique), commentaire, projet ".
179
			"et/ou date.");
416 aurelien 180
	}
181
 
182
	private function getServiceListeDesFlux() {
183
		return $this->flux;
184
	}
185
 
186
	private function getServiceOpml() {
187
		$donnees = array();
188
		$id = 1;
189
		foreach ($this->flux as $flux_nom => $flux){
190
			$info = array();
191
			$info['type'] = 'atom';
192
			$info['titre'] = $flux['titre'];
193
			$info['texte'] = "CEL - Obs - $flux_nom";
194
			$info['description'] = $flux['description'];
195
			$info['url_xml'] = $this->getUrlBase().$flux_nom.'/atom';
196
			$info['url_html'] = $this->config['settings']['aideCelUrl'].'FluxSyndication';
197
			$donnees['liste_flux'][] = $info;
198
		}
199
 
200
		$this->squelette = $this->squelette_dossier.'opml.tpl.xml';
201
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
202
		return $contenu;
203
	}
204
 
205
	private function getServiceParDefaut() {
206
		// Construction de la requête
715 delphine 207
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
416 aurelien 208
			'FROM cel_inventory '.
528 jpm 209
			(($this->etreFluxAdmin()) ? '' : 'WHERE transmission = 1 ').
715 delphine 210
			'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'date_modification DESC').' '.
416 aurelien 211
			"LIMIT $this->start,$this->limit ";
212
 
213
		$elements = $this->executerRequete($requete);
214
 
215
		// Création du contenu
216
		$contenu = $this->executerService($elements);
217
		return $contenu;
218
	}
219
 
220
	private function getServiceParMotsCles() {
743 delphine 221
		$infos=array();
222
		$infos[0]['num_nom_sel'] = '';
223
		$infos[0]['date_modification'] = '2011-06-28';
224
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
225
		$donnees['items'][0]['guid'] = 0;
226
		$donnees['items'][0]['description'] =  'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
227
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationObservation/multicriteres/atom?projet=';
228
		if (isset($this->parametres[0])) {
229
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
416 aurelien 230
		} else {
743 delphine 231
			$donnees['items'][0]['description'] .= '</b>';
416 aurelien 232
		}
743 delphine 233
		$donnees['items'][0]['titre'] = '';
234
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
416 aurelien 235
		return $contenu;
236
	}
237
 
238
	private function getServiceParCommune() {
743 delphine 239
		$infos=array();
240
		$infos[0]['num_nom_sel'] = '';
241
		$infos[0]['date_modification'] = '2011-06-28';
242
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
243
		$donnees['items'][0]['guid'] = 0;
244
		$donnees['items'][0]['description'] = 'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
245
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationObservation/multicriteres/atom?commune=';
246
		if (isset($this->parametres[0])) {
247
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
416 aurelien 248
		} else {
743 delphine 249
			$donnees['items'][0]['description'] .= '</b>';
416 aurelien 250
		}
743 delphine 251
		$donnees['items'][0]['titre'] = '';
252
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
416 aurelien 253
		return $contenu;
254
	}
255
 
715 delphine 256
	private function getServiceMultiCriteres() {
257
		$contenu = '';
258
		if (isset($_GET['debut'])) $this->start = $_GET['debut'];
259
		if (isset($_GET['limite'])) $this->limite = $_GET['limite'];
260
 
261
		// Construction de la requête
262
		$requete = (isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
263
				'FROM cel_inventory '.
264
				'WHERE transmission = 1 '.
265
			'	AND ';
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 ');
277
		$requete .= 'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  :
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
 
448
			foreach ($elements as $element) {
449
				$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
450
			}
451
 
452
			// Création du contenu à partir d'un template PHP
453
			if (isset($this->squelette)) {
454
				$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
455
			}
456
		}
457
		return $contenu;
458
	}
459
 
460
	private function construireDonneesCommunesAuFlux($observations) {
461
		$donnees = $this->getFlux($this->service);
462
		$donnees['guid'] = $this->getUrlServiceBase();
741 delphine 463
		$donnees['titre'] = 'Flux des observations du CEL';
416 aurelien 464
		$donnees['lien_service'] = $this->creerUrlService();
715 delphine 465
		$donnees['lien_cel'] = $this->config['settings']['baseURLAbsolu'];
416 aurelien 466
		$donnees['editeur'] = $this->config['settings']['editeur'];
467
		$derniere_info_en_date = reset($observations);
468
		$date_modification_timestamp = strtotime($derniere_info_en_date['date_modification']);
469
		$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
470
		$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
471
		$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
472
		$donnees['annee_courante'] = date('Y');
473
		$donnees['generateur'] = 'CEL - Jrest - CelSyndicationObservation';
715 delphine 474
		$donnees['generateur_version'] = (preg_match('/([0-9]+)/', '$Revision$', $match)) ?  $match[1] : '0';
416 aurelien 475
		return $donnees;
476
	}
477
 
478
	private function construireDonneesCommunesAuxItems($observation) {
479
		$item = array();
528 jpm 480
		$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($observation['date_modification']);
416 aurelien 481
		$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp);
482
		$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
483
		$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
484
		$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
485
		$item['date_creation_simple'] = strftime('%A %d %B %Y à %H:%M', strtotime($observation['date_creation']));
486
		$item['titre'] = $this->creerTitre($observation);
487
		$item['guid'] = $this->creerGuidItem($observation);
488
		$item['lien'] = $this->creerLienItem($observation);
489
		$item['categorie'] = $this->creerCategorie($item);
528 jpm 490
		$item['description'] = $this->creerDescription($this->protegerCaracteresHtmlDansChamps($observation), $item);
491
		$item['description_encodee'] = htmlspecialchars($this->creerDescription($observation, $item));
522 jpm 492
		$item['modifier_par'] = $this->creerAuteur($observation['identifiant'], $this->etreFluxAdmin());
416 aurelien 493
		return $item;
494
	}
495
 
496
	private function creerTitre($obs) {
497
		$nom_plante = $obs['nom_sel'].' [nn'.$obs['num_nom_sel'].']';
498
		$lieu = $obs['location'].' ('.$obs['id_location'].')';
522 jpm 499
		$utilisateur = $this->creerAuteur($obs['identifiant'], $this->etreFluxAdmin());
416 aurelien 500
		$titre = "$nom_plante à $lieu par $utilisateur";
501
		$titre = $this->nettoyerTexte($titre);
502
		return $titre;
503
	}
504
 
505
	private function creerGuidItem($element) {
506
		$guid = sprintf($this->config['settings']['guidObsTpl'], 'obs'.$element['id']);
507
		return $guid;
508
	}
509
 
510
	private function creerLienItem($element) {
506 jpm 511
		$lien = null;
512
		if ($element['num_nom_sel'] != 0) {
585 jpm 513
			$lien = sprintf($this->config['settings']['efloreUrlTpl'], urlencode($element['num_nom_sel']), 'cel');
506 jpm 514
		}
416 aurelien 515
		return $lien;
516
	}
517
 
518
	private function creerDescription($obs, $item) {
568 jpm 519
		$id_obs = $obs['id'];
528 jpm 520
		$famille = $obs['famille'];
521
		$nom_saisi = $obs['nom_sel'];
522
		$nom_retenu = $obs['nom_ret'];
523
		$auteur = $this->creerAuteur($obs['identifiant'], $this->etreFluxAdmin());
524
		$mots_cles_obs = $this->decoderMotsClesObs($obs['identifiant'], $obs['mots_cles']);
416 aurelien 525
		$lien_correction = sprintf($this->config['settings']['phpEditUrlTpl'], $obs['id']);
528 jpm 526
		$lieu = $obs['location'].' ('.$obs['id_location'].') > '.$obs['lieudit'].' > '.$obs['station'];
527
		$milieu = $obs['milieu'];
528
		$coordonnees = ($this->etreNull($obs['coord_x']) && $this->etreNull($obs['coord_y'])) ? '' : $obs['coord_x'].'/'.$obs['coord_y'];
529 jpm 529
		$commentaire = $obs['commentaire'];
528 jpm 530
		$date_observation = $this->formaterDate($obs['date_observation'], '%A %d %B %Y');
531
		$date_transmission = $this->formaterDate($obs['date_transmission']);
532
		$date_modification = $this->formaterDate($obs['date_modification']);
533
		$date_creation = $this->formaterDate($obs['date_creation']);
534
		$transmission = $obs['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
535
 
536
		$description = '<h2>'."Observation #$id_obs de $nom_saisi".'</h2>'.
416 aurelien 537
			'<ul>'.
528 jpm 538
			'<li>'.'Famille : '.$famille.'</li>'.
539
			'<li>'.'Nom saisi : '.$nom_saisi.'</li>'.
540
			'<li>'.'Nom retenu : '.$nom_retenu.'</li>'.
541
			'<li>'.'Observée le : '.$date_observation.'</li>'.
542
			'<li>'.'Lieu : '.$lieu.'</li>'.
543
			'<li>'.'Milieu : '.$milieu.'</li>'.
544
			(($this->etreFluxAdmin()) ? '<li>Coordonnées (Lat/Long) : '.$coordonnees.'</li>' : '').
545
			'<li>'.'Commentaire : '.$commentaire.'</li>'.
546
			'<li>'.'Mots-clés : '.implode(', ', $mots_cles_obs).'</li>'.
547
			(($this->etreFluxAdmin()) ? '<li>Transmis (= public) : '.$transmission.'</li>' : '').
548
			'<li>Modifiée le : '.$date_modification.'</li>'.
549
			'<li>Créée le : '.$date_creation.'</li>'.
550
			(($this->etreFluxAdmin()) ? '<li><a href="'.$lien_correction.'">Corriger cette observation</a></li>' : '').
416 aurelien 551
			'</ul>';
552
		$description = $this->nettoyerTexte($description);
553
		return $description;
554
	}
555
 
556
	private function creerCategorie($element) {
557
		$categorie = '';
558
		$categorie = 'Observation';
559
		$categorie = $this->nettoyerTexte($categorie);
560
		return $categorie;
561
	}
562
 
563
	private function etreFluxAdmin() {
715 delphine 564
		return (isset($_GET['admin']) && $_GET['admin'] == '1') ? true : false;
416 aurelien 565
	}
566
 
567
	private function creerUrlService() {
568
		$url_service = $this->getUrlServiceBase();
528 jpm 569
		if (count($_GET) > 0) {
637 jpm 570
			$parametres_get = array();
571
			foreach ($_GET as $cle => $valeur) {
572
				$parametres_get[] = $cle.'='.$valeur;
573
			}
574
			$url_service .= '?'.implode('&amp;', $parametres_get);
416 aurelien 575
		}
576
		return $url_service;
577
	}
578
}