Subversion Repositories eFlore/Applications.cel

Rev

Rev 1320 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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