Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1361 Rev 1415
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['courriel_utilisateur']] = $element['courriel_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
 
224
		foreach ($elements as $element) {
224
		foreach ($elements as $element) {
225
			$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
225
			$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
226
		}
226
		}
227
 
227
 
228
		// Création du contenu à partir d'un template PHP
228
		// Création du contenu à partir d'un template PHP
229
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
229
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
230
 
230
 
231
		return $contenu;
231
		return $contenu;
232
	}
232
	}
233
 
233
 
234
	private function construireDonneesCommunesAuFlux($infos) {
234
	private function construireDonneesCommunesAuFlux($infos) {
235
		$donnees = $this->getFlux($this->service);
235
		$donnees = $this->getFlux($this->service);
236
		$donnees['guid'] = $this->getUrlServiceBase();
236
		$donnees['guid'] = $this->getUrlServiceBase();
237
		$donnees['lien_service'] = $this->creerUrlService();
237
		$donnees['lien_service'] = $this->creerUrlService();
238
		$donnees['lien_cel'] = (isset($infos['nom_sel_nn'])) ?
238
		$donnees['lien_cel'] = (isset($infos['nom_sel_nn'])) ?
239
			sprintf($this->config['settings']['efloreUrlTpl'], $infos['nom_sel_nn'], 'illustration') : '';
239
			sprintf($this->config['settings']['efloreUrlTpl'], $infos['nom_sel_nn'], 'illustration') : '';
240
		$donnees['editeur'] = $this->config['settings']['editeur'];
240
		$donnees['editeur'] = $this->config['settings']['editeur'];
241
		$derniere_info_en_date = reset($infos);
241
		$derniere_info_en_date = reset($infos);
242
		$date_modification_timestamp = strtotime($derniere_info_en_date['date_creation']);
242
		$date_modification_timestamp = strtotime($derniere_info_en_date['date_creation']);
243
		$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
243
		$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
244
		$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
244
		$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
245
		$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
245
		$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
246
		$donnees['annee_courante'] = date('Y');
246
		$donnees['annee_courante'] = date('Y');
247
		$donnees['generateur'] = 'CEL - Jrest - CelSyndicationImage';
247
		$donnees['generateur'] = 'CEL - Jrest - CelSyndicationImage';
248
		$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';
249
		return $donnees;
249
		return $donnees;
250
	}
250
	}
251
 
251
 
252
	private function construireDonneesCommunesAuxItems($info) {
252
	private function construireDonneesCommunesAuxItems($info) {
253
		$item = array();
253
		$item = array();
254
		$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($info['date_creation']);
254
		$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($info['date_creation']);
255
		$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);
256
		$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
256
		$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
257
		$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
257
		$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
258
		$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
258
		$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
259
		$item['titre'] = $this->creerTitre($info);
259
		$item['titre'] = $this->creerTitre($info);
260
		$item['guid'] = $this->creerGuidItem($info);
260
		$item['guid'] = $this->creerGuidItem($info);
261
		$item['lien'] = $this->creerLienItem($info);
261
		$item['lien'] = $this->creerLienItem($info);
262
		$item['categorie'] = $this->creerCategorie($item);
262
		$item['categorie'] = $this->creerCategorie($item);
263
		$item['description'] = $this->creerDescription($this->protegerCaracteresHtmlDansChamps($info), $item);
263
		$item['description'] = $this->creerDescription($this->protegerCaracteresHtmlDansChamps($info), $item);
264
		$item['description_encodee'] = htmlspecialchars($this->creerDescription($info, $item));
264
		$item['description_encodee'] = htmlspecialchars($this->creerDescription($info, $item));
265
		$item['modifier_par'] = $this->getIntituleAuteur($info['courriel_utilisateur']);
265
		$item['modifier_par'] = $this->getIntituleAuteur($info['courriel_utilisateur']);
266
		return $item;
266
		return $item;
267
	}
267
	}
268
 
268
 
269
	private function creerGuidItem($element) {
269
	private function creerGuidItem($element) {
270
		$guid = $this->getUrlImage($element['id_image']);
270
		$guid = $this->getUrlImage($element['id_image']);
271
		return $guid;
271
		return $guid;
272
	}
272
	}
273
 
273
 
274
	private function creerTitre($element) {
274
	private function creerTitre($element) {
275
		$methode = 'creerTitre'.$this->service;
275
		$methode = 'creerTitre'.$this->service;
276
		$methode = (method_exists($this, $methode)) ? $methode : 'creerTitreSimple';
276
		$methode = (method_exists($this, $methode)) ? $methode : 'creerTitreSimple';
277
		$titre = $this->$methode($element);
277
		$titre = $this->$methode($element);
278
		$titre = $this->nettoyerTexte($titre);
278
		$titre = $this->nettoyerTexte($titre);
279
		return $titre;
279
		return $titre;
280
	}
280
	}
281
 
281
 
282
	private function creerDescription($donnees, $item) {
282
	private function creerDescription($donnees, $item) {
283
		$methode = 'creerDescription'.$this->service;
283
		$methode = 'creerDescription'.$this->service;
284
		$methode = (method_exists($this, $methode)) ? $methode : 'creerDescriptionComplet';
284
		$methode = (method_exists($this, $methode)) ? $methode : 'creerDescriptionComplet';
285
		$description = $this->$methode($donnees, $item);
285
		$description = $this->$methode($donnees, $item);
286
		$description = $this->nettoyerTexte($description);
286
		$description = $this->nettoyerTexte($description);
287
		return $description;
287
		return $description;
288
	}
288
	}
289
 
289
 
290
	private function creerLienItem($element) {
290
	private function creerLienItem($element) {
291
 
291
 
292
		if ($this->etreNull($element['id_observation'])) {
292
		if ($this->etreNull($element['id_observation'])) {
293
			// Lien vers image grand format
293
			// Lien vers image grand format
294
			$lien = $this->getUrlImage($element['id_image'], $this->format_image);
294
			$lien = $this->getUrlImage($element['id_image'], $this->format_image);
295
		} else {
295
		} else {
296
			// Lien vers fiche eFlore onglet Illustration
296
			// Lien vers fiche eFlore onglet Illustration
297
			$lien = sprintf($this->config['settings']['efloreUrlTpl'], $element['nom_sel_nn'], 'illustration');
297
			$lien = sprintf($this->config['settings']['efloreUrlTpl'], $element['nom_sel_nn'], 'illustration');
298
		}
298
		}
299
		return $lien;
299
		return $lien;
300
	}
300
	}
301
 
301
 
302
	private function getServiceListeDesFlux() {
302
	private function getServiceListeDesFlux() {
303
		return $this->flux;
303
		return $this->flux;
304
	}
304
	}
305
 
305
 
306
	private function getServiceOpml() {
306
	private function getServiceOpml() {
307
		$donnees = array();
307
		$donnees = array();
308
		$id = 1;
308
		$id = 1;
309
		foreach ($this->flux as $flux_nom => $flux){
309
		foreach ($this->flux as $flux_nom => $flux){
310
			$info = array();
310
			$info = array();
311
			$info['type'] = 'atom';
311
			$info['type'] = 'atom';
312
			$info['titre'] = $flux['titre'];
312
			$info['titre'] = $flux['titre'];
313
			$info['texte'] = "CEL - Images - $flux_nom";
313
			$info['texte'] = "CEL - Images - $flux_nom";
314
			$info['description'] = $flux['description'];
314
			$info['description'] = $flux['description'];
315
			$info['url_xml'] = $this->getUrlBase().$flux_nom.'/atom';
315
			$info['url_xml'] = $this->getUrlBase().$flux_nom.'/atom';
316
			$info['url_html'] = $this->config['settings']['aideCelUrl'].'FluxSyndication';
316
			$info['url_html'] = $this->config['settings']['aideCelUrl'].'FluxSyndication';
317
			$donnees['liste_flux'][] = $info;
317
			$donnees['liste_flux'][] = $info;
318
		}
318
		}
319
 
319
 
320
		$this->squelette = $this->squelette_dossier.'opml.tpl.xml';
320
		$this->squelette = $this->squelette_dossier.'opml.tpl.xml';
321
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
321
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
322
		return $contenu;
322
		return $contenu;
323
	}
323
	}
324
 
324
 
325
	private function getServiceSimple() {
325
	private function getServiceSimple() {
326
		if (isset($this->parametres[0])) {
326
		if (isset($this->parametres[0])) {
327
			$this->format_image = $this->parametres[0];
327
			$this->format_image = $this->parametres[0];
328
		}
328
		}
329
 
329
 
330
		// Construction de la requête
330
		// Construction de la requête
331
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
331
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
332
			' 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,
333
				 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  '.
334
			'FROM cel_obs_images AS coi '.
334
			'FROM cel_obs_images AS coi '.
335
			'LEFT JOIN cel_obs AS ci '.
335
			'LEFT JOIN cel_obs AS ci '.
336
				'ON (coi.id_observation = ci.id_observation) '.
336
				'ON (coi.id_observation = ci.id_observation) '.
337
			'LEFT JOIN cel_images AS cim '.
337
			'LEFT JOIN cel_images AS cim '.
338
				'ON (coi.id_image = cim.id_image) '.
338
				'ON (coi.id_image = cim.id_image) '.
339
			'WHERE ci.transmission = 1 '.
339
			'WHERE ci.transmission = 1 '.
340
			'	AND ci.ce_utilisateur = cim.ce_utilisateur '.
340
			'	AND ci.ce_utilisateur = cim.ce_utilisateur '.
341
			'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').' '.
342
			"LIMIT $this->start, $this->limit ";
342
			"LIMIT $this->start, $this->limit ";
343
 
343
 
344
		$elements = $this->executerRequete($requete);
344
		$elements = $this->executerRequete($requete);
345
 
345
 
346
		// Création du contenu
346
		// Création du contenu
347
		$contenu = $this->executerService($elements);
347
		$contenu = $this->executerService($elements);
348
		return $contenu;
348
		return $contenu;
349
	}
349
	}
350
 
350
 
351
	private function creerTitreSimple($element) {
351
	private function creerTitreSimple($element) {
352
		$date = $element['date_observation'];
352
		$date = $element['date_observation'];
353
		$date = date("d/m/Y", strtotime($date));
353
		$date = date("d/m/Y", strtotime($date));
354
		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'])) {
355
			$titre = "Ajout d'une photo par ".$this->getIntituleAuteur($element['courriel_utilisateur']).' le '.$date;;
355
			$titre = "Ajout d'une photo par ".$this->getIntituleAuteur($element['courriel_utilisateur']).' le '.$date;;
356
		} else {
356
		} else {
357
			$titre = $element['nom_sel'].' [nn'.$element['nom_sel_nn'].'] par '.$element['prenom_utilisateur'].' '.$element['nom_utilisateur'].' le '.$date;;
357
			$titre = $element['nom_sel'].' [nn'.$element['nom_sel_nn'].'] par '.$this->getIntituleAuteur($element['courriel_utilisateur']).' le '.$date;;
358
		}
358
		}
359
		return $titre;
359
		return $titre;
360
	}
360
	}
361
 
361
 
362
	private function creerDescriptionSimple($donnees, $item) {
362
	private function creerDescriptionSimple($donnees, $item) {
363
		$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');
364
		return $description;
364
		return $description;
365
	}
365
	}
366
 
366
 
367
	private function getServiceComplet() {
367
	private function getServiceComplet() {
368
 
368
 
369
		// Construction de la requête
369
		// Construction de la requête
370
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
370
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
371
			'	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, '.
372
			'   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, '.
373
			'	ci.commentaire as commentaire_obs '.
373
			'	ci.commentaire as commentaire_obs '.
374
			'FROM cel_images AS cim '.
374
			'FROM cel_images AS cim '.
375
			'	LEFT JOIN cel_obs_images AS coi '.
375
			'	LEFT JOIN cel_obs_images AS coi '.
376
			'		ON (coi.id_image = cim.id_image) '.
376
			'		ON (coi.id_image = cim.id_image) '.
377
			'	LEFT JOIN cel_obs AS ci '.
377
			'	LEFT JOIN cel_obs AS ci '.
378
			'		ON (coi.id_observation = ci.id_observation) '.
378
			'		ON (coi.id_observation = ci.id_observation) '.
379
			(($this->etreFluxAdmin()) ? '' : 'WHERE ci.transmission = 1 ').
379
			(($this->etreFluxAdmin()) ? '' : 'WHERE ci.transmission = 1 ').
380
			'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').' '.
381
			"LIMIT $this->start, $this->limit ";
381
			"LIMIT $this->start, $this->limit ";
382
 
382
 
383
		$elements = $this->executerRequete($requete);
383
		$elements = $this->executerRequete($requete);
384
 
384
 
385
		// Création du contenu
385
		// Création du contenu
386
		if ($elements != false && count($elements) > 0) {
386
		if ($elements != false && count($elements) > 0) {
387
			$contenu = $this->executerService($elements);
387
			$contenu = $this->executerService($elements);
388
		} else {
388
		} else {
389
			$this->messages[] = "Aucune image disponible.";
389
			$this->messages[] = "Aucune image disponible.";
390
			$contenu = array();
390
			$contenu = array();
391
		}
391
		}
392
 
392
 
393
		return $contenu;
393
		return $contenu;
394
	}
394
	}
395
 
395
 
396
	private function getServiceMultiCriteres() {
396
	private function getServiceMultiCriteres() {
397
		$contenu = '';
397
		$contenu = '';
398
		if (isset($_GET['debut'])) $this->start = $_GET['debut'];
398
		if (isset($_GET['debut'])) $this->start = $_GET['debut'];
399
		if (isset($_GET['limite'])) $this->limite = $_GET['limite'];
399
		if (isset($_GET['limite'])) $this->limite = $_GET['limite'];
400
 
400
 
401
		// Construction de la requête
401
		// Construction de la requête
402
		$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, '.
403
		    ' b.commentaire as commentaire_obs, c.commentaire as commentaire_img '.
403
		    ' b.commentaire as commentaire_obs, c.commentaire as commentaire_img '.
404
			'FROM cel_obs_images AS a '.
404
			'FROM cel_obs_images AS a '.
405
			'	INNER JOIN cel_obs AS b '.
405
			'	INNER JOIN cel_obs AS b '.
406
			'		ON (a.id_observation = b.id_observation) '.
406
			'		ON (a.id_observation = b.id_observation) '.
407
			'	INNER JOIN cel_images AS c '.
407
			'	INNER JOIN cel_images AS c '.
408
			'		ON (a.id_image = c.id_image) '.
408
			'		ON (a.id_image = c.id_image) '.
409
			'WHERE b.ce_utilisateur = c.ce_utilisateur '.
409
			'WHERE b.ce_utilisateur = c.ce_utilisateur '.
410
			(($this->etreFluxAdmin()) ? '' : 'AND b.transmission = 1 ').
410
			(($this->etreFluxAdmin()) ? '' : 'AND b.transmission = 1 ').
411
			'	AND ';
411
			'	AND ';
412
 
412
 
413
		if ($this->estUneRechercheGenerale()) {
413
		if ($this->estUneRechercheGenerale()) {
414
			$chaine_requete = $_GET['recherche'];
414
			$chaine_requete = $_GET['recherche'];
415
			$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
415
			$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
416
		} else {
416
		} else {
417
			$criteres = $this->traiterCriteresMultiples($_GET) ;
417
			$criteres = $this->traiterCriteresMultiples($_GET) ;
418
			if (!empty($criteres)) {
418
			if (!empty($criteres)) {
419
				$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
419
				$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
420
			}
420
			}
421
		}
421
		}
422
		$requete = str_replace(' AND ) ',' ', $requete);
422
		$requete = str_replace(' AND ) ',' ', $requete);
423
		$requete = rtrim($requete, 'AND ');
423
		$requete = rtrim($requete, 'AND ');
424
		$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  :
425
			'c.date_creation DESC').' '."LIMIT $this->start,$this->limit ";
425
			'c.date_creation DESC').' '."LIMIT $this->start,$this->limit ";
426
 
426
 
427
		$elements = $this->executerRequete($requete);
427
		$elements = $this->executerRequete($requete);
428
 
428
 
429
		// Création du contenu
429
		// Création du contenu
430
		if ($elements != false && count($elements) > 0) {
430
		if ($elements != false && count($elements) > 0) {
431
			$contenu = $this->executerService($elements);
431
			$contenu = $this->executerService($elements);
432
		} else {
432
		} else {
433
			$this->messages[] = "Aucune image disponible.";
433
			$this->messages[] = "Aucune image disponible.";
434
		}
434
		}
435
 
435
 
436
        return $contenu;
436
        return $contenu;
437
	}
437
	}
438
 
438
 
439
	private function creerSousRequeteRechercheParCriteres($criteres) {
439
	private function creerSousRequeteRechercheParCriteres($criteres) {
440
		$requete = '';
440
		$requete = '';
441
		foreach ($criteres as $pair) {
441
		foreach ($criteres as $pair) {
442
			$nom_valeur = explode("=",$pair);
442
			$nom_valeur = explode("=",$pair);
443
			if (sizeof($nom_valeur) != 0) {
443
			if (sizeof($nom_valeur) != 0) {
444
				switch ($nom_valeur[0]) {
444
				switch ($nom_valeur[0]) {
445
					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;
446
					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;
447
					case "c.commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
447
					case "c.commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
448
						foreach($mots_comment_liste as $mot_comment) {
448
						foreach($mots_comment_liste as $mot_comment) {
449
							$mot_comment = trim($mot_comment) ;
449
							$mot_comment = trim($mot_comment) ;
450
							$requete .= $nom_valeur[0].' LIKE '.$this->bdd->quote('%'.$mot_comment.'%').' AND ';
450
							$requete .= $nom_valeur[0].' LIKE '.$this->bdd->quote('%'.$mot_comment.'%').' AND ';
451
						}
451
						}
452
						break;
452
						break;
453
					case "c.date_prise_de_vue" :
453
					case "c.date_prise_de_vue" :
454
						$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
454
						$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
455
						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)) {
456
							$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
456
							$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
457
						}
457
						}
458
						$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;
459
					case "b.ce_zone_geo" :
459
					case "b.ce_zone_geo" :
460
						$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;
461
					case "b.nom_ret" :
461
					case "b.nom_ret" :
462
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
462
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
463
						$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 "%'.
464
							$nom_valeur[1].'%") AND '; break;
464
							$nom_valeur[1].'%") AND '; break;
465
					case "tag" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]).' AND '; break;
465
					case "tag" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]).' AND '; break;
466
					case "projet" : $requete .= $this->creerSousRequeteProjet($nom_valeur[1]).' AND '; break;
466
					case "projet" : $requete .= $this->creerSousRequeteProjet($nom_valeur[1]).' AND '; break;
467
					default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
467
					default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
468
				}
468
				}
469
			}
469
			}
470
		}
470
		}
471
		$requete = rtrim($requete,' AND ');
471
		$requete = rtrim($requete,' AND ');
472
		return $requete;
472
		return $requete;
473
	}
473
	}
474
 
474
 
475
	private function creerSousRequeteMotsCles($mot_cle) {
475
	private function creerSousRequeteMotsCles($mot_cle) {
476
	$requete = '';
476
	$requete = '';
477
		if (preg_match('/.*OU.*/', $mot_cle)) {
477
		if (preg_match('/.*OU.*/', $mot_cle)) {
478
			$mots_cles_tab = explode('OU',$mot_cle);
478
			$mots_cles_tab = explode('OU',$mot_cle);
479
			foreach($mots_cles_tab as $mot_cle_item) {
479
			foreach($mots_cles_tab as $mot_cle_item) {
480
				$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 ';
481
			}
481
			}
482
			$requete = '('.rtrim($requete,'OR ').')';
482
			$requete = '('.rtrim($requete,'OR ').')';
483
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
483
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
484
			$mots_cles_tab = explode('ET',$mot_cle);
484
			$mots_cles_tab = explode('ET',$mot_cle);
485
			foreach($mots_cles_tab as $mot_cle_item) {
485
			foreach($mots_cles_tab as $mot_cle_item) {
486
				$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 ';
487
			}
487
			}
488
			$requete = '('.rtrim($requete, 'AND ').') ';
488
			$requete = '('.rtrim($requete, 'AND ').') ';
489
		} else {
489
		} else {
490
			$requete = "(c.mots_cles_texte LIKE ".$this->proteger('%'.$mot_cle.'%').') ';
490
			$requete = "(c.mots_cles_texte LIKE ".$this->proteger('%'.$mot_cle.'%').') ';
491
		}
491
		}
492
		return $requete;
492
		return $requete;
493
	}
493
	}
494
 
494
 
495
	private function creerSousRequeteProjet($mot_cle) {
495
	private function creerSousRequeteProjet($mot_cle) {
496
		$requete = '';
496
		$requete = '';
497
		if (preg_match('/.*OU.*/', $mot_cle)) {
497
		if (preg_match('/.*OU.*/', $mot_cle)) {
498
			$mots_cles_tab = explode('OU',$mot_cle);
498
			$mots_cles_tab = explode('OU',$mot_cle);
499
			foreach($mots_cles_tab as $mot_cle_item) {
499
			foreach($mots_cles_tab as $mot_cle_item) {
500
				$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 ';
501
			}
501
			}
502
			$requete = '('.rtrim($requete,'OR ').')';
502
			$requete = '('.rtrim($requete,'OR ').')';
503
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
503
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
504
			$mots_cles_tab = explode('ET',$mot_cle);
504
			$mots_cles_tab = explode('ET',$mot_cle);
505
			foreach($mots_cles_tab as $mot_cle_item) {
505
			foreach($mots_cles_tab as $mot_cle_item) {
506
				$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 ';
507
			}
507
			}
508
			$requete = '('.rtrim($requete, 'AND ').') ';
508
			$requete = '('.rtrim($requete, 'AND ').') ';
509
		} else {
509
		} else {
510
			$requete = "(b.mots_cles_texte LIKE ".$this->proteger('%'.$mot_cle.'%').') ';
510
			$requete = "(b.mots_cles_texte LIKE ".$this->proteger('%'.$mot_cle.'%').') ';
511
		}
511
		}
512
		return $requete;
512
		return $requete;
513
	}
513
	}
514
 
514
 
515
	private function creerSousRequeteRechercheGenerale($chaine_requete) {
515
	private function creerSousRequeteRechercheGenerale($chaine_requete) {
516
		$requete = '';
516
		$requete = '';
517
		if (trim($chaine_requete) != '') {
517
		if (trim($chaine_requete) != '') {
518
			$chaine_requete = strtolower($chaine_requete);
518
			$chaine_requete = strtolower($chaine_requete);
519
			$chaine_requete = str_replace(' ', '_', $chaine_requete);
519
			$chaine_requete = str_replace(' ', '_', $chaine_requete);
520
			$requete = ' ('.
520
			$requete = ' ('.
521
				'b.nom_ret LIKE "'.$chaine_requete.'%"'.
521
				'b.nom_ret LIKE "'.$chaine_requete.'%"'.
522
				' OR '.
522
				' OR '.
523
				'b.nom_sel LIKE "'.$chaine_requete.'%"'.
523
				'b.nom_sel LIKE "'.$chaine_requete.'%"'.
524
				' OR '.
524
				' OR '.
525
				'b.zone_geo LIKE "'.$chaine_requete.'%" '.
525
				'b.zone_geo LIKE "'.$chaine_requete.'%" '.
526
				' OR '.
526
				' OR '.
527
				'b.ce_zone_geo LIKE "INSEE-C:'.$chaine_requete.'%" '.
527
				'b.ce_zone_geo LIKE "INSEE-C:'.$chaine_requete.'%" '.
528
				' OR '.
528
				' OR '.
529
				'b.ce_zone_geo LIKE "'.$chaine_requete.'%" '.
529
				'b.ce_zone_geo LIKE "'.$chaine_requete.'%" '.
530
				' OR '.
530
				' OR '.
531
				'c.ce_utilisateur LIKE "'.$chaine_requete.'%" '.
531
				'c.ce_utilisateur LIKE "'.$chaine_requete.'%" '.
532
				' OR '.
532
				' OR '.
533
				'c.courriel_utilisateur LIKE "'.$chaine_requete.'%" '.
533
				'c.courriel_utilisateur LIKE "'.$chaine_requete.'%" '.
534
				' OR '.
534
				' OR '.
535
				'b.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
535
				'b.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
536
				' OR '.
536
				' OR '.
537
				'c.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
537
				'c.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
538
				') ';
538
				') ';
539
		}
539
		}
540
		return $requete;
540
		return $requete;
541
	}
541
	}
542
 
542
 
543
	private function estUneRechercheGenerale() {
543
	private function estUneRechercheGenerale() {
544
		return isset($_GET['recherche']);
544
		return isset($_GET['recherche']);
545
	}
545
	}
546
 
546
 
547
	private function traiterCriteresMultiples($tableau_criteres) {
547
	private function traiterCriteresMultiples($tableau_criteres) {
548
		$tableau_criteres_pour_bdd = array();
548
		$tableau_criteres_pour_bdd = array();
549
 
549
 
550
		foreach($tableau_criteres as $nom_critere => $valeur_critere) {
550
		foreach($tableau_criteres as $nom_critere => $valeur_critere) {
551
			if (isset($this->criteres[$nom_critere])) {
551
			if (isset($this->criteres[$nom_critere])) {
552
				$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
552
				$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
553
			}
553
			}
554
		}
554
		}
555
		return $tableau_criteres_pour_bdd;
555
		return $tableau_criteres_pour_bdd;
556
	}
556
	}
557
 
557
 
558
	private function creerDescriptionComplet($donnees, $item) {
558
	private function creerDescriptionComplet($donnees, $item) {
559
		$auteur = $this->getIntituleAuteur($donnees['courriel_utilisateur']);
559
		$auteur = $this->getIntituleAuteur($donnees['courriel_utilisateur']);
560
		$auteur_mail = $donnees['courriel_utilisateur'];
560
		$auteur_mail = $donnees['courriel_utilisateur'];
561
 
561
 
562
		$id_img = $donnees['id_image'];
562
		$id_img = $donnees['id_image'];
563
		$nom_fichier = $donnees['nom_original'];
563
		$nom_fichier = $donnees['nom_original'];
564
		$url_img = $this->getUrlImage($donnees['id_image'], 'CS');
564
		$url_img = $this->getUrlImage($donnees['id_image'], 'CS');
565
		$url_img_normale = $this->getUrlImage($donnees['id_image'], 'XL');
565
		$url_img_normale = $this->getUrlImage($donnees['id_image'], 'XL');
566
		//
566
		//
567
		$mots_cles_image = $donnees['mots_cles_texte_images'];
567
		$mots_cles_image = $donnees['mots_cles_texte_images'];
568
		$note = ($donnees['note_qualite'] +1).'/5';
568
		$note = ($donnees['note_qualite'] +1).'/5';
569
		$commentaire_img = $donnees['commentaire_img'];
569
		$commentaire_img = $donnees['commentaire_img'];
570
 
570
 
571
		$id_obs = $donnees['id_observation'];
571
		$id_obs = $donnees['id_observation'];
572
		$famille = $donnees['famille'];
572
		$famille = $donnees['famille'];
573
		$nom_saisi = $donnees['nom_sel'];
573
		$nom_saisi = $donnees['nom_sel'];
574
		$nom_retenu = $donnees['nom_ret'];
574
		$nom_retenu = $donnees['nom_ret'];
575
		//
575
		//
576
		$mots_cles_obs = $donnees['mots_cles_texte_obs'];
576
		$mots_cles_obs = $donnees['mots_cles_texte_obs'];
577
		$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'];
578
		$milieu = $donnees['milieu'];
578
		$milieu = $donnees['milieu'];
579
		$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'];
580
		$commentaire_obs = $donnees['commentaire_obs'];
580
		$commentaire_obs = $donnees['commentaire_obs'];
581
		$date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
581
		$date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
582
		$date_transmission = $this->formaterDate($donnees['date_transmission']);
582
		$date_transmission = $this->formaterDate($donnees['date_transmission']);
583
		$date_modification = $this->formaterDate($donnees['date_modification']);
583
		$date_modification = $this->formaterDate($donnees['date_modification']);
584
		$date_creation = $this->formaterDate($donnees['date_creation']);
584
		$date_creation = $this->formaterDate($donnees['date_creation']);
585
		$transmission = $donnees['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
585
		$transmission = $donnees['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
586
 
586
 
587
		$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>'.
588
			'<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>'.
589
			'<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>'.
590
			'<div class="gauche">'.
590
			'<div class="gauche">'.
591
			'<h3>'.'Image'.'</h3>'.
591
			'<h3>'.'Image'.'</h3>'.
592
			'<ul>'.
592
			'<ul>'.
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>'.
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>'.
594
			'<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>'.
595
			'<li>'.'<span class="champ">Par :</span> '.
595
			'<li>'.'<span class="champ">Par :</span> '.
596
				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
596
				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
597
			'</li>'.
597
			'</li>'.
598
			'<li>'.'<span class="champ">Nom du fichier :</span> '.$nom_fichier.'</li>'.
598
			'<li>'.'<span class="champ">Nom du fichier :</span> '.$nom_fichier.'</li>'.
599
			'<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
599
			'<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
600
			'<li>'.'<span class="champ">Commentaires :</span> '.$commentaire_img.'</li>'.
600
			'<li>'.'<span class="champ">Commentaires :</span> '.$commentaire_img.'</li>'.
601
			'<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>'.
602
			'</ul>'.
602
			'</ul>'.
603
			'</div>';
603
			'</div>';
604
			// TODO : ajouter le champ commentaire EXIF.
604
			// TODO : ajouter le champ commentaire EXIF.
605
		if (! $this->etreNull($id_obs)) {
605
		if (! $this->etreNull($id_obs)) {
606
			$description .=
606
			$description .=
607
				'<div class="gauche">'.
607
				'<div class="gauche">'.
608
				'<h3>'.'Observation'.'</h3>'.
608
				'<h3>'.'Observation'.'</h3>'.
609
				'<ul>'.
609
				'<ul>'.
610
				'<li>'.'<span class="champ">Famille :</span> '.$famille.'</li>'.
610
				'<li>'.'<span class="champ">Famille :</span> '.$famille.'</li>'.
611
				'<li>'.'<span class="champ">Nom saisi :</span> '.$nom_saisi.'</li>'.
611
				'<li>'.'<span class="champ">Nom saisi :</span> '.$nom_saisi.'</li>'.
612
				'<li>'.'<span class="champ">Nom retenu :</span> '.$nom_retenu.'</li>'.
612
				'<li>'.'<span class="champ">Nom retenu :</span> '.$nom_retenu.'</li>'.
613
				'<li>'.'<span class="champ">Observée le :</span> '.$date_observation.'</li>'.
613
				'<li>'.'<span class="champ">Observée le :</span> '.$date_observation.'</li>'.
614
				'<li>'.'<span class="champ">Lieu :</span> '.$lieu.'</li>'.
614
				'<li>'.'<span class="champ">Lieu :</span> '.$lieu.'</li>'.
615
				'<li>'.'<span class="champ">Milieu :</span> '.$milieu.'</li>'.
615
				'<li>'.'<span class="champ">Milieu :</span> '.$milieu.'</li>'.
616
				(($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>' : '').
617
				'<li>'.'<span class="champ">Commentaire :</span> '.$commentaire_obs.'</li>'.
617
				'<li>'.'<span class="champ">Commentaire :</span> '.$commentaire_obs.'</li>'.
618
				'<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>'.
619
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Transmis (= public) :</span> '.$transmission.'</li>' : '').
619
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Transmis (= public) :</span> '.$transmission.'</li>' : '').
620
				'<li><span class="champ">Modifiée le :</span> '.$date_modification.'</li>'.
620
				'<li><span class="champ">Modifiée le :</span> '.$date_modification.'</li>'.
621
				'<li><span class="champ">Créée le :</span> '.$date_creation.'</li>'.
621
				'<li><span class="champ">Créée le :</span> '.$date_creation.'</li>'.
622
				'</ul>'.
622
				'</ul>'.
623
				'</div>';
623
				'</div>';
624
		}
624
		}
625
		$description = $this->nettoyerTexte($description);
625
		$description = $this->nettoyerTexte($description);
626
		return $description;
626
		return $description;
627
	}
627
	}
628
 
628
 
629
	private function getServiceParMotsCles() {
629
	private function getServiceParMotsCles() {
630
		$infos=array();
630
		$infos=array();
631
		$infos[0]['nom_sel_nn'] = '';
631
		$infos[0]['nom_sel_nn'] = '';
632
		$infos[0]['date_creation'] = '2011-06-28';
632
		$infos[0]['date_creation'] = '2011-06-28';
633
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
633
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
634
		$donnees['items'][0]['guid'] = 0;
634
		$donnees['items'][0]['guid'] = 0;
635
		$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 '.
636
			'<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=';
637
		if (isset($this->parametres[0])) {
637
		if (isset($this->parametres[0])) {
638
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
638
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
639
		} else {
639
		} else {
640
			$donnees['items'][0]['description'] .= '</b>';
640
			$donnees['items'][0]['description'] .= '</b>';
641
		}
641
		}
642
		$donnees['items'][0]['titre'] = '';
642
		$donnees['items'][0]['titre'] = '';
643
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
643
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
644
		return $contenu;
644
		return $contenu;
645
	}
645
	}
646
 
646
 
647
	private function getServiceParCommune() {
647
	private function getServiceParCommune() {
648
		$infos=array();
648
		$infos=array();
649
		$infos[0]['nom_sel_nn'] = '';
649
		$infos[0]['nom_sel_nn'] = '';
650
		$infos[0]['date_creation'] = '2011-06-28';
650
		$infos[0]['date_creation'] = '2011-06-28';
651
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
651
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
652
		$donnees['items'][0]['guid'] = 0;
652
		$donnees['items'][0]['guid'] = 0;
653
		$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 '.
654
			'<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=';
655
		if (isset($this->parametres[0])) {
655
		if (isset($this->parametres[0])) {
656
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
656
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
657
		} else {
657
		} else {
658
			$donnees['items'][0]['description'] .= '</b>';
658
			$donnees['items'][0]['description'] .= '</b>';
659
		}
659
		}
660
		$donnees['items'][0]['titre'] = '';
660
		$donnees['items'][0]['titre'] = '';
661
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
661
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
662
		return $contenu;
662
		return $contenu;
663
	}
663
	}
664
 
664
 
665
	private function getIntituleAuteur($courriel) {
665
	private function getIntituleAuteur($courriel) {
666
		$courriel = strtolower($courriel);
666
		$courriel = strtolower($courriel);
667
		$intitule = $this->auteurs[$courriel];
667
		$intitule = $this->auteurs[$courriel];
668
		return $intitule;
668
		return $intitule;
669
	}
669
	}
670
}
670
}