Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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