Subversion Repositories eFlore/Applications.cel

Rev

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

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