Subversion Repositories eFlore/Applications.cel

Rev

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

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