Subversion Repositories eFlore/Applications.cel

Rev

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

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