Subversion Repositories eFlore/Applications.cel

Rev

Rev 798 | Rev 1320 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 798 Rev 1269
Line 1... Line 1...
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)) {
Line 65... Line 65...
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'.");
Line 104... Line 104...
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) {
Line 119... Line 119...
119
	}
119
	}
Line 120... Line 120...
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' :
Line 160... Line 160...
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;
Line 172... Line 172...
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) {
Line 195... Line 195...
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";
Line 207... Line 207...
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['identifiant']] = $element['identifiant'];
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);
Line 256... Line 256...
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['identifiant']];
261
		$item['modifier_par'] = $this->auteurs[$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);
Line 291... Line 291...
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();
Line 309... Line 309...
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
		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'])) {
347
			$titre = "Ajout d'une photo par ".$this->auteurs[$element['ci_ce_utilisateur']];
347
			$titre = "Ajout d'une photo par ".$this->auteurs[$element['ci_ce_utilisateur']];
348
		} else {
348
		} else {
349
			$titre = $element['nom_sel'].' [nn'.$element['num_nom_sel'].'] par '.$this->auteurs[$element['ci_ce_utilisateur']];
349
			$titre = $element['nom_sel'].' [nn'.$element['num_nom_sel'].'] par '.$this->auteurs[$element['ci_ce_utilisateur']];
350
		}
350
		}
351
		return $titre;
351
		return $titre;
352
	}
352
	}
353
	
353
 
354
	private function creerDescriptionSimple($donnees, $item) {
354
	private function creerDescriptionSimple($donnees, $item) {
355
		$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');
356
		return $description;
356
		return $description;
357
	}
357
	}
358
	
358
 
359
	private function getServiceComplet() {
359
	private function getServiceComplet() {
360
		// Construction de la requête
360
		// Construction de la requête
361
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
361
		$requete = 	(isset($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' ci.*, '.
362
			'	ci_id_image, ci_ce_utilisateur, ci_nom_original, ci_meta_date_ajout, ci_meta_mots_cles, ci_meta_comment, ci_note_image '.
362
			'	ci_id_image, ci_ce_utilisateur, ci_nom_original, ci_meta_date_ajout, ci_meta_mots_cles, ci_meta_comment, ci_note_image '.
363
			'FROM cel_images AS cim '.
363
			'FROM cel_images AS cim '.
Line 366... Line 366...
366
			'	LEFT JOIN cel_inventory AS ci '.
366
			'	LEFT JOIN cel_inventory AS ci '.
367
			'		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) '.
368
			(($this->etreFluxAdmin()) ? '' : 'WHERE ci.transmission = 1 ').
368
			(($this->etreFluxAdmin()) ? '' : 'WHERE ci.transmission = 1 ').
369
			'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').' '.
370
			"LIMIT $this->start, $this->limit ";
370
			"LIMIT $this->start, $this->limit ";
371
		
371
 
372
		$elements = $this->executerRequete($requete);
372
		$elements = $this->executerRequete($requete);
Line 373... Line 373...
373
 
373
 
374
		// Création du contenu
374
		// Création du contenu
375
		if ($elements != false && count($elements) > 0) {
375
		if ($elements != false && count($elements) > 0) {
Line 378... Line 378...
378
			$this->messages[] = "Aucune image disponible.";
378
			$this->messages[] = "Aucune image disponible.";
379
		}
379
		}
Line 380... Line 380...
380
 
380
 
381
		return $contenu;
381
		return $contenu;
382
	}
382
	}
383
	
383
 
384
	private function getServiceMultiCriteres() {
384
	private function getServiceMultiCriteres() {
385
		$contenu = '';
385
		$contenu = '';
386
		if (isset($_GET['debut'])) $this->start = $_GET['debut'];		
386
		if (isset($_GET['debut'])) $this->start = $_GET['debut'];
387
		if (isset($_GET['limite'])) $this->limite = $_GET['limite'];
387
		if (isset($_GET['limite'])) $this->limite = $_GET['limite'];
388
		
388
 
389
		// Construction de la requête
389
		// Construction de la requête
390
		$requete = 'SELECT * '.
390
		$requete = 'SELECT * '.
391
			'FROM cel_obs_images a '.
391
			'FROM cel_obs_images AS a '.
392
			'	INNER JOIN cel_inventory b '.
392
			'	INNER JOIN cel_inventory AS b '.
393
			'		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) '.
394
			'	INNER JOIN cel_images c '.
394
			'	INNER JOIN cel_images AS c '.
395
			'		ON (a.coi_ce_image = c.ci_id_image AND a.coi_ce_utilisateur = c.ci_ce_utilisateur) '.  
395
			'		ON (a.coi_ce_image = c.ci_id_image AND a.coi_ce_utilisateur = c.ci_ce_utilisateur) '.
396
			'WHERE b.transmission = 1 '.
396
			'WHERE b.identifiant = c.ci_ce_utilisateur '.
397
			'	AND b.identifiant = c.ci_ce_utilisateur '.
397
			(($this->etreFluxAdmin()) ? '' : 'AND  b.transmission = 1 ').
398
			'	AND ';
398
			' AND ';
399
		
399
 
400
		if ($this->estUneRechercheGenerale()) {
400
		if ($this->estUneRechercheGenerale()) {
401
			$chaine_requete = $_GET['recherche'];
401
			$chaine_requete = $_GET['recherche'];
402
			$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
402
			$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
403
		} else {
403
		} else {
404
			$criteres = $this->traiterCriteresMultiples($_GET) ;
404
			$criteres = $this->traiterCriteresMultiples($_GET) ;
405
			if (!empty($criteres)) {
405
			if (!empty($criteres)) {
406
				$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
406
				$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
407
			}	
407
			}
408
		}
408
		}
409
		$requete = str_replace(' AND ) ',' ', $requete);
409
		$requete = str_replace(' AND ) ',' ', $requete);
410
		$requete = rtrim($requete, 'AND ');
410
		$requete = rtrim($requete, 'AND ');
411
		$requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 
411
		$requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  :
412
			'c.ci_meta_date_ajout DESC').' '."LIMIT $this->start,$this->limit ";
-
 
413
		
412
			'c.ci_meta_date_ajout DESC').' '."LIMIT $this->start,$this->limit ";
Line 414... Line 413...
414
		$elements = $this->executerRequete($requete);
413
		$elements = $this->executerRequete($requete);
415
 
414
 
416
		// Création du contenu
415
		// Création du contenu
417
		if ($elements != false && count($elements) > 0) {
416
		if ($elements != false && count($elements) > 0) {
418
			$contenu = $this->executerService($elements);
417
			$contenu = $this->executerService($elements);
419
		} else {
418
		} else {
420
			$this->messages[] = "Aucune image disponible.";
419
			$this->messages[] = "Aucune image disponible.";
421
		}
420
		}
422
        
421
 
423
        return $contenu;
422
        return $contenu;
424
	}
423
	}
425
	
424
 
426
	private function creerSousRequeteRechercheParCriteres($criteres) {
425
	private function creerSousRequeteRechercheParCriteres($criteres) {
427
		$requete = '';
426
		$requete = '';
428
		foreach ($criteres as $pair) {
427
		foreach ($criteres as $pair) {
429
			$nom_valeur = explode("=",$pair);
428
			$nom_valeur = explode("=",$pair);
430
			if (sizeof($nom_valeur) != 0) {
429
			if (count($nom_valeur) != 0) {
431
				switch ($nom_valeur[0]) {
430
				switch ($nom_valeur[0]) {
432
					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;
433
					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;
434
					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]);
435
						foreach($mots_comment_liste as $mot_comment) {
434
						foreach($mots_comment_liste as $mot_comment) {
436
							$mot_comment = trim($mot_comment) ;
435
							$mot_comment = trim($mot_comment) ;
437
							$requete .= $nom_valeur[0].' LIKE '.$this->bdd->quote('%'.$mot_comment.'%').' AND ';
436
							$requete .= $nom_valeur[0].' LIKE '.$this->bdd->quote('%'.$mot_comment.'%').' AND ';
438
						}
437
						}
439
						break;
438
						break;
440
					case "c.ci_meta_date" : 
439
					case "c.ci_meta_date" :
441
						$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
440
						$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
442
						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)) {
443
							$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
442
							$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
444
						}
443
						}
445
						$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;
446
					case "b.nom_ret" : 
445
					case "b.nom_ret" :
447
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';						
446
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
448
						$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 "%'.
449
							$nom_valeur[1].'%") AND '; break;
448
							$nom_valeur[1].'%") AND '; break;
450
					case "tag" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]); break; 
449
					case "tag" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]); break;
451
					case "projet" : $requete .= $this->creerSousRequeteProjet($nom_valeur[1]); break; 		
450
					case "projet" : $requete .= $this->creerSousRequeteProjet($nom_valeur[1]); break;
452
					default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
451
					default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
453
				}
452
				}
454
			}
453
			}
455
		}
454
		}
456
		$requete = rtrim($requete,' AND ');
455
		$requete = rtrim($requete,' AND ');
457
		return $requete;
456
		return $requete;
458
	}
457
	}
459
	
458
 
460
	private function creerSousRequeteMotsCles($mot_cle) {
459
	private function creerSousRequeteMotsCles($mot_cle) {
461
		if (preg_match('/.*OU.*/', $mot_cle)) {
460
		if (preg_match('/.*OU.*/', $mot_cle)) {
462
			$requete = $this->creerSousRequeteMotsClesOu($mot_cle);
461
			$requete = $this->creerSousRequeteMotsClesOu($mot_cle);
463
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
462
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
464
			$requete = $this->creerSousRequeteMotsClesEt($mot_cle);
463
			$requete = $this->creerSousRequeteMotsClesEt($mot_cle);
-
 
464
		} else {
465
		} else {		
465
			// Construction de la requête
-
 
466
			$utilisateur = isset($_GET['utilisateur']) ? $this->bdd->quote($_GET['utilisateur']) : null;
466
			// Construction de la requête
467
			$prerequete = 'SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire '.
-
 
468
				'FROM cel_mots_cles_images '.
467
			$prerequete = 	"SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles_images WHERE ".
469
				'WHERE cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle($mot_cle)).' '.
-
 
470
				(isset($utilisateur) ? "AND cmc_id_proprietaire = $utilisateur " : '');
468
				'cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle($mot_cle)); 
471
			$elements = $this->executerRequete($prerequete);
469
			$elements = $this->executerRequete($prerequete);
472
 
470
			if ($elements != false && count($elements) > 0) {
473
			if ($elements != false && count($elements) > 0) {
471
				$requete = ' ( ';
474
				$requete = ' ( ';
472
				foreach ($elements as $occurence) {
475
				foreach ($elements as $occurence) {
473
					$requete .= '(ci_meta_mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" AND ci_ce_utilisateur = '.
476
					$requete .= '(ci_meta_mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" '.
474
						$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';	
477
						'AND ci_ce_utilisateur = '.$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
475
				}
478
				}
476
			} else {
479
			} else {
477
				$requete = ' (ci_meta_mots_cles like "inexistant" OR';
480
				$requete = ' (ci_meta_mots_cles like "inexistant" OR';
478
			}
481
			}
479
		}
482
		}
480
		$requete = rtrim($requete,' OR ').' ) AND ';
483
		$requete = rtrim($requete,' OR ').' ) AND ';
481
		return $requete;
484
		return $requete;
482
	}
485
	}
483
	
486
 
484
	private function creerSousRequeteMotsClesOu($mot_cle) {
487
	private function creerSousRequeteMotsClesOu($mot_cle) {
485
		$tab_mots_cles = explode('OU', $mot_cle);
488
		$tab_mots_cles = explode('OU', $mot_cle);
486
		$where = '';
489
		$where = '';
487
		foreach ($tab_mots_cles as $mot) {
490
		foreach ($tab_mots_cles as $mot) {
488
			$where .= 'cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle(trim($mot))).' OR ';
491
			$where .= 'cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle(trim($mot))).' OR ';
489
		}
492
		}
490
		$where = rtrim($where,' OR ');
493
		$where = rtrim($where,' OR ');
491
		
494
 
492
		// Construction de la requête
495
		// Construction de la requête
493
		$prerequete = 	"SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles_images WHERE $where "; 
496
		$prerequete = 	"SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles_images WHERE $where ";
494
		$elements = $this->executerRequete($prerequete);//print_r($elements);
497
		$elements = $this->executerRequete($prerequete);//print_r($elements);
495
		if ($elements != false && count($elements) > 0) {
498
		if ($elements != false && count($elements) > 0) {
496
			$requete = ' ( ';
499
			$requete = ' ( ';
Line 501... Line 504...
501
		} else {
504
		} else {
502
			$requete = ' (ci_meta_mots_cles like "inexistant" OR';
505
			$requete = ' (ci_meta_mots_cles like "inexistant" OR';
503
		}
506
		}
504
		return $requete;
507
		return $requete;
505
	}
508
	}
506
	
509
 
507
	private function creerSousRequeteMotsClesEt($mot_cle) {
510
	private function creerSousRequeteMotsClesEt($mot_cle) {
508
		$where = '';
511
		$where = '';
509
		$champs = 'a.cmc_id_proprietaire , ';
512
		$champs = 'a.cmc_id_proprietaire , ';
510
		$table = '';
513
		$table = '';
511
		$i = "a"; $j = "a";
514
		$i = "a"; $j = "a";
512
		
515
 
513
		$tab_mots_cles = explode("ET", $mot_cle); 
516
		$tab_mots_cles = explode("ET", $mot_cle);
514
		foreach ($tab_mots_cles as $mot) {
517
		foreach ($tab_mots_cles as $mot) {
515
			$champs .= "$i.cmc_id_mot_cle_utilisateur as $i , ";
518
			$champs .= "$i.cmc_id_mot_cle_utilisateur as $i , ";
516
			$table .= "cel_mots_cles_images $i , ";
519
			$table .= "cel_mots_cles_images $i , ";
517
			$where .= "$i.cmc_id_mot_cle_general = ".$this->bdd->quote($this->encoderMotCle(trim($mot))).' AND ';
520
			$where .= "$i.cmc_id_mot_cle_general = ".$this->bdd->quote($this->encoderMotCle(trim($mot))).' AND ';
518
			if ($i !== "a") {
521
			if ($i !== "a") {
519
				$where .= " $i.cmc_id_proprietaire = ".$j.".cmc_id_proprietaire AND ";
522
				$where .= " $i.cmc_id_proprietaire = ".$j.".cmc_id_proprietaire AND ";
520
				$j++;
523
				$j++;
521
			}
524
			}
522
			$i++;
525
			$i++;
523
		}
526
		}
-
 
527
		$where = rtrim($where,' AND ');
524
		$where = rtrim($where,' AND '); $champs = rtrim($champs,' , '); $table = rtrim($table,' , ');
528
		$champs = rtrim($champs,' , ');
-
 
529
		$table = rtrim($table,' , ');
525
		
530
 
526
		// Construction de la requête
531
		// Construction de la requête
527
		$prerequete = 	"SELECT $champs FROM $table WHERE $where ";
532
		$prerequete = "SELECT $champs FROM $table WHERE $where ";
528
		$elements = $this->executerRequete($prerequete);//print_r($elements);
533
		$elements = $this->executerRequete($prerequete);
529
		if ($elements != false && count($elements) > 0) {
534
		if ($elements != false && count($elements) > 0) {
530
			$requete = ' ( ';
535
			$requete = ' ( ';
531
			foreach ($elements as $occurence) {
536
			foreach ($elements as $occurence) {
532
				$requete .= ' (';
537
				$requete .= ' (';
533
				for ($j = 'a'; $j < $i; $j++) {
538
				for ($j = 'a'; $j < $i; $j++) {
534
					$requete .= 'ci_meta_mots_cles like "%'.$occurence[$j].'%" AND ';
539
					$requete .= 'ci_meta_mots_cles LIKE "%'.$occurence[$j].'%" AND ';
535
				}
540
				}
536
				$requete .= ' ci_ce_utilisateur = '.$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
541
				$requete .= ' ci_ce_utilisateur = '.$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
537
			}
542
			}
538
		} else {
543
		} else {
539
			$requete = ' (ci_meta_mots_cles like "inexistant" OR';
544
			$requete = ' (ci_meta_mots_cles LIKE "inexistant" OR';
540
		}
545
		}
541
		return $requete;
546
		return $requete;
542
	}		
547
	}
543
	
548
 
544
	private function creerSousRequeteProjet($mot_cle) {
549
	private function creerSousRequeteProjet($mot_cle) {
545
		$requete = 'mots_cles like "inexistant" OR';
550
		$requete = 'mots_cles like "inexistant" OR';
546
		if (preg_match('/.*OU.*/', $mot_cle)) {
551
		if (preg_match('/.*OU.*/', $mot_cle)) {
547
			$requete = $this->creerSousRequeteProjetOu($mot_cle);
552
			$requete = $this->creerSousRequeteProjetOu($mot_cle);
548
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
553
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
549
			$requete = $this->creerSousRequeteProjetEt($mot_cle);
554
			$requete = $this->creerSousRequeteProjetEt($mot_cle);
550
		} else {
555
		} else {
551
			// Construction de la requête
556
			// Construction de la requête
552
			$prerequete = 	'SELECT * '.
557
			$prerequete = 	'SELECT * '.
553
				'FROM cel_mots_cles_obs '.
558
				'FROM cel_mots_cles_obs '.
554
				'WHERE cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle($mot_cle)); 
559
				'WHERE cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle($mot_cle));
555
			$elements = $this->executerRequete($prerequete);
560
			$elements = $this->executerRequete($prerequete);
556
			if ($elements != false && count($elements) > 0) {
561
			if ($elements != false && count($elements) > 0) {
557
				$requete = '';
562
				$requete = '';
558
				foreach ($elements as $occurence) {
563
				foreach ($elements as $occurence) {
559
					$requete .= '(mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" AND identifiant = '.
564
					$requete .= '(mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" AND identifiant = '.
560
						$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';	
565
						$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
561
				}
566
				}
562
			}
567
			}
563
		}
568
		}
564
		$requete = rtrim($requete,' OR ').' AND ';
569
		$requete = rtrim($requete,' OR ').' AND ';
565
		return $requete;
570
		return $requete;
566
	}
571
	}
567
	
572
 
568
	private function creerSousRequeteProjetOu($mot_cle) {	
573
	private function creerSousRequeteProjetOu($mot_cle) {
569
		$requete = 'mots_cles like "inexistant" OR';	
574
		$requete = 'mots_cles like "inexistant" OR';
570
		$tab_mots_cles = explode('OU', $mot_cle);
575
		$tab_mots_cles = explode('OU', $mot_cle);
571
		$where = '';
576
		$where = '';
572
		foreach ($tab_mots_cles as $mot) {
577
		foreach ($tab_mots_cles as $mot) {
573
			$where .= 'cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle(trim($mot))).' OR ';
578
			$where .= 'cmc_id_mot_cle_general = '.$this->bdd->quote($this->encoderMotCle(trim($mot))).' OR ';
574
		}
579
		}
575
		$where = rtrim($where,' OR ');
580
		$where = rtrim($where,' OR ');
576
		
581
 
577
		// Construction de la requête
582
		// Construction de la requête
578
		$prerequete = 	"SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles_obs WHERE $where "; 
583
		$prerequete = 	"SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles_obs WHERE $where ";
579
		$elements = $this->executerRequete($prerequete);
584
		$elements = $this->executerRequete($prerequete);
580
		if ($elements != false && count($elements) > 0) {
585
		if ($elements != false && count($elements) > 0) {
581
			$requete = '';
586
			$requete = '';
582
			foreach ($elements as $occurence) {
587
			foreach ($elements as $occurence) {
583
				$requete .= '(mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" AND identifiant = '.
588
				$requete .= '(mots_cles LIKE "%'.$occurence['cmc_id_mot_cle_utilisateur'].'%" AND identifiant = '.
584
					$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
589
					$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
585
			}
590
			}
586
		}
591
		}
587
		return $requete;
592
		return $requete;
588
	}
593
	}
589
	
594
 
590
	private function creerSousRequeteProjetEt($mot_cle) {
595
	private function creerSousRequeteProjetEt($mot_cle) {
591
		$requete = 'mots_cles like "inexistant" OR';
596
		$requete = 'mots_cles like "inexistant" OR';
592
		$where = '';
597
		$where = '';
593
		$champs = 'a.cmc_id_proprietaire , ';
598
		$champs = 'a.cmc_id_proprietaire , ';
594
		$table = '';
599
		$table = '';
595
		$i = "a"; $j = "a";
600
		$i = "a"; $j = "a";
596
		
601
 
597
		$tab_mots_cles = explode("ET", $mot_cle); 
602
		$tab_mots_cles = explode("ET", $mot_cle);
598
		foreach ($tab_mots_cles as $mot) {
603
		foreach ($tab_mots_cles as $mot) {
599
			$champs .= "$i.cmc_id_mot_cle_utilisateur as $i , ";
604
			$champs .= "$i.cmc_id_mot_cle_utilisateur as $i , ";
600
			$table .= "cel_mots_cles_obs $i , ";
605
			$table .= "cel_mots_cles_obs $i , ";
601
			$where .= "$i.cmc_id_mot_cle_general = ".$this->bdd->quote($this->encoderMotCle(trim($mot))).' AND ';
606
			$where .= "$i.cmc_id_mot_cle_general = ".$this->bdd->quote($this->encoderMotCle(trim($mot))).' AND ';
602
			if ($i !== "a") {
607
			if ($i !== "a") {
603
				$where .= " $i.cmc_id_proprietaire = ".$j.".cmc_id_proprietaire AND ";
608
				$where .= " $i.cmc_id_proprietaire = ".$j.".cmc_id_proprietaire AND ";
604
				$j++;
609
				$j++;
605
			}
610
			}
606
			$i++;
611
			$i++;
607
		}
612
		}
-
 
613
		$where = rtrim($where, ' AND ');
608
		$where = rtrim($where,' AND '); $champs = rtrim($champs,' , '); $table = rtrim($table,' , ');
614
		$champs = rtrim($champs, ' , ');
-
 
615
		$table = rtrim($table, ' , ');
609
		
616
 
610
		// Construction de la requête
617
		// Construction de la requête
611
		$prerequete = 	"SELECT $champs FROM $table WHERE $where "; 
618
		$prerequete = 	"SELECT $champs FROM $table WHERE $where ";
612
		$elements = $this->executerRequete($prerequete);//print_r($elements);
619
		$elements = $this->executerRequete($prerequete);//print_r($elements);
613
		if ($elements != false && count($elements) > 0) {
620
		if ($elements != false && count($elements) > 0) {
614
			$requete = '';
621
			$requete = '';
615
			foreach ($elements as $occurence) {
622
			foreach ($elements as $occurence) {
616
				$requete = ' (';
623
				$requete = ' (';
Line 620... Line 627...
620
				$requete .= ' identifiant = '.$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
627
				$requete .= ' identifiant = '.$this->bdd->quote($occurence['cmc_id_proprietaire']).' ) OR ';
621
			}
628
			}
622
		}
629
		}
623
		return $requete;
630
		return $requete;
624
	}
631
	}
625
	
632
 
626
	private function creerSousRequeteRechercheGenerale($chaine_requete) {
633
	private function creerSousRequeteRechercheGenerale($chaine_requete) {
627
		$requete = '';
634
		$requete = '';
628
		if (trim($chaine_requete) != '') {	
635
		if (trim($chaine_requete) != '') {
629
			$chaine_requete = strtolower($chaine_requete);
636
			$chaine_requete = strtolower($chaine_requete);
630
			$chaine_requete = str_replace(' ', '_', $chaine_requete);
637
			$chaine_requete = str_replace(' ', '_', $chaine_requete);
631
			$requete = ' ('.
638
			$requete = ' ('.
632
				'b.nom_ret LIKE "'.$chaine_requete.'%"'.
639
				'b.nom_ret LIKE "'.$chaine_requete.'%"'.
633
				' OR '.
640
				' OR '.
Line 640... Line 647...
640
				'c.ci_ce_utilisateur LIKE "'.$chaine_requete.'%" '.
647
				'c.ci_ce_utilisateur LIKE "'.$chaine_requete.'%" '.
641
				') ';
648
				') ';
642
		}
649
		}
643
		return $requete;
650
		return $requete;
644
	}
651
	}
645
	
652
 
646
	private function estUneRechercheGenerale() {
653
	private function estUneRechercheGenerale() {
647
		return isset($_GET['recherche']);
654
		return isset($_GET['recherche']);
648
	}
655
	}
649
	
656
 
650
	private function traiterCriteresMultiples($tableau_criteres) {
657
	private function traiterCriteresMultiples($tableau_criteres) {
651
		$tableau_criteres_pour_bdd = array();
658
		$tableau_criteres_pour_bdd = array();
652
				
659
 
653
		foreach($tableau_criteres as $nom_critere => $valeur_critere) {
660
		foreach ($tableau_criteres as $nom_critere => $valeur_critere) {
654
			if (isset($this->criteres[$nom_critere])) {
661
			if (isset($this->criteres[$nom_critere])) {
655
				$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
662
				$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
656
			}
663
			}
657
		}
664
		}
658
		return $tableau_criteres_pour_bdd;
665
		return $tableau_criteres_pour_bdd;
659
	}
666
	}
Line 660... Line 667...
660
 
667
 
661
	private function creerDescriptionComplet($donnees, $item) {
668
	private function creerDescriptionComplet($donnees, $item) {
-
 
669
		$auteur = $this->auteurs[$donnees['ci_ce_utilisateur']];
662
		$auteur = $this->auteurs[$donnees['ci_ce_utilisateur']];
670
		$auteur_mail = $donnees['ci_ce_utilisateur'];
663
		
671
 
664
		$id_img = $donnees['ci_id_image'];
672
		$id_img = $donnees['ci_id_image'];
665
		$nom_fichier = $donnees['ci_nom_original'];
673
		$nom_fichier = $donnees['ci_nom_original'];
666
		$url_img = $this->getUrlImage($donnees['ci_id_image'], 'CS');
674
		$url_img = $this->getUrlImage($donnees['ci_id_image'], 'CS');
667
		$url_img_normale = $this->getUrlImage($donnees['ci_id_image'], 'XL');
675
		$url_img_normale = $this->getUrlImage($donnees['ci_id_image'], 'XL');
668
		$mots_cles_image = $this->decoderMotsClesImg($donnees['identifiant'], $donnees['ci_meta_mots_cles']);
676
		$mots_cles_image = $this->decoderMotsClesImg($donnees['identifiant'], $donnees['ci_meta_mots_cles']);
669
		$note = ($donnees['ci_note_image'] +1).'/5';
677
		$note = ($donnees['ci_note_image'] +1).'/5';
670
		$commentaire_img = $donnees['ci_meta_comment'];
678
		$commentaire_img = $donnees['ci_meta_comment'];
671
		
679
 
672
		$id_obs = $donnees['id'];
680
		$id_obs = $donnees['id'];
673
		$famille = $donnees['famille'];
681
		$famille = $donnees['famille'];
674
		$nom_saisi = $donnees['nom_sel'];
682
		$nom_saisi = $donnees['nom_sel'];
675
		$nom_retenu = $donnees['nom_ret'];
683
		$nom_retenu = $donnees['nom_ret'];
Line 681... Line 689...
681
		$date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
689
		$date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
682
		$date_transmission = $this->formaterDate($donnees['date_transmission']);
690
		$date_transmission = $this->formaterDate($donnees['date_transmission']);
683
		$date_modification = $this->formaterDate($donnees['date_modification']);
691
		$date_modification = $this->formaterDate($donnees['date_modification']);
684
		$date_creation = $this->formaterDate($donnees['date_creation']);
692
		$date_creation = $this->formaterDate($donnees['date_creation']);
685
		$transmission = $donnees['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
693
		$transmission = $donnees['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
686
		
694
 
687
		$description = '<style>.champ{color:grey} .gauche{float:left;padding:0 20px 0 0;} ul{list-style-type:none;padding:0;}</style>'.
695
		$description = '<style>.champ{color:grey} .gauche{float:left;padding:0 20px 0 0;} ul{list-style-type:none;padding:0;}</style>'.
688
			'<h2>'.(!$this->etreNull($id_obs) ? "Image #$id_img liée à l'observation #$id_obs" : "Image #$id_img non liée à une observation.").'</h2>'.
696
			'<h2>'.(!$this->etreNull($id_obs) ? "Image #$id_img liée à l'observation #$id_obs" : "Image #$id_img non liée à une observation.").'</h2>'.
689
			'<a href="'.$url_img_normale.'"><img class="gauche" src="'.$url_img.'" alt="'.$nom_fichier.'" /></a>'.
697
			'<a href="'.$url_img_normale.'"><img class="gauche" src="'.$url_img.'" alt="'.$nom_fichier.'" /></a>'.
690
			'<div class="gauche">'.
698
			'<div class="gauche">'.
691
			'<h3>'.'Image'.'</h3>'.
699
			'<h3>'.'Image'.'</h3>'.
692
			'<ul>'.
700
			'<ul>'.
693
			'<li>'.'<span class="champ">URL :</span> <a href="'.$url_img_normale.'" onclick="javascript:window.open(this.href);return false;">'.$url_img_normale.'</a></li>'.
701
			'<li>'.'<span class="champ">URL :</span> <a href="'.$url_img_normale.'" onclick="javascript:window.open(this.href);return false;">'.$url_img_normale.'</a></li>'.
694
			'<li>'.'<span class="champ">Importée le :</span> '.$item['date_maj_simple'].'</li>'.
702
			'<li>'.'<span class="champ">Importée le :</span> '.$item['date_maj_simple'].'</li>'.
695
			'<li>'.'<span class="champ">Par :</span> '.
703
			'<li>'.'<span class="champ">Par :</span> '.
696
				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur.'">'.$auteur.'</a>' : $auteur).
704
				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
697
			'</li>'.
705
			'</li>'.
698
			'<li>'.'<span class="champ">Nom du fichier :</span> '.$nom_fichier.'</li>'.
706
			'<li>'.'<span class="champ">Nom du fichier :</span> '.$nom_fichier.'</li>'.
699
			'<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
707
			'<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
700
			'<li>'.'<span class="champ">Commentaires :</span> '.$commentaire_img.'</li>'.
708
			'<li>'.'<span class="champ">Commentaires :</span> '.$commentaire_img.'</li>'.
701
			'<li>'.'<span class="champ">Mots-clés :</span> '.implode(', ', $mots_cles_image).'</li>'.
709
			'<li>'.'<span class="champ">Mots-clés :</span> '.implode(', ', $mots_cles_image).'</li>'.
702
			'</ul>'.
710
			'</ul>'.
703
			'</div>';
711
			'</div>';
704
			// TODO : ajouter le champ commentaire EXIF.
712
			// TODO : ajouter le champ commentaire EXIF.
705
		if (! $this->etreNull($id_obs)) {
713
		if (! $this->etreNull($id_obs)) {
706
			$description .= 
714
			$description .=
707
				'<div class="gauche">'.
715
				'<div class="gauche">'.
708
				'<h3>'.'Observation'.'</h3>'.
716
				'<h3>'.'Observation'.'</h3>'.
709
				'<ul>'.
717
				'<ul>'.
710
				'<li>'.'<span class="champ">Famille :</span> '.$famille.'</li>'.
718
				'<li>'.'<span class="champ">Famille :</span> '.$famille.'</li>'.
711
				'<li>'.'<span class="champ">Nom saisi :</span> '.$nom_saisi.'</li>'.
719
				'<li>'.'<span class="champ">Nom saisi :</span> '.$nom_saisi.'</li>'.
Line 723... Line 731...
723
				'</div>';
731
				'</div>';
724
		}
732
		}
725
		$description = $this->nettoyerTexte($description);
733
		$description = $this->nettoyerTexte($description);
726
		return $description;
734
		return $description;
727
	}
735
	}
728
	
736
 
729
	private function getServiceParMotsCles() {
737
	private function getServiceParMotsCles() {
730
		$infos=array();
738
		$infos=array();
731
		$infos[0]['num_nom_sel'] = '';
739
		$infos[0]['num_nom_sel'] = '';
732
		$infos[0]['ci_meta_date_ajout'] = '2011-06-28';
740
		$infos[0]['ci_meta_date_ajout'] = '2011-06-28';
733
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
741
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
Line 735... Line 743...
735
		$donnees['items'][0]['description'] =  'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
743
		$donnees['items'][0]['description'] =  'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
736
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?tag=';
744
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?tag=';
737
		if (isset($this->parametres[0])) {
745
		if (isset($this->parametres[0])) {
738
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
746
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
739
		} else {
747
		} else {
740
			$donnees['items'][0]['description'] .= '</b>';	
748
			$donnees['items'][0]['description'] .= '</b>';
741
		}
749
		}
742
		$donnees['items'][0]['titre'] = '';
750
		$donnees['items'][0]['titre'] = '';
743
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
751
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
744
		return $contenu;
752
		return $contenu;
745
	}
753
	}
746
	
754
 
747
	private function getServiceParCommune() {
755
	private function getServiceParCommune() {
748
		$infos=array();
756
		$infos=array();
749
		$infos[0]['num_nom_sel'] = '';
757
		$infos[0]['num_nom_sel'] = '';
750
		$infos[0]['ci_meta_date_ajout'] = '2011-06-28';
758
		$infos[0]['ci_meta_date_ajout'] = '2011-06-28';
751
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
759
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
Line 753... Line 761...
753
		$donnees['items'][0]['description'] = 'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
761
		$donnees['items'][0]['description'] = 'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
754
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?commune=';
762
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?commune=';
755
		if (isset($this->parametres[0])) {
763
		if (isset($this->parametres[0])) {
756
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
764
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
757
		} else {
765
		} else {
758
			$donnees['items'][0]['description'] .= '</b>';	
766
			$donnees['items'][0]['description'] .= '</b>';
759
		}
767
		}
760
		$donnees['items'][0]['titre'] = '';
768
		$donnees['items'][0]['titre'] = '';
761
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
769
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
762
		return $contenu;
770
		return $contenu;
763
	}
771
	}
764
}	
-
 
765
772
}
-
 
773
766
774