Subversion Repositories eFlore/Applications.cel

Rev

Rev 715 | Rev 742 | 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.');
171
		$this->setFlux('par-mots-cles', 'Flux de syndication des observations publiques du CEL filtrées par mots clés',
172
			"Ce flux fournit des informations sur les observations du CEL filtrées par mots-clés. Il nécessite d'être
173
			paramétré en indiquant en dernier position de l'url le mot-clé à rechercher.");
174
		$this->setFlux('par-commune','Flux de syndication des observations publiques du CEL filtrées par commune',
175
			"Ce flux fournit des informations sur les observations du CEL filtrées par commune. Il nécessite d'être
176
			paramétré en indiquant en dernier position de l'url le nom de la commune à rechercher.");
177
	}
178
 
179
	private function getServiceListeDesFlux() {
180
		return $this->flux;
181
	}
182
 
183
	private function getServiceOpml() {
184
		$donnees = array();
185
		$id = 1;
186
		foreach ($this->flux as $flux_nom => $flux){
187
			$info = array();
188
			$info['type'] = 'atom';
189
			$info['titre'] = $flux['titre'];
190
			$info['texte'] = "CEL - Obs - $flux_nom";
191
			$info['description'] = $flux['description'];
192
			$info['url_xml'] = $this->getUrlBase().$flux_nom.'/atom';
193
			$info['url_html'] = $this->config['settings']['aideCelUrl'].'FluxSyndication';
194
			$donnees['liste_flux'][] = $info;
195
		}
196
 
197
		$this->squelette = $this->squelette_dossier.'opml.tpl.xml';
198
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
199
		return $contenu;
200
	}
201
 
202
	private function getServiceParDefaut() {
203
		// Construction de la requête
715 delphine 204
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
416 aurelien 205
			'FROM cel_inventory '.
528 jpm 206
			(($this->etreFluxAdmin()) ? '' : 'WHERE transmission = 1 ').
715 delphine 207
			'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'date_modification DESC').' '.
416 aurelien 208
			"LIMIT $this->start,$this->limit ";
209
 
210
		$elements = $this->executerRequete($requete);
211
 
212
		// Création du contenu
213
		$contenu = $this->executerService($elements);
214
		return $contenu;
215
	}
216
 
217
	private function getServiceParMotsCles() {
218
		$contenu = '';
219
		$mot_cle = $this->parametres[0];
220
 
221
		if (isset($mot_cle)) {
222
			$mot_cle_encode = $this->bdd->quote($this->encoderMotCle($mot_cle));
223
 
224
			// Construction de la requête
225
			$requete = 	'SELECT * '.
226
				'FROM cel_mots_cles_obs '.
227
				"WHERE cmc_id_mot_cle_general = $mot_cle_encode ";
228
			$elements = $this->executerRequete($requete);
229
 
230
			if ($elements != false && count($elements) > 0) {
231
				// Pré-construction du where de la requête
232
				$tpl_where = '(mots_cles LIKE "%%%s%%" AND identifiant = %s )';
233
				$requete_where = array();
234
				foreach ($elements as $occurence) {
235
					$requete_where[] = sprintf($tpl_where, $occurence['cmc_id_mot_cle_utilisateur'], $this->bdd->quote($occurence['cmc_id_proprietaire']));
236
				}
237
 
238
				// Construction de la requête
239
				$requete = 	'SELECT * '.
240
					'FROM cel_inventory '.
528 jpm 241
					'WHERE '.implode(" \nOR ", $requete_where).' '.
242
					'	'.(($this->etreFluxAdmin()) ? '' : 'AND transmission = 1 ').
715 delphine 243
					'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  :
244
						'date_modification, date_creation DESC').' '.
416 aurelien 245
					"LIMIT $this->start,$this->limit ";
246
				$elements = $this->executerRequete($requete);
247
 
248
				// Création du contenu
249
				$contenu = $this->executerService($elements);
250
			} else {
251
				$this->messages[] = "Aucune observation ne correspond à ce mot clé.";
252
			}
253
		} else {
254
			$this->messages[] = "Le service demandé nécessite d'indiquer un mot-clé en dernier paramêtre.";
255
		}
256
		return $contenu;
257
	}
258
 
259
	private function getServiceParCommune() {
260
		$contenu = '';
261
		$commune = $this->parametres[0];
262
		if (isset($commune)) {
263
			$commune = $this->bdd->quote($commune);
264
 
265
			// Construction de la requête
715 delphine 266
			$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
416 aurelien 267
				'FROM cel_inventory '.
528 jpm 268
				"WHERE location = $commune ".
269
				'	'.(($this->etreFluxAdmin()) ? '' : 'AND transmission = 1 ').
715 delphine 270
				'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'date_modification DESC, location ASC').' '.
416 aurelien 271
				"LIMIT $this->start,$this->limit ";
272
 
273
			$elements = $this->executerRequete($requete);
274
 
275
			// Création du contenu
276
			$contenu = $this->executerService($elements);
277
		} else {
278
			$this->messages[] = "Le service demandé nécessite d'indiquer une nom de commune en dernier paramêtre.";
279
		}
280
		return $contenu;
281
	}
282
 
715 delphine 283
	private function getServiceMultiCriteres() {
284
		$contenu = '';
285
		if (isset($_GET['debut'])) $this->start = $_GET['debut'];
286
		if (isset($_GET['limite'])) $this->limite = $_GET['limite'];
287
 
288
		// Construction de la requête
289
		$requete = (isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
290
				'FROM cel_inventory '.
291
				'WHERE transmission = 1 '.
292
			'	AND ';
293
 
294
		if ($this->estUneRechercheGenerale()) {
295
			$chaine_requete = $_GET['recherche'];
296
			$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
297
		} else {
298
			$criteres = $this->traiterCriteresMultiples($_GET) ;
299
			if (!empty($criteres)) {
300
				$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
301
			}
302
		}
303
		$requete = rtrim($requete, 'AND ');
304
		$requete .= 'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  :
305
			'date_modification DESC, location ASC').' '.
306
				"LIMIT $this->start,$this->limit ";
307
 
308
		$elements = $this->executerRequete($requete);//echo $requete;
309
 
310
		// Création du contenu
311
		if ($elements != false && count($elements) > 0) {
312
			$contenu = $this->executerService($elements);
313
		} else {
314
			$this->messages[] = "Aucune observation disponible.";
315
		}
316
 
317
        return $contenu;
318
	}
319
 
320
	private function creerSousRequeteRechercheParCriteres($criteres) {
321
		$requete = '';
322
		foreach ($criteres as $pair) {
323
			$nom_valeur = explode("=",$pair);
324
			if (sizeof($nom_valeur) != 0) {
325
				switch ($nom_valeur[0]) {
326
					case "ci_limite" : $this->limite = $this->bdd->quote($nom_valeur[1]); break;
327
					case "commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
328
						foreach($mots_comment_liste as $mot_comment) {
329
							$mot_comment = trim($mot_comment) ;
330
							$requete .= $nom_valeur[0].' LIKE '.$this->bdd->quote('%'.$mot_comment.'%').' AND ';
331
						}
332
						break;
333
					case "date_observation" :
334
						$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
335
						if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $nom_valeur[1], $matches)) {
336
							$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
337
						}
338
						$requete .= $nom_valeur[0].'='.$this->bdd->quote($nom_valeur[1]).' AND '; break;
339
					case "nom_ret" :
340
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
341
						$requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR nom_sel LIKE "%'.
342
							$nom_valeur[1].'%") AND '; break;
343
					case "mots-cles" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]); break;
344
					default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
345
				}
346
			}
347
		}
348
		$requete = rtrim($requete,' AND ');
349
		return $requete;
350
	}
351
 
352
	private function creerSousRequeteMotsCles($mot_cle) {
353
		$requete = 'mots_cles like "inexistant" OR';
741 delphine 354
		if (preg_match('/.*OU.*/', $mot_cle)) {
715 delphine 355
			$requete = $this->creerSousRequeteMotsClesOu($mot_cle);
356
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
357
			$requete = $this->creerSousRequeteMotsClesEt($mot_cle);
358
		} else {
359
			// Construction de la requête
360
			$prerequete = 	'SELECT * '.
361
				'FROM cel_mots_cles_obs '.
362
				'WHERE cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle($mot_cle));
363
			$elements = $this->executerRequete($prerequete);
364
			if ($elements != false && count($elements) > 0) {
365
				$requete = '';
366
				foreach ($elements as $occurence) {
367
					$requete .= '(mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" AND identifiant = '.
368
						$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
369
				}
370
			}
371
		}
372
		$requete = rtrim($requete,' OR ').' AND ';
373
		return $requete;
374
	}
375
 
376
	private function creerSousRequeteMotsClesOu($mot_cle) {
377
		$requete = 'mots_cles like "inexistant" OR';
741 delphine 378
		$tab_mots_cles = explode('OU', $mot_cle);
715 delphine 379
		$where = '';
380
		foreach ($tab_mots_cles as $mot) {
741 delphine 381
			$where .= 'cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle(trim($mot))).' OR ';
715 delphine 382
		}
383
		$where = rtrim($where,' OR ');
384
 
385
		// Construction de la requête
386
		$prerequete = 	"SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles_obs WHERE $where ";
387
		$elements = $this->executerRequete($prerequete);//print_r($elements);
388
		if ($elements != false && count($elements) > 0) {
389
			$requete = '';
390
			foreach ($elements as $occurence) {
391
				$requete .= '(mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" AND identifiant = '.
392
					$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
393
			}
394
		}
395
		return $requete;
396
	}
397
 
398
	private function creerSousRequeteMotsClesEt($mot_cle) {
399
		$requete = 'mots_cles like "inexistant" OR';
400
		$where = '';
401
		$champs = 'a.cmc_id_proprietaire , ';
402
		$table = '';
403
		$i = "a"; $j = "a";
404
 
405
		$tab_mots_cles = explode("ET", $mot_cle);
406
		foreach ($tab_mots_cles as $mot) {
407
			$champs .= "$i.cmc_id_mot_cle_utilisateur as $i , ";
408
			$table .= "cel_mots_cles_obs $i , ";
741 delphine 409
			$where .= "$i.cmc_id_mot_cle_general = ".$this->bdd->quote($this->encoderMotCle(trim($mot))).' AND ';
715 delphine 410
			if ($i !== "a") {
411
				$where .= " $i.cmc_id_proprietaire = ".$j.".cmc_id_proprietaire AND ";
412
				$j++;
413
			}
414
			$i++;
415
		}
416
		$where = rtrim($where,' AND '); $champs = rtrim($champs,' , '); $table = rtrim($table,' , ');
417
 
418
		// Construction de la requête
419
		$prerequete = 	"SELECT $champs FROM $table WHERE $where ";
420
		$elements = $this->executerRequete($prerequete);//print_r($elements);
421
		if ($elements != false && count($elements) > 0) {
422
			$requete = '';
423
			foreach ($elements as $occurence) {
424
				$requete = ' (';
425
				for ($j = 'a'; $j < $i; $j++) {
426
					$requete .= 'mots_cles like "%'.$occurence[$j].'%" AND ';
427
				}
428
				$requete .= ' identifiant = '.$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
429
			}
430
		}
431
		return $requete;
432
	}
433
 
434
	private function traiterCriteresMultiples($tableau_criteres) {
435
		$tableau_criteres_pour_bdd = array();
436
 
437
		foreach($tableau_criteres as $nom_critere => $valeur_critere) {
438
			if (isset($this->criteres[$nom_critere])) {
439
				$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
440
			}
441
		}
442
		return $tableau_criteres_pour_bdd;
443
	}
444
 
445
	private function creerSousRequeteRechercheGenerale($chaine_requete) {
446
		$requete = '';
447
		if (trim($chaine_requete) != '') {
448
			$chaine_requete = strtolower($chaine_requete);
449
			$chaine_requete = str_replace(' ', '_', $chaine_requete);
450
			$requete = ' ('.
451
				'nom_ret LIKE "'.$chaine_requete.'%"'.
452
				' OR '.
453
				'nom_sel LIKE "'.$chaine_requete.'%"'.
454
				' OR '.
455
				'location LIKE "'.$chaine_requete.'%" '.
456
				' OR '.
457
				'id_location LIKE "'.$chaine_requete.'%" '.
458
				' OR '.
459
				'identifiant LIKE "'.$chaine_requete.'%" '.
460
				') ';
461
		}
462
		return $requete;
463
	}
464
 
465
	private function estUneRechercheGenerale() {
466
		return isset($_GET['recherche']);
467
	}
468
 
416 aurelien 469
	private function executerService($elements) {
470
		$contenu = '';
471
		if (is_array($elements)) {
472
			// Prétraitement des données
473
			$donnees = $this->construireDonneesCommunesAuFlux($elements);
474
 
475
			foreach ($elements as $element) {
476
				$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
477
			}
478
 
479
			// Création du contenu à partir d'un template PHP
480
			if (isset($this->squelette)) {
481
				$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
482
			}
483
		}
484
		return $contenu;
485
	}
486
 
487
	private function construireDonneesCommunesAuFlux($observations) {
488
		$donnees = $this->getFlux($this->service);
489
		$donnees['guid'] = $this->getUrlServiceBase();
741 delphine 490
		$donnees['titre'] = 'Flux des observations du CEL';
416 aurelien 491
		$donnees['lien_service'] = $this->creerUrlService();
715 delphine 492
		$donnees['lien_cel'] = $this->config['settings']['baseURLAbsolu'];
416 aurelien 493
		$donnees['editeur'] = $this->config['settings']['editeur'];
494
		$derniere_info_en_date = reset($observations);
495
		$date_modification_timestamp = strtotime($derniere_info_en_date['date_modification']);
496
		$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
497
		$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
498
		$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
499
		$donnees['annee_courante'] = date('Y');
500
		$donnees['generateur'] = 'CEL - Jrest - CelSyndicationObservation';
715 delphine 501
		$donnees['generateur_version'] = (preg_match('/([0-9]+)/', '$Revision$', $match)) ?  $match[1] : '0';
416 aurelien 502
		return $donnees;
503
	}
504
 
505
	private function construireDonneesCommunesAuxItems($observation) {
506
		$item = array();
528 jpm 507
		$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($observation['date_modification']);
416 aurelien 508
		$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp);
509
		$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
510
		$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
511
		$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
512
		$item['date_creation_simple'] = strftime('%A %d %B %Y à %H:%M', strtotime($observation['date_creation']));
513
		$item['titre'] = $this->creerTitre($observation);
514
		$item['guid'] = $this->creerGuidItem($observation);
515
		$item['lien'] = $this->creerLienItem($observation);
516
		$item['categorie'] = $this->creerCategorie($item);
528 jpm 517
		$item['description'] = $this->creerDescription($this->protegerCaracteresHtmlDansChamps($observation), $item);
518
		$item['description_encodee'] = htmlspecialchars($this->creerDescription($observation, $item));
522 jpm 519
		$item['modifier_par'] = $this->creerAuteur($observation['identifiant'], $this->etreFluxAdmin());
416 aurelien 520
		return $item;
521
	}
522
 
523
	private function creerTitre($obs) {
524
		$nom_plante = $obs['nom_sel'].' [nn'.$obs['num_nom_sel'].']';
525
		$lieu = $obs['location'].' ('.$obs['id_location'].')';
522 jpm 526
		$utilisateur = $this->creerAuteur($obs['identifiant'], $this->etreFluxAdmin());
416 aurelien 527
		$titre = "$nom_plante à $lieu par $utilisateur";
528
		$titre = $this->nettoyerTexte($titre);
529
		return $titre;
530
	}
531
 
532
	private function creerGuidItem($element) {
533
		$guid = sprintf($this->config['settings']['guidObsTpl'], 'obs'.$element['id']);
534
		return $guid;
535
	}
536
 
537
	private function creerLienItem($element) {
506 jpm 538
		$lien = null;
539
		if ($element['num_nom_sel'] != 0) {
585 jpm 540
			$lien = sprintf($this->config['settings']['efloreUrlTpl'], urlencode($element['num_nom_sel']), 'cel');
506 jpm 541
		}
416 aurelien 542
		return $lien;
543
	}
544
 
545
	private function creerDescription($obs, $item) {
568 jpm 546
		$id_obs = $obs['id'];
528 jpm 547
		$famille = $obs['famille'];
548
		$nom_saisi = $obs['nom_sel'];
549
		$nom_retenu = $obs['nom_ret'];
550
		$auteur = $this->creerAuteur($obs['identifiant'], $this->etreFluxAdmin());
551
		$mots_cles_obs = $this->decoderMotsClesObs($obs['identifiant'], $obs['mots_cles']);
416 aurelien 552
		$lien_correction = sprintf($this->config['settings']['phpEditUrlTpl'], $obs['id']);
528 jpm 553
		$lieu = $obs['location'].' ('.$obs['id_location'].') > '.$obs['lieudit'].' > '.$obs['station'];
554
		$milieu = $obs['milieu'];
555
		$coordonnees = ($this->etreNull($obs['coord_x']) && $this->etreNull($obs['coord_y'])) ? '' : $obs['coord_x'].'/'.$obs['coord_y'];
529 jpm 556
		$commentaire = $obs['commentaire'];
528 jpm 557
		$date_observation = $this->formaterDate($obs['date_observation'], '%A %d %B %Y');
558
		$date_transmission = $this->formaterDate($obs['date_transmission']);
559
		$date_modification = $this->formaterDate($obs['date_modification']);
560
		$date_creation = $this->formaterDate($obs['date_creation']);
561
		$transmission = $obs['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
562
 
563
		$description = '<h2>'."Observation #$id_obs de $nom_saisi".'</h2>'.
416 aurelien 564
			'<ul>'.
528 jpm 565
			'<li>'.'Famille : '.$famille.'</li>'.
566
			'<li>'.'Nom saisi : '.$nom_saisi.'</li>'.
567
			'<li>'.'Nom retenu : '.$nom_retenu.'</li>'.
568
			'<li>'.'Observée le : '.$date_observation.'</li>'.
569
			'<li>'.'Lieu : '.$lieu.'</li>'.
570
			'<li>'.'Milieu : '.$milieu.'</li>'.
571
			(($this->etreFluxAdmin()) ? '<li>Coordonnées (Lat/Long) : '.$coordonnees.'</li>' : '').
572
			'<li>'.'Commentaire : '.$commentaire.'</li>'.
573
			'<li>'.'Mots-clés : '.implode(', ', $mots_cles_obs).'</li>'.
574
			(($this->etreFluxAdmin()) ? '<li>Transmis (= public) : '.$transmission.'</li>' : '').
575
			'<li>Modifiée le : '.$date_modification.'</li>'.
576
			'<li>Créée le : '.$date_creation.'</li>'.
577
			(($this->etreFluxAdmin()) ? '<li><a href="'.$lien_correction.'">Corriger cette observation</a></li>' : '').
416 aurelien 578
			'</ul>';
579
		$description = $this->nettoyerTexte($description);
580
		return $description;
581
	}
582
 
583
	private function creerCategorie($element) {
584
		$categorie = '';
585
		$categorie = 'Observation';
586
		$categorie = $this->nettoyerTexte($categorie);
587
		return $categorie;
588
	}
589
 
590
	private function etreFluxAdmin() {
715 delphine 591
		return (isset($_GET['admin']) && $_GET['admin'] == '1') ? true : false;
416 aurelien 592
	}
593
 
594
	private function creerUrlService() {
595
		$url_service = $this->getUrlServiceBase();
528 jpm 596
		if (count($_GET) > 0) {
637 jpm 597
			$parametres_get = array();
598
			foreach ($_GET as $cle => $valeur) {
599
				$parametres_get[] = $cle.'='.$valeur;
600
			}
601
			$url_service .= '?'.implode('&amp;', $parametres_get);
416 aurelien 602
		}
603
		return $url_service;
604
	}
605
}