Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1338 Rev 1361
1
<?php
1
<?php
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
3
 
3
 
4
/**
4
/**
5
 * Service fournissant des informations concernant les images du CEL au format RSS1, RSS2 ou ATOM.
5
 * Service fournissant des informations concernant les images du CEL au format RSS1, RSS2 ou ATOM.
6
 * Encodage en entrée : utf8
6
 * Encodage en entrée : utf8
7
 * Encodage en sortie : utf8
7
 * Encodage en sortie : utf8
8
 *
8
 *
9
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
10
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
10
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
11
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
11
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
12
 * @version $Id$
12
 * @version $Id$
13
 * @copyright 2010
13
 * @copyright 2010
14
 */
14
 */
15
// TODO : résoudre le problème des images liées à plusieurs obs. Cela créé plusieurs item avec le même id pour atom...
15
// TODO : résoudre le problème des images liées à plusieurs obs. Cela créé plusieurs item avec le même id pour atom...
16
class CelSyndicationImage extends Cel {
16
class CelSyndicationImage extends Cel {
17
 
17
 
18
	private $parametres_origines = null;
18
	private $parametres_origines = null;
19
	private $format = null;
19
	private $format = null;
20
	private $service = null;
20
	private $service = null;
21
	private $squelette = null;
21
	private $squelette = null;
22
	private $squelette_dossier = null;
22
	private $squelette_dossier = null;
23
	private $auteurs = array();
23
	private $auteurs = array();
24
	private $flux = array();
24
	private $flux = array();
25
 
25
 
26
	private $format_image = 'XL';
26
	private $format_image = 'XL';
27
 
27
 
28
	private $criteres = array(
28
	private $criteres = array(
29
		'utilisateur' => 'c.courriel_utilisateur',
29
		'utilisateur' => 'c.courriel_utilisateur',
30
		'commune' => 'b.zone_geo',
30
		'commune' => 'b.zone_geo',
31
		'dept' => 'b.ce_zone_geo',
31
		'dept' => 'b.ce_zone_geo',
32
		'taxon' => 'b.nom_ret',
32
		'taxon' => 'b.nom_ret',
33
		'commentaire' => 'c.commentaire',
33
		'commentaire' => 'c.commentaire',
34
		'date' => 'c.date_prise_de_vue',
34
		'date' => 'c.date_prise_de_vue',
35
		'tag' => 'tag',
35
		'tag' => 'tag',
36
		'projet' => 'projet');
36
		'projet' => 'projet');
37
 
37
 
38
	/**
38
	/**
39
	 * Méthode appelée avec une requête de type GET.
39
	 * Méthode appelée avec une requête de type GET.
40
	 */
40
	 */
41
	public function getElement($params = array()) {
41
	public function getElement($params = array()) {
42
		// Initialisation des variables
42
		// Initialisation des variables
43
		$this->parametres_origines = $params;
43
		$this->parametres_origines = $params;
44
		$info = array();
44
		$info = array();
45
		$contenu = '';
45
		$contenu = '';
46
 
46
 
47
		if (! $this->etreFluxAdmin() || $this->authentifierAdmin()) {
47
		if (! $this->etreFluxAdmin() || $this->authentifierAdmin()) {
48
			// Pré traitement des paramêtres
48
			// Pré traitement des paramêtres
49
			$pour_bdd = false;
49
			$pour_bdd = false;
50
			$p = $this->traiterParametres(array('service', 'format'), $params, $pour_bdd);
50
			$p = $this->traiterParametres(array('service', 'format'), $params, $pour_bdd);
51
			extract($p);
51
			extract($p);
52
			$this->parametres = $params;
52
			$this->parametres = $params;
53
			$this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
53
			$this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
54
 
54
 
55
			// Récupération de la liste des flux
55
			// Récupération de la liste des flux
56
			$this->chargerListeDesFlux();
56
			$this->chargerListeDesFlux();
57
 
57
 
58
			// Chargement du bon type de service demandé
58
			// Chargement du bon type de service demandé
59
			if (isset($service)) {
59
			if (isset($service)) {
60
				$this->service = $this->traiterNomService($service);
60
				$this->service = $this->traiterNomService($service);
61
				$methode = $this->getNomMethodeService();
61
				$methode = $this->getNomMethodeService();
62
				if (method_exists($this, $methode)) {
62
				if (method_exists($this, $methode)) {
63
					if (isset($format) && preg_match('/^(?:rss1|rss2|atom)$/i', $format)) {
63
					if (isset($format) && preg_match('/^(?:rss1|rss2|atom)$/i', $format)) {
64
						// Mise en minuscule de l'indication du format
64
						// Mise en minuscule de l'indication du format
65
						$this->format = strtolower($format);
65
						$this->format = strtolower($format);
66
						// Définition du fichier squelette demandé
66
						// Définition du fichier squelette demandé
67
						$this->squelette = $this->squelette_dossier.$this->format.'.tpl.xml';
67
						$this->squelette = $this->squelette_dossier.$this->format.'.tpl.xml';
68
					} else if (isset($this->flux[$this->service])) {
68
					} else if (isset($this->flux[$this->service])) {
69
						$this->format = '';
69
						$this->format = '';
70
						$this->messages[] = "Le service CEL Syndication nécessite d'indiquer en second paramètre le format : rss1, rss2 ou atom.";
70
						$this->messages[] = "Le service CEL Syndication nécessite d'indiquer en second paramètre le format : rss1, rss2 ou atom.";
71
					}
71
					}
72
 
72
 
73
					if (!isset($this->flux[$this->service]) || isset($this->format)) {
73
					if (!isset($this->flux[$this->service]) || isset($this->format)) {
74
						// Suppression des deux premiers paramètres (service et format)  pour le reste des méthodes
74
						// Suppression des deux premiers paramètres (service et format)  pour le reste des méthodes
75
						array_shift($this->parametres);
75
						array_shift($this->parametres);
76
						array_shift($this->parametres);
76
						array_shift($this->parametres);
77
 
77
 
78
						// Récupération du contenu à renvoyer
78
						// Récupération du contenu à renvoyer
79
						$contenu = $this->$methode();
79
						$contenu = $this->$methode();
80
					}
80
					}
81
				} else {
81
				} else {
82
					$this->messages[] = "Le type d'information demandé '$this->service' n'est pas disponible.";
82
					$this->messages[] = "Le type d'information demandé '$this->service' n'est pas disponible.";
83
				}
83
				}
84
			} else {
84
			} else {
85
				$this->messages[] = "Le service CEL Syndication Image nécessite d'indiquer en premier paramètre le type d'information demandé.";
85
				$this->messages[] = "Le service CEL Syndication Image nécessite d'indiquer en premier paramètre le type d'information demandé.";
86
			}
86
			}
87
		}
87
		}
88
 
88
 
89
		// Envoie sur la sortie standard
89
		// Envoie sur la sortie standard
90
		$encodage = 'utf-8';
90
		$encodage = 'utf-8';
91
		$mime = $this->getTypeMime();
91
		$mime = $this->getTypeMime();
92
		$formatage_json = $this->getFormatageJson();
92
		$formatage_json = $this->getFormatageJson();
93
		$this->envoyer($contenu, $mime, $encodage, $formatage_json);
93
		$this->envoyer($contenu, $mime, $encodage, $formatage_json);
94
	}
94
	}
95
 
95
 
96
	private function chargerListeDesFlux() {
96
	private function chargerListeDesFlux() {
97
		$this->setFlux('simple', 'Nouvelles images liées à une observation dans le CEL',
97
		$this->setFlux('simple', 'Nouvelles images liées à une observation dans le CEL',
98
			"Ce flux fournit l'url des nouvelles images du CEL liées à une observation.");
98
			"Ce flux fournit l'url des nouvelles images du CEL liées à une observation.");
99
		$this->setFlux('complet', 'Nouvelles images liées à une observation dans le CEL (détails)',
99
		$this->setFlux('complet', 'Nouvelles images liées à une observation dans le CEL (détails)',
100
			"Ce flux fournit les informations sur les nouvelles images du CEL liées à une observation.");
100
			"Ce flux fournit les informations sur les nouvelles images du CEL liées à une observation.");
101
		$this->setFlux('par-mots-cles', 'Flux de syndication obsolète',
101
		$this->setFlux('par-mots-cles', 'Flux de syndication obsolète',
102
			"Ce flux est désormais accessible via le flux multicriteres/atom/M?tag='mot-cle'.");
102
			"Ce flux est désormais accessible via le flux multicriteres/atom/M?tag='mot-cle'.");
103
		$this->setFlux('par-commune','Flux de syndication obsolète',
103
		$this->setFlux('par-commune','Flux de syndication obsolète',
104
			"Ce flux  est désormais accessible via le flux multicriteres/atom/M?commune='commune'.");
104
			"Ce flux  est désormais accessible via le flux multicriteres/atom/M?commune='commune'.");
105
		$this->setFlux('multicriteres','Flux de syndication des nouvelles images liées à une observation publique du CEL '.
105
		$this->setFlux('multicriteres','Flux de syndication des nouvelles images liées à une observation publique du CEL '.
106
			'filtrées par un ou plusieurs critères',
106
			'filtrées par un ou plusieurs critères',
107
			"Ce flux fournit des informations sur les nouvelles images liées à une observation du CEL filtrées par ".
107
			"Ce flux fournit des informations sur les nouvelles images liées à une observation du CEL filtrées par ".
108
			"auteur (mail), commune (nom), departement (code postal), taxon (nom scientifique), commentaire, tag ".
108
			"auteur (mail), commune (nom), departement (code postal), taxon (nom scientifique), commentaire, tag ".
109
			"et/ou date.");
109
			"et/ou date.");
110
	}
110
	}
111
 
111
 
112
	private function setFlux($nom, $titre, $description) {
112
	private function setFlux($nom, $titre, $description) {
113
		$url_base = $this->config['settings']['baseURLAbsoluDyn'].'CelSyndicationImage/';
113
		$url_base = $this->config['settings']['baseURLAbsoluDyn'].'CelSyndicationImage/';
114
		$formats = array('atom', 'rss2', 'rss1');
114
		$formats = array('atom', 'rss2', 'rss1');
115
		$flux = array();
115
		$flux = array();
116
		foreach ($formats as $format) {
116
		foreach ($formats as $format) {
117
			$url = $url_base.$nom.'/'.$format;
117
			$url = $url_base.$nom.'/'.$format;
118
			$flux[$format] = $url;
118
			$flux[$format] = $url;
119
		}
119
		}
120
		$this->flux[$nom] = array('titre' => $titre, 'description' => $description, 'urls' => $flux);
120
		$this->flux[$nom] = array('titre' => $titre, 'description' => $description, 'urls' => $flux);
121
	}
121
	}
122
 
122
 
123
	private function getFlux($nom) {
123
	private function getFlux($nom) {
124
		return isset($this->flux[$nom]) ? $this->flux[$nom] : array();
124
		return isset($this->flux[$nom]) ? $this->flux[$nom] : array();
125
	}
125
	}
126
 
126
 
127
	private function traiterNomService($nom) {
127
	private function traiterNomService($nom) {
128
		$nom = strtolower($nom);
128
		$nom = strtolower($nom);
129
		return $nom;
129
		return $nom;
130
	}
130
	}
131
 
131
 
132
	private function getNomMethodeService() {
132
	private function getNomMethodeService() {
133
		$methode = '';
133
		$methode = '';
134
		$service_formate = str_replace(' ', '', ucwords(implode(' ', explode('-', $this->service))));
134
		$service_formate = str_replace(' ', '', ucwords(implode(' ', explode('-', $this->service))));
135
		$methode = 'getService'.$service_formate;
135
		$methode = 'getService'.$service_formate;
136
		return $methode;
136
		return $methode;
137
	}
137
	}
138
 
138
 
139
	private function getUrlBase() {
139
	private function getUrlBase() {
140
		$url_base = sprintf($this->config['settings']['baseURLAbsolu'], get_class($this).'/');
140
		$url_base = sprintf($this->config['settings']['baseURLAbsolu'], get_class($this).'/');
141
		return $url_base;
141
		return $url_base;
142
	}
142
	}
143
 
143
 
144
	private function getUrlServiceBase() {
144
	private function getUrlServiceBase() {
145
		$url_service = $this->getUrlBase().implode('/', $this->parametres_origines);
145
		$url_service = $this->getUrlBase().implode('/', $this->parametres_origines);
146
		return $url_service;
146
		return $url_service;
147
	}
147
	}
148
 
148
 
149
	private function getTypeMime() {
149
	private function getTypeMime() {
150
		$mime = '';
150
		$mime = '';
151
		switch ($this->format) {
151
		switch ($this->format) {
152
			case 'atom' :
152
			case 'atom' :
153
				$mime = 'application/atom+xml';
153
				$mime = 'application/atom+xml';
154
				break;
154
				break;
155
			case 'rss1' :
155
			case 'rss1' :
156
			case 'rss2' :
156
			case 'rss2' :
157
				$mime = 'application/rss+xml';
157
				$mime = 'application/rss+xml';
158
				break;
158
				break;
159
			case 'opml' :
159
			case 'opml' :
160
				$mime = 'text/x-opml';
160
				$mime = 'text/x-opml';
161
				break;
161
				break;
162
			default:
162
			default:
163
				$mime = 'text/html';
163
				$mime = 'text/html';
164
		}
164
		}
165
		return $mime;
165
		return $mime;
166
	}
166
	}
167
 
167
 
168
	private function getFormatageJson() {
168
	private function getFormatageJson() {
169
		$json = false;
169
		$json = false;
170
		switch ($this->service) {
170
		switch ($this->service) {
171
			case 'liste-des-flux' :
171
			case 'liste-des-flux' :
172
				$json = true;
172
				$json = true;
173
				break;
173
				break;
174
			default:
174
			default:
175
				$json = false;
175
				$json = false;
176
		}
176
		}
177
		return $json;
177
		return $json;
178
	}
178
	}
179
 
179
 
180
	private function creerCategorie($element) {
180
	private function creerCategorie($element) {
181
		$categorie = '';
181
		$categorie = '';
182
		$categorie = 'Image';
182
		$categorie = 'Image';
183
		$categorie = $this->nettoyerTexte($categorie);
183
		$categorie = $this->nettoyerTexte($categorie);
184
		return $categorie;
184
		return $categorie;
185
	}
185
	}
186
 
186
 
187
	private function etreFluxAdmin() {
187
	private function etreFluxAdmin() {
188
		return (isset($_GET['admin']) && $_GET['admin'] == '1') ? true : false;
188
		return (isset($_GET['admin']) && $_GET['admin'] == '1') ? true : false;
189
	}
189
	}
190
 
190
 
191
	private function creerUrlService() {
191
	private function creerUrlService() {
192
		$url_service = $this->getUrlServiceBase();
192
		$url_service = $this->getUrlServiceBase();
193
		if (count($_GET) > 0) {
193
		if (count($_GET) > 0) {
194
			$parametres_get = array();
194
			$parametres_get = array();
195
			foreach ($_GET as $cle => $valeur) {
195
			foreach ($_GET as $cle => $valeur) {
196
				$parametres_get[] = $cle.'='.$valeur;
196
				$parametres_get[] = $cle.'='.$valeur;
197
			}
197
			}
198
			$url_service .= '?'.implode('&amp;', $parametres_get);
198
			$url_service .= '?'.implode('&amp;', $parametres_get);
199
		}
199
		}
200
		return $url_service;
200
		return $url_service;
201
	}
201
	}
202
 
202
 
203
	protected function executerRequete($requete, $retour = 'All', $mode = PDO::FETCH_ASSOC) {
203
	protected function executerRequete($requete, $retour = 'All', $mode = PDO::FETCH_ASSOC) {
204
		$infos = null;
204
		$infos = null;
205
		try {
205
		try {
206
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
206
			$infos = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
207
			if ($infos === false) {
207
			if ($infos === false) {
208
				$this->messages[] = "La requête suivante a retourné aucun résultat :\n$requete";
208
				$this->messages[] = "La requête suivante a retourné aucun résultat :\n$requete";
209
			}
209
			}
210
		} catch (PDOException $e) {
210
		} catch (PDOException $e) {
211
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
211
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
212
		}
212
		}
213
		return $infos;
213
		return $infos;
214
	}
214
	}
215
 
215
 
216
	private function executerService($elements) {
216
	private function executerService($elements) {
217
		// Prétraitement des données
217
		// Prétraitement des données
218
		$donnees = $this->construireDonneesCommunesAuFlux($elements);
218
		$donnees = $this->construireDonneesCommunesAuFlux($elements);
219
		foreach ($elements as $element) {
219
		foreach ($elements as $element) {
220
			$identifiants[$element['ce_utilisateur']] = $element['ce_utilisateur'];
220
			$identifiants[$element['courriel_utilisateur']] = $element['courriel_utilisateur'];
221
		}
221
		}
222
		$this->auteurs = $this->creerAuteurs($identifiants);
222
		$this->auteurs = $this->creerAuteurs($identifiants);
-
 
223
 
223
		foreach ($elements as $element) {
224
		foreach ($elements as $element) {
224
			$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
225
			$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
225
		}
226
		}
226
 
227
 
227
		// Création du contenu à partir d'un template PHP
228
		// Création du contenu à partir d'un template PHP
228
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
229
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
229
 
230
 
230
		return $contenu;
231
		return $contenu;
231
	}
232
	}
232
 
233
 
233
	private function construireDonneesCommunesAuFlux($infos) {
234
	private function construireDonneesCommunesAuFlux($infos) {
234
		$donnees = $this->getFlux($this->service);
235
		$donnees = $this->getFlux($this->service);
235
		$donnees['guid'] = $this->getUrlServiceBase();
236
		$donnees['guid'] = $this->getUrlServiceBase();
236
		$donnees['lien_service'] = $this->creerUrlService();
237
		$donnees['lien_service'] = $this->creerUrlService();
237
		$donnees['lien_cel'] = (isset($infos['nom_sel_nn'])) ?
238
		$donnees['lien_cel'] = (isset($infos['nom_sel_nn'])) ?
238
			sprintf($this->config['settings']['efloreUrlTpl'], $infos['nom_sel_nn'], 'illustration') : '';
239
			sprintf($this->config['settings']['efloreUrlTpl'], $infos['nom_sel_nn'], 'illustration') : '';
239
		$donnees['editeur'] = $this->config['settings']['editeur'];
240
		$donnees['editeur'] = $this->config['settings']['editeur'];
240
		$derniere_info_en_date = reset($infos);
241
		$derniere_info_en_date = reset($infos);
241
		$date_modification_timestamp = strtotime($derniere_info_en_date['date_creation']);
242
		$date_modification_timestamp = strtotime($derniere_info_en_date['date_creation']);
242
		$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
243
		$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
243
		$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
244
		$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
244
		$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
245
		$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
245
		$donnees['annee_courante'] = date('Y');
246
		$donnees['annee_courante'] = date('Y');
246
		$donnees['generateur'] = 'CEL - Jrest - CelSyndicationImage';
247
		$donnees['generateur'] = 'CEL - Jrest - CelSyndicationImage';
247
		$donnees['generateur_version'] = (preg_match('/([0-9]+)/', '$Revision$', $match)) ?  $match[1] : '0';
248
		$donnees['generateur_version'] = (preg_match('/([0-9]+)/', '$Revision$', $match)) ?  $match[1] : '0';
248
		return $donnees;
249
		return $donnees;
249
	}
250
	}
250
 
251
 
251
	private function construireDonneesCommunesAuxItems($info) {
252
	private function construireDonneesCommunesAuxItems($info) {
252
		$item = array();
253
		$item = array();
253
		$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($info['date_creation']);
254
		$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($info['date_creation']);
254
		$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp);
255
		$item['date_maj_simple'] = strftime('%A %d %B %Y à %H:%M', $date_modification_timestamp);
255
		$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
256
		$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
256
		$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
257
		$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
257
		$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
258
		$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
258
		$item['titre'] = $this->creerTitre($info);
259
		$item['titre'] = $this->creerTitre($info);
259
		$item['guid'] = $this->creerGuidItem($info);
260
		$item['guid'] = $this->creerGuidItem($info);
260
		$item['lien'] = $this->creerLienItem($info);
261
		$item['lien'] = $this->creerLienItem($info);
261
		$item['categorie'] = $this->creerCategorie($item);
262
		$item['categorie'] = $this->creerCategorie($item);
262
		$item['description'] = $this->creerDescription($this->protegerCaracteresHtmlDansChamps($info), $item);
263
		$item['description'] = $this->creerDescription($this->protegerCaracteresHtmlDansChamps($info), $item);
263
		$item['description_encodee'] = htmlspecialchars($this->creerDescription($info, $item));
264
		$item['description_encodee'] = htmlspecialchars($this->creerDescription($info, $item));
264
		$item['modifier_par'] = $this->getIntituleAuteur($info['courriel_utilisateur']);
265
		$item['modifier_par'] = $this->getIntituleAuteur($info['courriel_utilisateur']);
265
		return $item;
266
		return $item;
266
	}
267
	}
267
 
268
 
268
	private function creerGuidItem($element) {
269
	private function creerGuidItem($element) {
269
		$guid = $this->getUrlImage($element['id_image']);
270
		$guid = $this->getUrlImage($element['id_image']);
270
		return $guid;
271
		return $guid;
271
	}
272
	}
272
 
273
 
273
	private function creerTitre($element) {
274
	private function creerTitre($element) {
274
		$methode = 'creerTitre'.$this->service;
275
		$methode = 'creerTitre'.$this->service;
275
		$methode = (method_exists($this, $methode)) ? $methode : 'creerTitreSimple';
276
		$methode = (method_exists($this, $methode)) ? $methode : 'creerTitreSimple';
276
		$titre = $this->$methode($element);
277
		$titre = $this->$methode($element);
277
		$titre = $this->nettoyerTexte($titre);
278
		$titre = $this->nettoyerTexte($titre);
278
		return $titre;
279
		return $titre;
279
	}
280
	}
280
 
281
 
281
	private function creerDescription($donnees, $item) {
282
	private function creerDescription($donnees, $item) {
282
		$methode = 'creerDescription'.$this->service;
283
		$methode = 'creerDescription'.$this->service;
283
		$methode = (method_exists($this, $methode)) ? $methode : 'creerDescriptionComplet';
284
		$methode = (method_exists($this, $methode)) ? $methode : 'creerDescriptionComplet';
284
		$description = $this->$methode($donnees, $item);
285
		$description = $this->$methode($donnees, $item);
285
		$description = $this->nettoyerTexte($description);
286
		$description = $this->nettoyerTexte($description);
286
		return $description;
287
		return $description;
287
	}
288
	}
288
 
289
 
289
	private function creerLienItem($element) {
290
	private function creerLienItem($element) {
290
 
291
 
291
		if ($this->etreNull($element['id_observation'])) {
292
		if ($this->etreNull($element['id_observation'])) {
292
			// Lien vers image grand format
293
			// Lien vers image grand format
293
			$lien = $this->getUrlImage($element['id_image'], $this->format_image);
294
			$lien = $this->getUrlImage($element['id_image'], $this->format_image);
294
		} else {
295
		} else {
295
			// Lien vers fiche eFlore onglet Illustration
296
			// Lien vers fiche eFlore onglet Illustration
296
			$lien = sprintf($this->config['settings']['efloreUrlTpl'], $element['nom_sel_nn'], 'illustration');
297
			$lien = sprintf($this->config['settings']['efloreUrlTpl'], $element['nom_sel_nn'], 'illustration');
297
		}
298
		}
298
		return $lien;
299
		return $lien;
299
	}
300
	}
300
 
301
 
301
	private function getServiceListeDesFlux() {
302
	private function getServiceListeDesFlux() {
302
		return $this->flux;
303
		return $this->flux;
303
	}
304
	}
304
 
305
 
305
	private function getServiceOpml() {
306
	private function getServiceOpml() {
306
		$donnees = array();
307
		$donnees = array();
307
		$id = 1;
308
		$id = 1;
308
		foreach ($this->flux as $flux_nom => $flux){
309
		foreach ($this->flux as $flux_nom => $flux){
309
			$info = array();
310
			$info = array();
310
			$info['type'] = 'atom';
311
			$info['type'] = 'atom';
311
			$info['titre'] = $flux['titre'];
312
			$info['titre'] = $flux['titre'];
312
			$info['texte'] = "CEL - Images - $flux_nom";
313
			$info['texte'] = "CEL - Images - $flux_nom";
313
			$info['description'] = $flux['description'];
314
			$info['description'] = $flux['description'];
314
			$info['url_xml'] = $this->getUrlBase().$flux_nom.'/atom';
315
			$info['url_xml'] = $this->getUrlBase().$flux_nom.'/atom';
315
			$info['url_html'] = $this->config['settings']['aideCelUrl'].'FluxSyndication';
316
			$info['url_html'] = $this->config['settings']['aideCelUrl'].'FluxSyndication';
316
			$donnees['liste_flux'][] = $info;
317
			$donnees['liste_flux'][] = $info;
317
		}
318
		}
318
 
319
 
319
		$this->squelette = $this->squelette_dossier.'opml.tpl.xml';
320
		$this->squelette = $this->squelette_dossier.'opml.tpl.xml';
320
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
321
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
321
		return $contenu;
322
		return $contenu;
322
	}
323
	}
323
 
324
 
324
	private function getServiceSimple() {
325
	private function getServiceSimple() {
325
		if (isset($this->parametres[0])) {
326
		if (isset($this->parametres[0])) {
326
			$this->format_image = $this->parametres[0];
327
			$this->format_image = $this->parametres[0];
327
		}
328
		}
328
 
329
 
329
		// Construction de la requête
330
		// Construction de la requête
330
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
331
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
331
			' cim.id_image, cim.ce_utilisateur, nom_original, cim.date_creation, cim.mots_cles_texte as mots_cles_texte_images,
332
			' cim.id_image, cim.ce_utilisateur, nom_original, cim.date_creation, cim.mots_cles_texte as mots_cles_texte_images,
332
				 ci.mots_cles_texte as mots_cles_texte_images_obs, cim.commentaire, note_qualite  '.
333
				 ci.mots_cles_texte as mots_cles_texte_images_obs, cim.commentaire, note_qualite  '.
333
			'FROM cel_obs_images AS coi '.
334
			'FROM cel_obs_images AS coi '.
334
			'LEFT JOIN cel_obs AS ci '.
335
			'LEFT JOIN cel_obs AS ci '.
335
				'ON (coi.id_observation = ci.id_observation) '.
336
				'ON (coi.id_observation = ci.id_observation) '.
336
			'LEFT JOIN cel_images AS cim '.
337
			'LEFT JOIN cel_images AS cim '.
337
				'ON (coi.id_image = cim.id_image) '.
338
				'ON (coi.id_image = cim.id_image) '.
338
			'WHERE ci.transmission = 1 '.
339
			'WHERE ci.transmission = 1 '.
339
			'	AND ci.ce_utilisateur = cim.ce_utilisateur '.
340
			'	AND ci.ce_utilisateur = cim.ce_utilisateur '.
340
			'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'cim.date_creation DESC').' '.
341
			'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'cim.date_creation DESC').' '.
341
			"LIMIT $this->start, $this->limit ";
342
			"LIMIT $this->start, $this->limit ";
342
 
343
 
343
		$elements = $this->executerRequete($requete);
344
		$elements = $this->executerRequete($requete);
344
 
345
 
345
		// Création du contenu
346
		// Création du contenu
346
		$contenu = $this->executerService($elements);
347
		$contenu = $this->executerService($elements);
347
		return $contenu;
348
		return $contenu;
348
	}
349
	}
349
 
350
 
350
	private function creerTitreSimple($element) {
351
	private function creerTitreSimple($element) {
-
 
352
		$date = $element['date_observation'];
-
 
353
		$date = date("d/m/Y", strtotime($date));
351
		if ($this->etreNull($element['nom_sel']) && $this->etreNull($element['nom_sel_nn'])) {
354
		if ($this->etreNull($element['nom_sel']) && $this->etreNull($element['nom_sel_nn'])) {
352
			$titre = "Ajout d'une photo par ".$this->getIntituleAuteur($element['courriel_utilisateur']);
355
			$titre = "Ajout d'une photo par ".$this->getIntituleAuteur($element['courriel_utilisateur']).' le '.$date;;
353
		} else {
356
		} else {
354
			$titre = $element['nom_sel'].' [nn'.$element['nom_sel_nn'].'] par '.$element['prenom_utilisateur'].' '.$element['nom_utilisateur'];
357
			$titre = $element['nom_sel'].' [nn'.$element['nom_sel_nn'].'] par '.$element['prenom_utilisateur'].' '.$element['nom_utilisateur'].' le '.$date;;
355
		}
358
		}
356
		return $titre;
359
		return $titre;
357
	}
360
	}
358
 
361
 
359
	private function creerDescriptionSimple($donnees, $item) {
362
	private function creerDescriptionSimple($donnees, $item) {
360
		$description = sprintf($this->config['settings']['efloreUrlTpl'], urlencode($donnees['nom_sel_nn']), 'illustration');
363
		$description = sprintf($this->config['settings']['efloreUrlTpl'], urlencode($donnees['nom_sel_nn']), 'illustration');
361
		return $description;
364
		return $description;
362
	}
365
	}
363
 
366
 
364
	private function getServiceComplet() {
367
	private function getServiceComplet() {
365
 
368
 
366
		// Construction de la requête
369
		// Construction de la requête
367
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
370
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
368
			'	cim.id_image, ci.ce_utilisateur, nom_original, cim.date_creation, cim.mots_cles_texte as mots_cles_texte_images, '.
371
			'	cim.id_image, ci.ce_utilisateur, nom_original, cim.date_creation, cim.mots_cles_texte as mots_cles_texte_images, '.
369
			'   ci.mots_cles_texte as mots_cles_texte_obs, cim.commentaire as commentaire_img, note_qualite, '.
372
			'   ci.mots_cles_texte as mots_cles_texte_obs, cim.commentaire as commentaire_img, note_qualite, '.
370
			'	ci.commentaire as commentaire_obs '.
373
			'	ci.commentaire as commentaire_obs '.
371
			'FROM cel_images AS cim '.
374
			'FROM cel_images AS cim '.
372
			'	LEFT JOIN cel_obs_images AS coi '.
375
			'	LEFT JOIN cel_obs_images AS coi '.
373
			'		ON (coi.id_image = cim.id_image) '.
376
			'		ON (coi.id_image = cim.id_image) '.
374
			'	LEFT JOIN cel_obs AS ci '.
377
			'	LEFT JOIN cel_obs AS ci '.
375
			'		ON (coi.id_observation = ci.id_observation) '.
378
			'		ON (coi.id_observation = ci.id_observation) '.
376
			(($this->etreFluxAdmin()) ? '' : 'WHERE ci.transmission = 1 ').
379
			(($this->etreFluxAdmin()) ? '' : 'WHERE ci.transmission = 1 ').
377
			'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'cim.date_creation DESC').' '.
380
			'ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'cim.date_creation DESC').' '.
378
			"LIMIT $this->start, $this->limit ";
381
			"LIMIT $this->start, $this->limit ";
379
 
382
 
380
		$elements = $this->executerRequete($requete);
383
		$elements = $this->executerRequete($requete);
381
 
384
 
382
		// Création du contenu
385
		// Création du contenu
383
		if ($elements != false && count($elements) > 0) {
386
		if ($elements != false && count($elements) > 0) {
384
			$contenu = $this->executerService($elements);
387
			$contenu = $this->executerService($elements);
385
		} else {
388
		} else {
386
			$this->messages[] = "Aucune image disponible.";
389
			$this->messages[] = "Aucune image disponible.";
387
			$contenu = array();
390
			$contenu = array();
388
		}
391
		}
389
 
392
 
390
		return $contenu;
393
		return $contenu;
391
	}
394
	}
392
 
395
 
393
	private function getServiceMultiCriteres() {
396
	private function getServiceMultiCriteres() {
394
		$contenu = '';
397
		$contenu = '';
395
		if (isset($_GET['debut'])) $this->start = $_GET['debut'];
398
		if (isset($_GET['debut'])) $this->start = $_GET['debut'];
396
		if (isset($_GET['limite'])) $this->limite = $_GET['limite'];
399
		if (isset($_GET['limite'])) $this->limite = $_GET['limite'];
397
 
400
 
398
		// Construction de la requête
401
		// Construction de la requête
399
		$requete = 'SELECT *, b.mots_cles_texte as mots_cles_texte_obs, c.mots_cles_texte as mots_cles_texte_images, '.
402
		$requete = 'SELECT *, b.mots_cles_texte as mots_cles_texte_obs, c.mots_cles_texte as mots_cles_texte_images, '.
400
		    ' b.commentaire as commentaire_obs, c.commentaire as commentaire_img '.
403
		    ' b.commentaire as commentaire_obs, c.commentaire as commentaire_img '.
401
			'FROM cel_obs_images AS a '.
404
			'FROM cel_obs_images AS a '.
402
			'	INNER JOIN cel_obs AS b '.
405
			'	INNER JOIN cel_obs AS b '.
403
			'		ON (a.id_observation = b.id_observation) '.
406
			'		ON (a.id_observation = b.id_observation) '.
404
			'	INNER JOIN cel_images AS c '.
407
			'	INNER JOIN cel_images AS c '.
405
			'		ON (a.id_image = c.id_image) '.
408
			'		ON (a.id_image = c.id_image) '.
406
			'WHERE b.ce_utilisateur = c.ce_utilisateur '.
409
			'WHERE b.ce_utilisateur = c.ce_utilisateur '.
407
			(($this->etreFluxAdmin()) ? '' : 'AND b.transmission = 1 ').
410
			(($this->etreFluxAdmin()) ? '' : 'AND b.transmission = 1 ').
408
			'	AND ';
411
			'	AND ';
409
 
412
 
410
		if ($this->estUneRechercheGenerale()) {
413
		if ($this->estUneRechercheGenerale()) {
411
			$chaine_requete = $_GET['recherche'];
414
			$chaine_requete = $_GET['recherche'];
412
			$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
415
			$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
413
		} else {
416
		} else {
414
			$criteres = $this->traiterCriteresMultiples($_GET) ;
417
			$criteres = $this->traiterCriteresMultiples($_GET) ;
415
			if (!empty($criteres)) {
418
			if (!empty($criteres)) {
416
				$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
419
				$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
417
			}
420
			}
418
		}
421
		}
419
		$requete = str_replace(' AND ) ',' ', $requete);
422
		$requete = str_replace(' AND ) ',' ', $requete);
420
		$requete = rtrim($requete, 'AND ');
423
		$requete = rtrim($requete, 'AND ');
421
		$requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  :
424
		$requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  :
422
			'c.date_creation DESC').' '."LIMIT $this->start,$this->limit ";
425
			'c.date_creation DESC').' '."LIMIT $this->start,$this->limit ";
423
 
426
 
424
		$elements = $this->executerRequete($requete);
427
		$elements = $this->executerRequete($requete);
425
 
428
 
426
		// Création du contenu
429
		// Création du contenu
427
		if ($elements != false && count($elements) > 0) {
430
		if ($elements != false && count($elements) > 0) {
428
			$contenu = $this->executerService($elements);
431
			$contenu = $this->executerService($elements);
429
		} else {
432
		} else {
430
			$this->messages[] = "Aucune image disponible.";
433
			$this->messages[] = "Aucune image disponible.";
431
		}
434
		}
432
 
435
 
433
        return $contenu;
436
        return $contenu;
434
	}
437
	}
435
 
438
 
436
	private function creerSousRequeteRechercheParCriteres($criteres) {
439
	private function creerSousRequeteRechercheParCriteres($criteres) {
437
		$requete = '';
440
		$requete = '';
438
		foreach ($criteres as $pair) {
441
		foreach ($criteres as $pair) {
439
			$nom_valeur = explode("=",$pair);
442
			$nom_valeur = explode("=",$pair);
440
			if (sizeof($nom_valeur) != 0) {
443
			if (sizeof($nom_valeur) != 0) {
441
				switch ($nom_valeur[0]) {
444
				switch ($nom_valeur[0]) {
442
					case "ci_limite" : $this->limite = $this->bdd->quote($nom_valeur[1]); break;
445
					case "ci_limite" : $this->limite = $this->bdd->quote($nom_valeur[1]); break;
443
					case "c.ci_numero_page" : $this->limite*$this->bdd->quote($nom_valeur[1]); break;
446
					case "c.ci_numero_page" : $this->limite*$this->bdd->quote($nom_valeur[1]); break;
444
					case "c.commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
447
					case "c.commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
445
						foreach($mots_comment_liste as $mot_comment) {
448
						foreach($mots_comment_liste as $mot_comment) {
446
							$mot_comment = trim($mot_comment) ;
449
							$mot_comment = trim($mot_comment) ;
447
							$requete .= $nom_valeur[0].' LIKE '.$this->bdd->quote('%'.$mot_comment.'%').' AND ';
450
							$requete .= $nom_valeur[0].' LIKE '.$this->bdd->quote('%'.$mot_comment.'%').' AND ';
448
						}
451
						}
449
						break;
452
						break;
450
					case "c.date_prise_de_vue" :
453
					case "c.date_prise_de_vue" :
451
						$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
454
						$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
452
						if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $nom_valeur[1], $matches)) {
455
						if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $nom_valeur[1], $matches)) {
453
							$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
456
							$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
454
						}
457
						}
455
						$requete .= $nom_valeur[0].' LIKE '.$this->bdd->quote($nom_valeur[1]."%").' AND '; break;
458
						$requete .= $nom_valeur[0].' LIKE '.$this->bdd->quote($nom_valeur[1]."%").' AND '; break;
456
					case "b.ce_zone_geo" :
459
					case "b.ce_zone_geo" :
457
						$requete .= ' ('.$nom_valeur[0].' LIKE "%INSEE-C:'.$nom_valeur[1].'%") AND '; break;
460
						$requete .= ' ('.$nom_valeur[0].' LIKE "%INSEE-C:'.$nom_valeur[1].'%") AND '; break;
458
					case "b.nom_ret" :
461
					case "b.nom_ret" :
459
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
462
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
460
						$requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR b.nom_sel LIKE "%'.
463
						$requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR b.nom_sel LIKE "%'.
461
							$nom_valeur[1].'%") AND '; break;
464
							$nom_valeur[1].'%") AND '; break;
462
					case "tag" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]).' AND '; break;
465
					case "tag" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]).' AND '; break;
463
					case "projet" : $requete .= $this->creerSousRequeteProjet($nom_valeur[1]).' AND '; break;
466
					case "projet" : $requete .= $this->creerSousRequeteProjet($nom_valeur[1]).' AND '; break;
464
					default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
467
					default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
465
				}
468
				}
466
			}
469
			}
467
		}
470
		}
468
		$requete = rtrim($requete,' AND ');
471
		$requete = rtrim($requete,' AND ');
469
		return $requete;
472
		return $requete;
470
	}
473
	}
471
 
474
 
472
	private function creerSousRequeteMotsCles($mot_cle) {
475
	private function creerSousRequeteMotsCles($mot_cle) {
473
	$requete = '';
476
	$requete = '';
474
		if (preg_match('/.*OU.*/', $mot_cle)) {
477
		if (preg_match('/.*OU.*/', $mot_cle)) {
475
			$mots_cles_tab = explode('OU',$mot_cle);
478
			$mots_cles_tab = explode('OU',$mot_cle);
476
			foreach($mots_cles_tab as $mot_cle_item) {
479
			foreach($mots_cles_tab as $mot_cle_item) {
477
				$requete .= '(c.mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') OR ';
480
				$requete .= '(c.mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') OR ';
478
			}
481
			}
479
			$requete = '('.rtrim($requete,'OR ').')';
482
			$requete = '('.rtrim($requete,'OR ').')';
480
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
483
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
481
			$mots_cles_tab = explode('ET',$mot_cle);
484
			$mots_cles_tab = explode('ET',$mot_cle);
482
			foreach($mots_cles_tab as $mot_cle_item) {
485
			foreach($mots_cles_tab as $mot_cle_item) {
483
				$requete .= '(c.mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') AND ';
486
				$requete .= '(c.mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') AND ';
484
			}
487
			}
485
			$requete = '('.rtrim($requete, 'AND ').') ';
488
			$requete = '('.rtrim($requete, 'AND ').') ';
486
		} else {
489
		} else {
487
			$requete = "(c.mots_cles_texte LIKE ".$this->proteger('%'.$mot_cle.'%').') ';
490
			$requete = "(c.mots_cles_texte LIKE ".$this->proteger('%'.$mot_cle.'%').') ';
488
		}
491
		}
489
		return $requete;
492
		return $requete;
490
	}
493
	}
491
 
494
 
492
	private function creerSousRequeteProjet($mot_cle) {
495
	private function creerSousRequeteProjet($mot_cle) {
493
		$requete = '';
496
		$requete = '';
494
		if (preg_match('/.*OU.*/', $mot_cle)) {
497
		if (preg_match('/.*OU.*/', $mot_cle)) {
495
			$mots_cles_tab = explode('OU',$mot_cle);
498
			$mots_cles_tab = explode('OU',$mot_cle);
496
			foreach($mots_cles_tab as $mot_cle_item) {
499
			foreach($mots_cles_tab as $mot_cle_item) {
497
				$requete .= '(b.mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') OR ';
500
				$requete .= '(b.mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') OR ';
498
			}
501
			}
499
			$requete = '('.rtrim($requete,'OR ').')';
502
			$requete = '('.rtrim($requete,'OR ').')';
500
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
503
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
501
			$mots_cles_tab = explode('ET',$mot_cle);
504
			$mots_cles_tab = explode('ET',$mot_cle);
502
			foreach($mots_cles_tab as $mot_cle_item) {
505
			foreach($mots_cles_tab as $mot_cle_item) {
503
				$requete .= '(b.mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') AND ';
506
				$requete .= '(b.mots_cles_texte LIKE '.$this->proteger('%'.$mot_cle_item.'%').') AND ';
504
			}
507
			}
505
			$requete = '('.rtrim($requete, 'AND ').') ';
508
			$requete = '('.rtrim($requete, 'AND ').') ';
506
		} else {
509
		} else {
507
			$requete = "(b.mots_cles_texte LIKE ".$this->proteger('%'.$mot_cle.'%').') ';
510
			$requete = "(b.mots_cles_texte LIKE ".$this->proteger('%'.$mot_cle.'%').') ';
508
		}
511
		}
509
		return $requete;
512
		return $requete;
510
	}
513
	}
511
 
514
 
512
	private function creerSousRequeteRechercheGenerale($chaine_requete) {
515
	private function creerSousRequeteRechercheGenerale($chaine_requete) {
513
		$requete = '';
516
		$requete = '';
514
		if (trim($chaine_requete) != '') {
517
		if (trim($chaine_requete) != '') {
515
			$chaine_requete = strtolower($chaine_requete);
518
			$chaine_requete = strtolower($chaine_requete);
516
			$chaine_requete = str_replace(' ', '_', $chaine_requete);
519
			$chaine_requete = str_replace(' ', '_', $chaine_requete);
517
			$requete = ' ('.
520
			$requete = ' ('.
518
				'b.nom_ret LIKE "'.$chaine_requete.'%"'.
521
				'b.nom_ret LIKE "'.$chaine_requete.'%"'.
519
				' OR '.
522
				' OR '.
520
				'b.nom_sel LIKE "'.$chaine_requete.'%"'.
523
				'b.nom_sel LIKE "'.$chaine_requete.'%"'.
521
				' OR '.
524
				' OR '.
522
				'b.zone_geo LIKE "'.$chaine_requete.'%" '.
525
				'b.zone_geo LIKE "'.$chaine_requete.'%" '.
523
				' OR '.
526
				' OR '.
524
				'b.ce_zone_geo LIKE "INSEE-C:'.$chaine_requete.'%" '.
527
				'b.ce_zone_geo LIKE "INSEE-C:'.$chaine_requete.'%" '.
525
				' OR '.
528
				' OR '.
526
				'b.ce_zone_geo LIKE "'.$chaine_requete.'%" '.
529
				'b.ce_zone_geo LIKE "'.$chaine_requete.'%" '.
527
				' OR '.
530
				' OR '.
528
				'c.ce_utilisateur LIKE "'.$chaine_requete.'%" '.
531
				'c.ce_utilisateur LIKE "'.$chaine_requete.'%" '.
529
				' OR '.
532
				' OR '.
530
				'c.courriel_utilisateur LIKE "'.$chaine_requete.'%" '.
533
				'c.courriel_utilisateur LIKE "'.$chaine_requete.'%" '.
531
				' OR '.
534
				' OR '.
532
				'b.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
535
				'b.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
533
				' OR '.
536
				' OR '.
534
				'c.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
537
				'c.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
535
				') ';
538
				') ';
536
		}
539
		}
537
		return $requete;
540
		return $requete;
538
	}
541
	}
539
 
542
 
540
	private function estUneRechercheGenerale() {
543
	private function estUneRechercheGenerale() {
541
		return isset($_GET['recherche']);
544
		return isset($_GET['recherche']);
542
	}
545
	}
543
 
546
 
544
	private function traiterCriteresMultiples($tableau_criteres) {
547
	private function traiterCriteresMultiples($tableau_criteres) {
545
		$tableau_criteres_pour_bdd = array();
548
		$tableau_criteres_pour_bdd = array();
546
 
549
 
547
		foreach($tableau_criteres as $nom_critere => $valeur_critere) {
550
		foreach($tableau_criteres as $nom_critere => $valeur_critere) {
548
			if (isset($this->criteres[$nom_critere])) {
551
			if (isset($this->criteres[$nom_critere])) {
549
				$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
552
				$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
550
			}
553
			}
551
		}
554
		}
552
		return $tableau_criteres_pour_bdd;
555
		return $tableau_criteres_pour_bdd;
553
	}
556
	}
554
 
557
 
555
	private function creerDescriptionComplet($donnees, $item) {
558
	private function creerDescriptionComplet($donnees, $item) {
556
		$auteur = $this->getIntituleAuteur($donnees['courriel_utilisateur']);
559
		$auteur = $this->getIntituleAuteur($donnees['courriel_utilisateur']);
557
		$auteur_mail = $donnees['courriel_utilisateur'];
560
		$auteur_mail = $donnees['courriel_utilisateur'];
558
 
561
 
559
		$id_img = $donnees['id_image'];
562
		$id_img = $donnees['id_image'];
560
		$nom_fichier = $donnees['nom_original'];
563
		$nom_fichier = $donnees['nom_original'];
561
		$url_img = $this->getUrlImage($donnees['id_image'], 'CS');
564
		$url_img = $this->getUrlImage($donnees['id_image'], 'CS');
562
		$url_img_normale = $this->getUrlImage($donnees['id_image'], 'XL');
565
		$url_img_normale = $this->getUrlImage($donnees['id_image'], 'XL');
563
		//
566
		//
564
		$mots_cles_image = $donnees['mots_cles_texte_images'];
567
		$mots_cles_image = $donnees['mots_cles_texte_images'];
565
		$note = ($donnees['note_qualite'] +1).'/5';
568
		$note = ($donnees['note_qualite'] +1).'/5';
566
		$commentaire_img = $donnees['commentaire_img'];
569
		$commentaire_img = $donnees['commentaire_img'];
567
 
570
 
568
		$id_obs = $donnees['id_observation'];
571
		$id_obs = $donnees['id_observation'];
569
		$famille = $donnees['famille'];
572
		$famille = $donnees['famille'];
570
		$nom_saisi = $donnees['nom_sel'];
573
		$nom_saisi = $donnees['nom_sel'];
571
		$nom_retenu = $donnees['nom_ret'];
574
		$nom_retenu = $donnees['nom_ret'];
572
		//
575
		//
573
		$mots_cles_obs = $donnees['mots_cles_texte_obs'];
576
		$mots_cles_obs = $donnees['mots_cles_texte_obs'];
574
		$lieu =  $donnees['zone_geo'].' ('.$this->convertirCodeZoneGeoVersCodeInsee($donnees['ce_zone_geo']).') > '.$donnees['lieudit'].' > '.$donnees['station'];
577
		$lieu =  $donnees['zone_geo'].' ('.$this->convertirCodeZoneGeoVersCodeInsee($donnees['ce_zone_geo']).') > '.$donnees['lieudit'].' > '.$donnees['station'];
575
		$milieu = $donnees['milieu'];
578
		$milieu = $donnees['milieu'];
576
		$coordonnees = ($this->etreNull($donnees['latitude']) && $this->etreNull($donnees['longitude'])) ? '' : $donnees['latitude'].'/'.$donnees['longitude'];
579
		$coordonnees = ($this->etreNull($donnees['latitude']) && $this->etreNull($donnees['longitude'])) ? '' : $donnees['latitude'].'/'.$donnees['longitude'];
577
		$commentaire_obs = $donnees['commentaire_obs'];
580
		$commentaire_obs = $donnees['commentaire_obs'];
578
		$date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
581
		$date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
579
		$date_transmission = $this->formaterDate($donnees['date_transmission']);
582
		$date_transmission = $this->formaterDate($donnees['date_transmission']);
580
		$date_modification = $this->formaterDate($donnees['date_modification']);
583
		$date_modification = $this->formaterDate($donnees['date_modification']);
581
		$date_creation = $this->formaterDate($donnees['date_creation']);
584
		$date_creation = $this->formaterDate($donnees['date_creation']);
582
		$transmission = $donnees['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
585
		$transmission = $donnees['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
583
 
586
 
584
		$description = '<style>.champ{color:grey} .gauche{float:left;padding:0 20px 0 0;} ul{list-style-type:none;padding:0;}</style>'.
587
		$description = '<style>.champ{color:grey} .gauche{float:left;padding:0 20px 0 0;} ul{list-style-type:none;padding:0;}</style>'.
585
			'<h2>'.(!$this->etreNull($id_obs) ? "Image #$id_img liée à l'observation #$id_obs" : "Image #$id_img non liée à une observation.").'</h2>'.
588
			'<h2>'.(!$this->etreNull($id_obs) ? "Image #$id_img liée à l'observation #$id_obs" : "Image #$id_img non liée à une observation.").'</h2>'.
586
			'<a href="'.$url_img_normale.'"><img class="gauche" src="'.$url_img.'" alt="'.$nom_fichier.'" /></a>'.
589
			'<a href="'.$url_img_normale.'"><img class="gauche" src="'.$url_img.'" alt="'.$nom_fichier.'" /></a>'.
587
			'<div class="gauche">'.
590
			'<div class="gauche">'.
588
			'<h3>'.'Image'.'</h3>'.
591
			'<h3>'.'Image'.'</h3>'.
589
			'<ul>'.
592
			'<ul>'.
590
			'<li>'.'<span class="champ">URL :</span> <a href="'.$url_img_normale.'" onclick="javascript:window.open(this.href);return false;">'.$url_img_normale.'</a></li>'.
593
			'<li>'.'<span class="champ">URL :</span> <a href="'.$url_img_normale.'" onclick="javascript:window.open(this.href);return false;">'.$url_img_normale.'</a></li>'.
591
			'<li>'.'<span class="champ">Importée le :</span> '.$item['date_maj_simple'].'</li>'.
594
			'<li>'.'<span class="champ">Importée le :</span> '.$item['date_maj_simple'].'</li>'.
592
			'<li>'.'<span class="champ">Par :</span> '.
595
			'<li>'.'<span class="champ">Par :</span> '.
593
				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
596
				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
594
			'</li>'.
597
			'</li>'.
595
			'<li>'.'<span class="champ">Nom du fichier :</span> '.$nom_fichier.'</li>'.
598
			'<li>'.'<span class="champ">Nom du fichier :</span> '.$nom_fichier.'</li>'.
596
			'<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
599
			'<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
597
			'<li>'.'<span class="champ">Commentaires :</span> '.$commentaire_img.'</li>'.
600
			'<li>'.'<span class="champ">Commentaires :</span> '.$commentaire_img.'</li>'.
598
			'<li>'.'<span class="champ">Mots-clés :</span> '.$mots_cles_image.'</li>'.
601
			'<li>'.'<span class="champ">Mots-clés :</span> '.$mots_cles_image.'</li>'.
599
			'</ul>'.
602
			'</ul>'.
600
			'</div>';
603
			'</div>';
601
			// TODO : ajouter le champ commentaire EXIF.
604
			// TODO : ajouter le champ commentaire EXIF.
602
		if (! $this->etreNull($id_obs)) {
605
		if (! $this->etreNull($id_obs)) {
603
			$description .=
606
			$description .=
604
				'<div class="gauche">'.
607
				'<div class="gauche">'.
605
				'<h3>'.'Observation'.'</h3>'.
608
				'<h3>'.'Observation'.'</h3>'.
606
				'<ul>'.
609
				'<ul>'.
607
				'<li>'.'<span class="champ">Famille :</span> '.$famille.'</li>'.
610
				'<li>'.'<span class="champ">Famille :</span> '.$famille.'</li>'.
608
				'<li>'.'<span class="champ">Nom saisi :</span> '.$nom_saisi.'</li>'.
611
				'<li>'.'<span class="champ">Nom saisi :</span> '.$nom_saisi.'</li>'.
609
				'<li>'.'<span class="champ">Nom retenu :</span> '.$nom_retenu.'</li>'.
612
				'<li>'.'<span class="champ">Nom retenu :</span> '.$nom_retenu.'</li>'.
610
				'<li>'.'<span class="champ">Observée le :</span> '.$date_observation.'</li>'.
613
				'<li>'.'<span class="champ">Observée le :</span> '.$date_observation.'</li>'.
611
				'<li>'.'<span class="champ">Lieu :</span> '.$lieu.'</li>'.
614
				'<li>'.'<span class="champ">Lieu :</span> '.$lieu.'</li>'.
612
				'<li>'.'<span class="champ">Milieu :</span> '.$milieu.'</li>'.
615
				'<li>'.'<span class="champ">Milieu :</span> '.$milieu.'</li>'.
613
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Coordonnées (Lat/Long) :</span> '.$coordonnees.'</li>' : '').
616
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Coordonnées (Lat/Long) :</span> '.$coordonnees.'</li>' : '').
614
				'<li>'.'<span class="champ">Commentaire :</span> '.$commentaire_obs.'</li>'.
617
				'<li>'.'<span class="champ">Commentaire :</span> '.$commentaire_obs.'</li>'.
615
				'<li>'.'<span class="champ">Mots-clés :</span> '.$mots_cles_obs.'</li>'.
618
				'<li>'.'<span class="champ">Mots-clés :</span> '.$mots_cles_obs.'</li>'.
616
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Transmis (= public) :</span> '.$transmission.'</li>' : '').
619
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Transmis (= public) :</span> '.$transmission.'</li>' : '').
617
				'<li><span class="champ">Modifiée le :</span> '.$date_modification.'</li>'.
620
				'<li><span class="champ">Modifiée le :</span> '.$date_modification.'</li>'.
618
				'<li><span class="champ">Créée le :</span> '.$date_creation.'</li>'.
621
				'<li><span class="champ">Créée le :</span> '.$date_creation.'</li>'.
619
				'</ul>'.
622
				'</ul>'.
620
				'</div>';
623
				'</div>';
621
		}
624
		}
622
		$description = $this->nettoyerTexte($description);
625
		$description = $this->nettoyerTexte($description);
623
		return $description;
626
		return $description;
624
	}
627
	}
625
 
628
 
626
	private function getServiceParMotsCles() {
629
	private function getServiceParMotsCles() {
627
		$infos=array();
630
		$infos=array();
628
		$infos[0]['nom_sel_nn'] = '';
631
		$infos[0]['nom_sel_nn'] = '';
629
		$infos[0]['date_creation'] = '2011-06-28';
632
		$infos[0]['date_creation'] = '2011-06-28';
630
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
633
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
631
		$donnees['items'][0]['guid'] = 0;
634
		$donnees['items'][0]['guid'] = 0;
632
		$donnees['items'][0]['description'] =  'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
635
		$donnees['items'][0]['description'] =  'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
633
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?tag=';
636
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?tag=';
634
		if (isset($this->parametres[0])) {
637
		if (isset($this->parametres[0])) {
635
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
638
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
636
		} else {
639
		} else {
637
			$donnees['items'][0]['description'] .= '</b>';
640
			$donnees['items'][0]['description'] .= '</b>';
638
		}
641
		}
639
		$donnees['items'][0]['titre'] = '';
642
		$donnees['items'][0]['titre'] = '';
640
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
643
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
641
		return $contenu;
644
		return $contenu;
642
	}
645
	}
643
 
646
 
644
	private function getServiceParCommune() {
647
	private function getServiceParCommune() {
645
		$infos=array();
648
		$infos=array();
646
		$infos[0]['nom_sel_nn'] = '';
649
		$infos[0]['nom_sel_nn'] = '';
647
		$infos[0]['date_creation'] = '2011-06-28';
650
		$infos[0]['date_creation'] = '2011-06-28';
648
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
651
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
649
		$donnees['items'][0]['guid'] = 0;
652
		$donnees['items'][0]['guid'] = 0;
650
		$donnees['items'][0]['description'] = 'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
653
		$donnees['items'][0]['description'] = 'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
651
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?commune=';
654
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?commune=';
652
		if (isset($this->parametres[0])) {
655
		if (isset($this->parametres[0])) {
653
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
656
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
654
		} else {
657
		} else {
655
			$donnees['items'][0]['description'] .= '</b>';
658
			$donnees['items'][0]['description'] .= '</b>';
656
		}
659
		}
657
		$donnees['items'][0]['titre'] = '';
660
		$donnees['items'][0]['titre'] = '';
658
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
661
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
659
		return $contenu;
662
		return $contenu;
660
	}
663
	}
661
 
664
 
662
	private function getIntituleAuteur($courriel) {
665
	private function getIntituleAuteur($courriel) {
663
		$courriel = strtolower($courriel);
666
		$courriel = strtolower($courriel);
664
		$intitule = $this->auteurs[$courriel];
667
		$intitule = $this->auteurs[$courriel];
665
		return $intitule;
668
		return $intitule;
666
	}
669
	}
667
}
670
}