Subversion Repositories eFlore/Applications.cel

Rev

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

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