Subversion Repositories eFlore/Applications.cel

Rev

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

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