Subversion Repositories eFlore/Applications.cel

Rev

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

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