Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2778 Rev 3004
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 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_obs AS co LEFT JOIN cel_images 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 cel_images AS ci '.
384
			'	LEFT JOIN cel_obs AS co '.
384
			'	LEFT JOIN cel_obs 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
			$this->messages[] = "Aucune image disponible.";
397
			//$this->messages[] = "Aucune image disponible.";
397
			$contenu = array();
398
			$contenu = array();
398
		}
399
		}
399
 
400
 
400
		return $contenu;
401
		return $contenu;
401
	}
402
	}
402
 
403
 
403
	private function getServiceMultiCriteres() {
404
	private function getServiceMultiCriteres() {
404
		$contenu = '';
405
		$contenu = '';
405
		if (isset($_GET['debut'])) $this->start = $_GET['debut'];
406
		if (isset($_GET['debut'])) $this->start = $_GET['debut'];
406
		if (isset($_GET['limite'])) $this->limit = $_GET['limite'];
407
		if (isset($_GET['limite'])) $this->limit = $_GET['limite'];
407
 
408
 
408
		$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 !
409
 
410
 
410
		if ($this->parametresSontDemandes()) {
411
		if ($this->parametresSontDemandes()) {
411
			$requete = $this->creerRequeteAvecParametres();
412
			$requete = $this->creerRequeteAvecParametres();
412
		} else {
413
		} else {
413
			$requete = $this->creerRequeteSansParametres();
414
			$requete = $this->creerRequeteSansParametres();
414
		}
415
		}
415
		$elements = $this->executerRequete($requete);
416
		$elements = $this->executerRequete($requete);
416
 
417
 
417
		// Création du contenu
418
		// Création du contenu
418
		if ($elements != false && count($elements) > 0) {
419
		if ($elements != false && count($elements) > 0) {
419
			$contenu = $this->executerService($elements);
420
			$contenu = $this->executerService($elements);
420
		} else {
421
		} else {
-
 
422
			// ne pas faire ça, car ça déclenche une erreur 500 à tort !
421
			$this->messages[] = "Aucune image disponible.";
423
			//$this->messages[] = "Aucune image disponible.";
422
		}
424
		}
423
 
425
 
424
        return $contenu;
426
        return $contenu;
425
	}
427
	}
426
 
428
 
427
	private function parametresSontDemandes() {
429
	private function parametresSontDemandes() {
428
		$criteres = $this->traiterCriteresMultiples($_GET) ;
430
		$criteres = $this->traiterCriteresMultiples($_GET) ;
429
		return (isset($_GET['recherche']) && $_GET['recherche'] != '') || !empty($criteres);
431
		return (isset($_GET['recherche']) && $_GET['recherche'] != '') || !empty($criteres);
430
	}
432
	}
431
 
433
 
432
	private function creerRequeteSansParametres() {
434
	private function creerRequeteSansParametres() {
433
		// 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
434
		// et pas la jointure de toutes les tables
436
		// et pas la jointure de toutes les tables
435
		$sous_requete = 'SELECT * '.
437
		$sous_requete = 'SELECT * '.
436
			'FROM cel_images c '.
438
			'FROM cel_images c '.
437
			'WHERE id_image '.
439
			'WHERE id_image '.
438
			' IN (SELECT id_image FROM cel_images a '.
440
			' IN (SELECT id_image FROM cel_images a '.
439
			(($this->etreFluxAdmin()) ? '' : 'INNER JOIN cel_obs b ON a.ce_observation = b.id_observation AND b.transmission = 1 ').
441
			(($this->etreFluxAdmin()) ? '' : 'INNER JOIN cel_obs b ON a.ce_observation = b.id_observation AND b.transmission = 1 ').
440
			') ';
442
			') ';
441
		$sous_requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'c.date_creation DESC').' '.
443
		$sous_requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  : 'c.date_creation DESC').' '.
442
			"LIMIT $this->start,$this->limit ";
444
			"LIMIT $this->start,$this->limit ";
443
 
445
 
444
		// Construction de la requête
446
		// Construction de la requête
445
		$requete = 'SELECT *, b.mots_cles_texte AS mots_cles_texte_obs, c.mots_cles_texte AS mots_cles_texte_images, '.
447
		$requete = 'SELECT *, b.mots_cles_texte AS mots_cles_texte_obs, c.mots_cles_texte AS mots_cles_texte_images, '.
446
			' b.commentaire AS commentaire_obs, c.commentaire AS commentaire_img, nom_referentiel '.
448
			' b.commentaire AS commentaire_obs, c.commentaire AS commentaire_img, nom_referentiel '.
447
			'FROM ('.$sous_requete.') AS c '.
449
			'FROM ('.$sous_requete.') AS c '.
448
			'	INNER JOIN cel_obs AS b '.
450
			'	INNER JOIN cel_obs AS b '.
449
			'		ON (c.ce_observation = b.id_observation) AND b.ce_utilisateur = c.ce_utilisateur ';
451
			'		ON (c.ce_observation = b.id_observation) AND b.ce_utilisateur = c.ce_utilisateur ';
450
		//echo $requete;
452
		//echo $requete;
451
		return $requete;
453
		return $requete;
452
	}
454
	}
453
 
455
 
454
	private function creerRequeteAvecParametres() {
456
	private function creerRequeteAvecParametres() {
455
		// Construction de la requête
457
		// Construction de la requête
456
		$requete = 'SELECT *, b.mots_cles_texte as mots_cles_texte_obs, c.mots_cles_texte as mots_cles_texte_images, '.
458
		$requete = 'SELECT *, b.mots_cles_texte as mots_cles_texte_obs, c.mots_cles_texte as mots_cles_texte_images, '.
457
		    ' b.commentaire as commentaire_obs, c.commentaire as commentaire_img, nom_referentiel '.
459
		    ' b.commentaire as commentaire_obs, c.commentaire as commentaire_img, nom_referentiel '.
458
			'FROM cel_images AS c '.
460
			'FROM cel_images AS c '.
459
			'	INNER JOIN cel_obs AS b '.
461
			'	INNER JOIN cel_obs AS b '.
460
			'		ON (c.ce_observation = b.id_observation) '.
462
			'		ON (c.ce_observation = b.id_observation) '.
461
			'WHERE b.ce_utilisateur = c.ce_utilisateur '.
463
			'WHERE b.ce_utilisateur = c.ce_utilisateur '.
462
			(($this->etreFluxAdmin()) ? '' : 'AND b.transmission = 1 ').
464
			(($this->etreFluxAdmin()) ? '' : 'AND b.transmission = 1 ').
463
			'	AND ';
465
			'	AND ';
464
 
466
 
465
		if ($this->estUneRechercheGenerale()) {
467
		if ($this->estUneRechercheGenerale()) {
466
			$chaine_requete = $_GET['recherche'];
468
			$chaine_requete = $_GET['recherche'];
467
			$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
469
			$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
468
		} else {
470
		} else {
469
			$criteres = $this->traiterCriteresMultiples($_GET) ;
471
			$criteres = $this->traiterCriteresMultiples($_GET) ;
470
			if (!empty($criteres)) {
472
			if (!empty($criteres)) {
471
				$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
473
				$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
472
			}
474
			}
473
		}
475
		}
474
		$requete = str_replace(' AND ) ',' ', $requete);
476
		$requete = str_replace(' AND ) ',' ', $requete);
475
		$requete = rtrim($requete, 'AND ');
477
		$requete = rtrim($requete, 'AND ');
476
		$requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  :
478
		$requete .= ' ORDER BY '.(isset($this->orderby) && (!is_null($this->orderby)) ? $this->orderby  :
477
			'c.date_creation DESC').' '."LIMIT $this->start,$this->limit ";
479
			'c.date_creation DESC').' '."LIMIT $this->start,$this->limit ";
478
		return $requete;
480
		return $requete;
479
	}
481
	}
480
 
482
 
481
	private function creerSousRequeteRechercheParCriteres($criteres) {
483
	private function creerSousRequeteRechercheParCriteres($criteres) {
482
		$requete = '';
484
		$requete = '';
483
		foreach ($criteres as $pair) {
485
		foreach ($criteres as $pair) {
484
			$nom_valeur = explode("=",$pair);
486
			$nom_valeur = explode("=",$pair);
485
			if (sizeof($nom_valeur) != 0) {
487
			if (sizeof($nom_valeur) != 0) {
486
				switch ($nom_valeur[0]) {
488
				switch ($nom_valeur[0]) {
487
					case "ci_limite" : $this->limit = Cel::db()->quote($nom_valeur[1]); break;
489
					case "ci_limite" : $this->limit = Cel::db()->quote($nom_valeur[1]); break;
488
					case "c.ci_numero_page" : $this->limit*Cel::db()->quote($nom_valeur[1]); break;
490
					case "c.ci_numero_page" : $this->limit*Cel::db()->quote($nom_valeur[1]); break;
489
					case "c.commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
491
					case "c.commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
490
						foreach($mots_comment_liste as $mot_comment) {
492
						foreach($mots_comment_liste as $mot_comment) {
491
							$mot_comment = trim($mot_comment) ;
493
							$mot_comment = trim($mot_comment) ;
492
							$requete .= $nom_valeur[0].' LIKE '.Cel::db()->quote('%'.$mot_comment.'%').' AND ';
494
							$requete .= $nom_valeur[0].' LIKE '.Cel::db()->quote('%'.$mot_comment.'%').' AND ';
493
						}
495
						}
494
						break;
496
						break;
495
					case "c.date_prise_de_vue" :
497
					case "c.date_prise_de_vue" :
496
						$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
498
						$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
497
						if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $nom_valeur[1], $matches)) {
499
						if (preg_match('/(^[0-9]{2})-([0-9]{2})-([0-9]{4}$)/', $nom_valeur[1], $matches)) {
498
							$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
500
							$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
499
						}
501
						}
500
						$requete .= $nom_valeur[0].' LIKE '.Cel::db()->quote($nom_valeur[1]."%").' AND '; break;
502
						$requete .= $nom_valeur[0].' LIKE '.Cel::db()->quote($nom_valeur[1]."%").' AND '; break;
501
					case "b.ce_zone_geo" :
503
					case "b.ce_zone_geo" :
502
						$requete .= ' ('.$nom_valeur[0].' LIKE "%INSEE-C:'.$nom_valeur[1].'%") AND '; break;
504
						$requete .= ' ('.$nom_valeur[0].' LIKE "%INSEE-C:'.$nom_valeur[1].'%") AND '; break;
503
					case "b.nom_ret" :
505
					case "b.nom_ret" :
504
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
506
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
505
						$requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR b.nom_sel LIKE "%'.
507
						$requete .= ' ('.$nom_valeur[0].' LIKE "%'.$nom_valeur[1].'%" OR b.nom_sel LIKE "%'.
506
							$nom_valeur[1].'%") AND '; break;
508
							$nom_valeur[1].'%") AND '; break;
507
					case "tag" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]).' AND '; break;
509
					case "tag" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]).' AND '; break;
508
					case "projet" : $requete .= $this->creerSousRequeteProjet($nom_valeur[1]).' AND '; break;
510
					case "projet" : $requete .= $this->creerSousRequeteProjet($nom_valeur[1]).' AND '; break;
509
					case "referentiel" : $requete .= $this->creerSousRequeteReferentiel($nom_valeur[1]).' AND '; break;
511
					case "referentiel" : $requete .= $this->creerSousRequeteReferentiel($nom_valeur[1]).' AND '; break;
510
					case "groupe_zones_geo" : $requete .= $this->creerSousRequeteGroupeZonesGeo($nom_valeur[1])." AND "; break;
512
					case "groupe_zones_geo" : $requete .= $this->creerSousRequeteGroupeZonesGeo($nom_valeur[1])." AND "; break;
511
					default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
513
					default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
512
				}
514
				}
513
			}
515
			}
514
		}
516
		}
515
		$requete = rtrim($requete,' AND ');
517
		$requete = rtrim($requete,' AND ');
516
		return $requete;
518
		return $requete;
517
	}
519
	}
518
	
520
	
519
	private function creerSousRequeteGroupeZonesGeo($groupe_zones_geo) {
521
	private function creerSousRequeteGroupeZonesGeo($groupe_zones_geo) {
520
		$req = "SELECT valeur FROM cel_groupes_zones WHERE id_groupe = ".Cel::db()->proteger($groupe_zones_geo);
522
		$req = "SELECT valeur FROM cel_groupes_zones WHERE id_groupe = ".Cel::db()->proteger($groupe_zones_geo);
521
		$res = Cel::db()->requeter($req);
523
		$res = Cel::db()->requeter($req);
522
		$zones = array();
524
		$zones = array();
523
		foreach($res as &$r) {
525
		foreach($res as &$r) {
524
			$zones[] = Cel::db()->proteger($r['valeur']);
526
			$zones[] = Cel::db()->proteger($r['valeur']);
525
		}
527
		}
526
		$sql = '(b.ce_zone_geo IN ('.implode(',', $zones).')) ';
528
		$sql = '(b.ce_zone_geo IN ('.implode(',', $zones).')) ';
527
	
529
	
528
		return $sql;
530
		return $sql;
529
	}
531
	}
530
 
532
 
531
	private function creerSousRequeteMotsCles($mot_cle) {
533
	private function creerSousRequeteMotsCles($mot_cle) {
532
	$requete = '';
534
	$requete = '';
533
		if (preg_match('/.*OU.*/', $mot_cle)) {
535
		if (preg_match('/.*OU.*/', $mot_cle)) {
534
			$mots_cles_tab = explode('OU',$mot_cle);
536
			$mots_cles_tab = explode('OU',$mot_cle);
535
			foreach($mots_cles_tab as $mot_cle_item) {
537
			foreach($mots_cles_tab as $mot_cle_item) {
536
				$requete .= '(c.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
538
				$requete .= '(c.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
537
			}
539
			}
538
			$requete = '('.rtrim($requete,'OR ').')';
540
			$requete = '('.rtrim($requete,'OR ').')';
539
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
541
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
540
			$mots_cles_tab = explode('ET',$mot_cle);
542
			$mots_cles_tab = explode('ET',$mot_cle);
541
			foreach($mots_cles_tab as $mot_cle_item) {
543
			foreach($mots_cles_tab as $mot_cle_item) {
542
				$requete .= '(c.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
544
				$requete .= '(c.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
543
			}
545
			}
544
			$requete = '('.rtrim($requete, 'AND ').') ';
546
			$requete = '('.rtrim($requete, 'AND ').') ';
545
		} else {
547
		} else {
546
			$requete = "(c.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
548
			$requete = "(c.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
547
		}
549
		}
548
		return $requete;
550
		return $requete;
549
	}
551
	}
550
 
552
 
551
	private function creerSousRequeteProjet($mot_cle) {
553
	private function creerSousRequeteProjet($mot_cle) {
552
		$requete = '';
554
		$requete = '';
553
		if (preg_match('/.*OU.*/', $mot_cle)) {
555
		if (preg_match('/.*OU.*/', $mot_cle)) {
554
			$mots_cles_tab = explode('OU',$mot_cle);
556
			$mots_cles_tab = explode('OU',$mot_cle);
555
			foreach($mots_cles_tab as $mot_cle_item) {
557
			foreach($mots_cles_tab as $mot_cle_item) {
556
				$requete .= '(b.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
558
				$requete .= '(b.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') OR ';
557
			}
559
			}
558
			$requete = '('.rtrim($requete,'OR ').')';
560
			$requete = '('.rtrim($requete,'OR ').')';
559
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
561
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
560
			$mots_cles_tab = explode('ET',$mot_cle);
562
			$mots_cles_tab = explode('ET',$mot_cle);
561
			foreach($mots_cles_tab as $mot_cle_item) {
563
			foreach($mots_cles_tab as $mot_cle_item) {
562
				$requete .= '(b.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
564
				$requete .= '(b.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$mot_cle_item.'%').') AND ';
563
			}
565
			}
564
			$requete = '('.rtrim($requete, 'AND ').') ';
566
			$requete = '('.rtrim($requete, 'AND ').') ';
565
		} else {
567
		} else {
566
			$requete = "(b.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
568
			$requete = "(b.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
567
		}
569
		}
568
		return $requete;
570
		return $requete;
569
	}
571
	}
570
 
572
 
571
	private function creerSousRequeteReferentiel($referentiel) {
573
	private function creerSousRequeteReferentiel($referentiel) {
572
		$requete = "b.nom_referentiel LIKE '$referentiel%'";
574
		$requete = "b.nom_referentiel LIKE '$referentiel%'";
573
		return $requete;
575
		return $requete;
574
	}
576
	}
575
 
577
 
576
	private function creerSousRequeteRechercheGenerale($chaine_requete) {
578
	private function creerSousRequeteRechercheGenerale($chaine_requete) {
577
		$requete = '';
579
		$requete = '';
578
		if (trim($chaine_requete) != '') {
580
		if (trim($chaine_requete) != '') {
579
			$chaine_requete = strtolower($chaine_requete);
581
			$chaine_requete = strtolower($chaine_requete);
580
			$chaine_requete = str_replace(' ', '_', $chaine_requete);
582
			$chaine_requete = str_replace(' ', '_', $chaine_requete);
581
			$requete = ' ('.
583
			$requete = ' ('.
582
				'b.nom_ret LIKE "'.$chaine_requete.'%"'.
584
				'b.nom_ret LIKE "'.$chaine_requete.'%"'.
583
				' OR '.
585
				' OR '.
584
				'b.nom_sel LIKE "'.$chaine_requete.'%"'.
586
				'b.nom_sel LIKE "'.$chaine_requete.'%"'.
585
				' OR '.
587
				' OR '.
586
				'b.zone_geo LIKE "'.$chaine_requete.'%" '.
588
				'b.zone_geo LIKE "'.$chaine_requete.'%" '.
587
				' OR '.
589
				' OR '.
588
				'b.ce_zone_geo LIKE "INSEE-C:'.$chaine_requete.'%" '.
590
				'b.ce_zone_geo LIKE "INSEE-C:'.$chaine_requete.'%" '.
589
				' OR '.
591
				' OR '.
590
				'b.ce_zone_geo LIKE "'.$chaine_requete.'%" '.
592
				'b.ce_zone_geo LIKE "'.$chaine_requete.'%" '.
591
				' OR '.
593
				' OR '.
592
				'c.ce_utilisateur LIKE "'.$chaine_requete.'%" '.
594
				'c.ce_utilisateur LIKE "'.$chaine_requete.'%" '.
593
				' OR '.
595
				' OR '.
594
				'c.courriel_utilisateur LIKE "'.$chaine_requete.'%" '.
596
				'c.courriel_utilisateur LIKE "'.$chaine_requete.'%" '.
595
				' OR '.
597
				' OR '.
596
				'b.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
598
				'b.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
597
				' OR '.
599
				' OR '.
598
				'c.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
600
				'c.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
599
				') ';
601
				') ';
600
		}
602
		}
601
		return $requete;
603
		return $requete;
602
	}
604
	}
603
 
605
 
604
	private function estUneRechercheGenerale() {
606
	private function estUneRechercheGenerale() {
605
		return isset($_GET['recherche']);
607
		return isset($_GET['recherche']);
606
	}
608
	}
607
 
609
 
608
	private function traiterCriteresMultiples($tableau_criteres) {
610
	private function traiterCriteresMultiples($tableau_criteres) {
609
		$tableau_criteres_pour_bdd = array();
611
		$tableau_criteres_pour_bdd = array();
610
 
612
 
611
		foreach($tableau_criteres as $nom_critere => $valeur_critere) {
613
		foreach($tableau_criteres as $nom_critere => $valeur_critere) {
612
			if (isset($this->criteres[$nom_critere])) {
614
			if (isset($this->criteres[$nom_critere])) {
613
				$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
615
				$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
614
			}
616
			}
615
		}
617
		}
616
		return $tableau_criteres_pour_bdd;
618
		return $tableau_criteres_pour_bdd;
617
	}
619
	}
618
 
620
 
619
	private function creerDescriptionComplet($donnees, $item) {
621
	private function creerDescriptionComplet($donnees, $item) {
620
		$auteur = $this->getIntituleAuteur($donnees['courriel_utilisateur']);
622
		$auteur = $this->getIntituleAuteur($donnees['courriel_utilisateur']);
621
		$auteur_mail = $donnees['courriel_utilisateur'];
623
		$auteur_mail = $donnees['courriel_utilisateur'];
622
 
624
 
623
		$id_img = $donnees['id_image'];
625
		$id_img = $donnees['id_image'];
624
		$nom_fichier = $donnees['nom_original'];
626
		$nom_fichier = $donnees['nom_original'];
625
		$url_img = $this->getUrlImage($donnees['id_image'], 'CS');
627
		$url_img = $this->getUrlImage($donnees['id_image'], 'CS');
626
		$url_img_normale = $this->getUrlImage($donnees['id_image'], 'XL');
628
		$url_img_normale = $this->getUrlImage($donnees['id_image'], 'XL');
627
		//
629
		//
628
		$mots_cles_image = $donnees['mots_cles_texte_images'];
630
		$mots_cles_image = $donnees['mots_cles_texte_images'];
629
		$note = ($donnees['note_qualite'] +1).'/5';
631
		$note = ($donnees['note_qualite'] +1).'/5';
630
		$commentaire_img = $donnees['commentaire_img'];
632
		$commentaire_img = $donnees['commentaire_img'];
631
 
633
 
632
		$id_obs = $donnees['id_observation'];
634
		$id_obs = $donnees['id_observation'];
633
		$famille = $donnees['famille'];
635
		$famille = $donnees['famille'];
634
		$nom_saisi = $donnees['nom_sel'];
636
		$nom_saisi = $donnees['nom_sel'];
635
		$nom_retenu = $donnees['nom_ret'];
637
		$nom_retenu = $donnees['nom_ret'];
636
		//
638
		//
637
		$mots_cles_obs = $donnees['mots_cles_texte_obs'];
639
		$mots_cles_obs = $donnees['mots_cles_texte_obs'];
638
		
640
		
639
		$lieu =  $this->formaterZoneGeoEtCodePourAffichage($donnees).' > '.$donnees['lieudit'].' > '.$donnees['station'];
641
		$lieu =  $this->formaterZoneGeoEtCodePourAffichage($donnees).' > '.$donnees['lieudit'].' > '.$donnees['station'];
640
		$milieu = $donnees['milieu'];
642
		$milieu = $donnees['milieu'];
641
		$coordonnees = ($this->etreNull($donnees['latitude']) && $this->etreNull($donnees['longitude'])) ? '' : $donnees['latitude'].'/'.$donnees['longitude'];
643
		$coordonnees = ($this->etreNull($donnees['latitude']) && $this->etreNull($donnees['longitude'])) ? '' : $donnees['latitude'].'/'.$donnees['longitude'];
642
		$commentaire_obs = $donnees['commentaire_obs'];
644
		$commentaire_obs = $donnees['commentaire_obs'];
643
		$date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
645
		$date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
644
		$date_transmission = $this->formaterDate($donnees['date_transmission']);
646
		$date_transmission = $this->formaterDate($donnees['date_transmission']);
645
		$date_modification = $this->formaterDate($donnees['date_modification']);
647
		$date_modification = $this->formaterDate($donnees['date_modification']);
646
		$date_creation = $this->formaterDate($donnees['date_creation']);
648
		$date_creation = $this->formaterDate($donnees['date_creation']);
647
		$transmission = $donnees['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
649
		$transmission = $donnees['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
648
 
650
 
649
		$description = '<style>.champ{color:grey} .gauche{float:left;padding:0 20px 0 0;} ul{list-style-type:none;padding:0;}</style>'.
651
		$description = '<style>.champ{color:grey} .gauche{float:left;padding:0 20px 0 0;} ul{list-style-type:none;padding:0;}</style>'.
650
			'<h2>'.(!$this->etreNull($id_obs) ? "Image #$id_img liée à l'observation #$id_obs" : "Image #$id_img non liée à une observation.").'</h2>'.
652
			'<h2>'.(!$this->etreNull($id_obs) ? "Image #$id_img liée à l'observation #$id_obs" : "Image #$id_img non liée à une observation.").'</h2>'.
651
			'<a href="'.$url_img_normale.'"><img class="gauche" src="'.$url_img.'" alt="'.$nom_fichier.'" /></a>'.
653
			'<a href="'.$url_img_normale.'"><img class="gauche" src="'.$url_img.'" alt="'.$nom_fichier.'" /></a>'.
652
			'<div class="gauche">'.
654
			'<div class="gauche">'.
653
			'<h3>'.'Image'.'</h3>'.
655
			'<h3>'.'Image'.'</h3>'.
654
			'<ul>'.
656
			'<ul>'.
655
			'<li>'.'<span class="champ">URL :</span> <a href="'.$url_img_normale.'" onclick="javascript:window.open(this.href);return false;">'.$url_img_normale.'</a></li>'.
657
			'<li>'.'<span class="champ">URL :</span> <a href="'.$url_img_normale.'" onclick="javascript:window.open(this.href);return false;">'.$url_img_normale.'</a></li>'.
656
			'<li>'.'<span class="champ">Importée le :</span> '.$item['date_maj_simple'].'</li>'.
658
			'<li>'.'<span class="champ">Importée le :</span> '.$item['date_maj_simple'].'</li>'.
657
			'<li>'.'<span class="champ">Par :</span> '.
659
			'<li>'.'<span class="champ">Par :</span> '.
658
				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
660
				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
659
			'</li>'.
661
			'</li>'.
660
			'<li>'.'<span class="champ">Nom du fichier :</span> '.$this->nePasInterpreterXml($nom_fichier).'</li>'.
662
			'<li>'.'<span class="champ">Nom du fichier :</span> '.$this->nePasInterpreterXml($nom_fichier).'</li>'.
661
			'<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
663
			'<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
662
			'<li>'.'<span class="champ">Commentaires :</span> '.$this->nePasInterpreterXml($commentaire_img).'</li>'.
664
			'<li>'.'<span class="champ">Commentaires :</span> '.$this->nePasInterpreterXml($commentaire_img).'</li>'.
663
			'<li>'.'<span class="champ">Mots-clés :</span> '.$this->nePasInterpreterXml($mots_cles_image).'</li>'.
665
			'<li>'.'<span class="champ">Mots-clés :</span> '.$this->nePasInterpreterXml($mots_cles_image).'</li>'.
664
			'</ul>'.
666
			'</ul>'.
665
			'</div>';
667
			'</div>';
666
			// TODO : ajouter le champ commentaire EXIF.
668
			// TODO : ajouter le champ commentaire EXIF.
667
		if (! $this->etreNull($id_obs)) {
669
		if (! $this->etreNull($id_obs)) {
668
			$description .=
670
			$description .=
669
				'<div class="gauche">'.
671
				'<div class="gauche">'.
670
				'<h3>'.'Observation'.'</h3>'.
672
				'<h3>'.'Observation'.'</h3>'.
671
				'<ul>'.
673
				'<ul>'.
672
				'<li>'.'<span class="champ">Famille :</span> '.$famille.'</li>'.
674
				'<li>'.'<span class="champ">Famille :</span> '.$famille.'</li>'.
673
				'<li>'.'<span class="champ">Nom saisi :</span> '.$nom_saisi.'</li>'.
675
				'<li>'.'<span class="champ">Nom saisi :</span> '.$nom_saisi.'</li>'.
674
				'<li>'.'<span class="champ">Nom retenu :</span> '.$nom_retenu.'</li>'.
676
				'<li>'.'<span class="champ">Nom retenu :</span> '.$nom_retenu.'</li>'.
675
				'<li>'.'<span class="champ">Observée le :</span> '.$date_observation.'</li>'.
677
				'<li>'.'<span class="champ">Observée le :</span> '.$date_observation.'</li>'.
676
				'<li>'.'<span class="champ">Lieu :</span> '.$lieu.'</li>'.
678
				'<li>'.'<span class="champ">Lieu :</span> '.$lieu.'</li>'.
677
				'<li>'.'<span class="champ">Milieu :</span> '.$milieu.'</li>'.
679
				'<li>'.'<span class="champ">Milieu :</span> '.$milieu.'</li>'.
678
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Coordonnées (Lat/Long) :</span> '.$coordonnees.'</li>' : '').
680
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Coordonnées (Lat/Long) :</span> '.$coordonnees.'</li>' : '').
679
				'<li>'.'<span class="champ">Commentaire :</span> '.$this->nePasInterpreterXml($commentaire_obs).'</li>'.
681
				'<li>'.'<span class="champ">Commentaire :</span> '.$this->nePasInterpreterXml($commentaire_obs).'</li>'.
680
				'<li>'.'<span class="champ">Mots-clés :</span> '.$this->nePasInterpreterXml($mots_cles_obs).'</li>'.
682
				'<li>'.'<span class="champ">Mots-clés :</span> '.$this->nePasInterpreterXml($mots_cles_obs).'</li>'.
681
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Transmis (= public) :</span> '.$transmission.'</li>' : '').
683
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Transmis (= public) :</span> '.$transmission.'</li>' : '').
682
				'<li><span class="champ">Modifiée le :</span> '.$date_modification.'</li>'.
684
				'<li><span class="champ">Modifiée le :</span> '.$date_modification.'</li>'.
683
				'<li><span class="champ">Créée le :</span> '.$date_creation.'</li>'.
685
				'<li><span class="champ">Créée le :</span> '.$date_creation.'</li>'.
684
				'</ul>'.
686
				'</ul>'.
685
				'</div>';
687
				'</div>';
686
		}
688
		}
687
		$description = $this->nettoyerTexte($description);
689
		$description = $this->nettoyerTexte($description);
688
		return $description;
690
		return $description;
689
	}
691
	}
690
 
692
 
691
	private function getServiceParMotsCles() {
693
	private function getServiceParMotsCles() {
692
		$infos=array();
694
		$infos=array();
693
		$infos[0]['nom_sel_nn'] = '';
695
		$infos[0]['nom_sel_nn'] = '';
694
		$infos[0]['date_creation'] = '2011-06-28';
696
		$infos[0]['date_creation'] = '2011-06-28';
695
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
697
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
696
		$donnees['items'][0]['guid'] = 0;
698
		$donnees['items'][0]['guid'] = 0;
697
		$donnees['items'][0]['description'] =  'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
699
		$donnees['items'][0]['description'] =  'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
698
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?tag=';
700
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?tag=';
699
		if (isset($this->parametres[0])) {
701
		if (isset($this->parametres[0])) {
700
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
702
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
701
		} else {
703
		} else {
702
			$donnees['items'][0]['description'] .= '</b>';
704
			$donnees['items'][0]['description'] .= '</b>';
703
		}
705
		}
704
		$donnees['items'][0]['titre'] = '';
706
		$donnees['items'][0]['titre'] = '';
705
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
707
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
706
		return $contenu;
708
		return $contenu;
707
	}
709
	}
708
 
710
 
709
	private function getServiceParCommune() {
711
	private function getServiceParCommune() {
710
		$infos=array();
712
		$infos=array();
711
		$infos[0]['nom_sel_nn'] = '';
713
		$infos[0]['nom_sel_nn'] = '';
712
		$infos[0]['date_creation'] = '2011-06-28';
714
		$infos[0]['date_creation'] = '2011-06-28';
713
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
715
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
714
		$donnees['items'][0]['guid'] = 0;
716
		$donnees['items'][0]['guid'] = 0;
715
		$donnees['items'][0]['description'] = 'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
717
		$donnees['items'][0]['description'] = 'Ce flux est devenu obsolète. Veuillez utiliser le flux '.
716
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?commune=';
718
			'<b>http://www.tela-botanica.org/eflore/cel2/jrest/CelSyndicationImage/multicriteres/atom?commune=';
717
		if (isset($this->parametres[0])) {
719
		if (isset($this->parametres[0])) {
718
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
720
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
719
		} else {
721
		} else {
720
			$donnees['items'][0]['description'] .= '</b>';
722
			$donnees['items'][0]['description'] .= '</b>';
721
		}
723
		}
722
		$donnees['items'][0]['titre'] = '';
724
		$donnees['items'][0]['titre'] = '';
723
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
725
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
724
		return $contenu;
726
		return $contenu;
725
	}
727
	}
726
 
728
 
727
	private function getIntituleAuteur($courriel) {
729
	private function getIntituleAuteur($courriel) {
728
		$courriel = strtolower($courriel);
730
		$courriel = strtolower($courriel);
729
		$intitule = $this->auteurs[$courriel];
731
		$intitule = $this->auteurs[$courriel];
730
		return $intitule;
732
		return $intitule;
731
	}
733
	}
732
}
734
}