Subversion Repositories eFlore/Applications.cel

Rev

Rev 1477 | Rev 1571 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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