Subversion Repositories eFlore/Applications.cel

Rev

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

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