Subversion Repositories eFlore/Applications.cel

Rev

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

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