Subversion Repositories eFlore/Applications.cel

Rev

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

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