Subversion Repositories eFlore/Applications.cel

Rev

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

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