Subversion Repositories eFlore/Applications.cel

Rev

Rev 3010 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3010 Rev 3034
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_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
			// 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 * '.
437
		$sous_requete = 'SELECT c.* '.
438
			'FROM cel_images c '.
438
			'FROM cel_images c '.
439
			'WHERE id_image '.
-
 
440
			' IN (SELECT id_image FROM cel_images a '.
-
 
441
			(($this->etreFluxAdmin()) ? '' : 'INNER JOIN cel_obs b ON a.ce_observation = b.id_observation AND b.transmission = 1 ').
439
			(($this->etreFluxAdmin()) ? '' : 'INNER JOIN cel_obs b ON c.ce_observation = b.id_observation AND b.transmission = 1 ');
442
			') ';
-
 
443
		$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').' '.
444
			"LIMIT $this->start,$this->limit ";
441
			"LIMIT $this->start,$this->limit ";
445
 
442
 
446
		// Construction de la requête
443
		// Construction de la requête
447
		$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, '.
448
			' 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 '.
449
			'FROM ('.$sous_requete.') AS c '.
446
			'FROM ('.$sous_requete.') AS c '.
450
			'	INNER JOIN cel_obs AS b '.
447
			'	INNER JOIN cel_obs AS b '.
451
			'		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 ';
452
		//echo $requete;
449
		//echo $requete;
453
		return $requete;
450
		return $requete;
454
	}
451
	}
455
 
452
 
456
	private function creerRequeteAvecParametres() {
453
	private function creerRequeteAvecParametres() {
457
		// Construction de la requête
454
		// Construction de la requête
458
		$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, '.
459
		    ' 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 '.
460
			'FROM cel_images AS c '.
457
			'FROM cel_images AS c '.
461
			'	INNER JOIN cel_obs AS b '.
458
			'	INNER JOIN cel_obs AS b '.
462
			'		ON (c.ce_observation = b.id_observation) '.
459
			'		ON (c.ce_observation = b.id_observation) '.
463
			'WHERE b.ce_utilisateur = c.ce_utilisateur '.
460
			'WHERE b.ce_utilisateur = c.ce_utilisateur '.
464
			(($this->etreFluxAdmin()) ? '' : 'AND b.transmission = 1 ').
461
			(($this->etreFluxAdmin()) ? '' : 'AND b.transmission = 1 ').
465
			'	AND ';
462
			'	AND ';
466
 
463
 
467
		if ($this->estUneRechercheGenerale()) {
464
		if ($this->estUneRechercheGenerale()) {
468
			$chaine_requete = $_GET['recherche'];
465
			$chaine_requete = $_GET['recherche'];
469
			$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
466
			$requete .= $this->creerSousRequeteRechercheGenerale($chaine_requete);
470
		} else {
467
		} else {
471
			$criteres = $this->traiterCriteresMultiples($_GET) ;
468
			$criteres = $this->traiterCriteresMultiples($_GET) ;
472
			if (!empty($criteres)) {
469
			if (!empty($criteres)) {
473
				$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
470
				$requete .= $this->creerSousRequeteRechercheParCriteres($criteres);
474
			}
471
			}
475
		}
472
		}
476
		$requete = str_replace(' AND ) ',' ', $requete);
473
		$requete = str_replace(' AND ) ',' ', $requete);
477
		$requete = rtrim($requete, 'AND ');
474
		$requete = rtrim($requete, 'AND ');
478
		$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  :
479
			'c.date_creation DESC').' '."LIMIT $this->start,$this->limit ";
476
			'c.date_creation DESC').' '."LIMIT $this->start,$this->limit ";
480
		return $requete;
477
		return $requete;
481
	}
478
	}
482
 
479
 
483
	private function creerSousRequeteRechercheParCriteres($criteres) {
480
	private function creerSousRequeteRechercheParCriteres($criteres) {
484
		$requete = '';
481
		$requete = '';
485
		foreach ($criteres as $pair) {
482
		foreach ($criteres as $pair) {
486
			$nom_valeur = explode("=",$pair);
483
			$nom_valeur = explode("=",$pair);
487
			if (sizeof($nom_valeur) != 0) {
484
			if (sizeof($nom_valeur) != 0) {
488
				switch ($nom_valeur[0]) {
485
				switch ($nom_valeur[0]) {
489
					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;
490
					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;
491
					case "c.commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
488
					case "c.commentaire" : $mots_comment_liste = explode(" " , $nom_valeur[1]);
492
						foreach($mots_comment_liste as $mot_comment) {
489
						foreach($mots_comment_liste as $mot_comment) {
493
							$mot_comment = trim($mot_comment) ;
490
							$mot_comment = trim($mot_comment) ;
494
							$requete .= $nom_valeur[0].' LIKE '.Cel::db()->quote('%'.$mot_comment.'%').' AND ';
491
							$requete .= $nom_valeur[0].' LIKE '.Cel::db()->quote('%'.$mot_comment.'%').' AND ';
495
						}
492
						}
496
						break;
493
						break;
497
					case "c.date_prise_de_vue" :
494
					case "c.date_prise_de_vue" :
498
						$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
495
						$nom_valeur[1] = str_replace('/', '-', $nom_valeur[1]);
499
						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)) {
500
							$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
497
							$nom_valeur[1] = $matches[3].'-'.$matches[2].'-'.$matches[1];
501
						}
498
						}
502
						$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;
503
					case "b.ce_zone_geo" :
500
					case "b.ce_zone_geo" :
504
						$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;
505
					case "b.nom_ret" :
502
					case "b.nom_ret" :
506
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
503
						if ($nom_valeur[1] == "indetermine") $nom_valeur[1] = 'null';
507
						$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 "%'.
508
							$nom_valeur[1].'%") AND '; break;
505
							$nom_valeur[1].'%") AND '; break;
509
					case "tag" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]).' AND '; break;
506
					case "tag" : $requete .= $this->creerSousRequeteMotsCles($nom_valeur[1]).' AND '; break;
510
					case "projet" : $requete .= $this->creerSousRequeteProjet($nom_valeur[1]).' AND '; break;
507
					case "projet" : $requete .= $this->creerSousRequeteProjet($nom_valeur[1]).' AND '; break;
511
					case "referentiel" : $requete .= $this->creerSousRequeteReferentiel($nom_valeur[1]).' AND '; break;
508
					case "referentiel" : $requete .= $this->creerSousRequeteReferentiel($nom_valeur[1]).' AND '; break;
512
					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;
513
					default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
510
					default : $requete .= $nom_valeur[0].' = "'.$nom_valeur[1].'" AND '; break;
514
				}
511
				}
515
			}
512
			}
516
		}
513
		}
517
		$requete = rtrim($requete,' AND ');
514
		$requete = rtrim($requete,' AND ');
518
		return $requete;
515
		return $requete;
519
	}
516
	}
520
	
517
	
521
	private function creerSousRequeteGroupeZonesGeo($groupe_zones_geo) {
518
	private function creerSousRequeteGroupeZonesGeo($groupe_zones_geo) {
522
		$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);
523
		$res = Cel::db()->requeter($req);
520
		$res = Cel::db()->requeter($req);
524
		$zones = array();
521
		$zones = array();
525
		foreach($res as &$r) {
522
		foreach($res as &$r) {
526
			$zones[] = Cel::db()->proteger($r['valeur']);
523
			$zones[] = Cel::db()->proteger($r['valeur']);
527
		}
524
		}
528
		$sql = '(b.ce_zone_geo IN ('.implode(',', $zones).')) ';
525
		$sql = '(b.ce_zone_geo IN ('.implode(',', $zones).')) ';
529
	
526
	
530
		return $sql;
527
		return $sql;
531
	}
528
	}
532
 
529
 
533
	private function creerSousRequeteMotsCles($mot_cle) {
530
	private function creerSousRequeteMotsCles($mot_cle) {
534
	$requete = '';
531
	$requete = '';
535
		if (preg_match('/.*OU.*/', $mot_cle)) {
532
		if (preg_match('/.*OU.*/', $mot_cle)) {
536
			$mots_cles_tab = explode('OU',$mot_cle);
533
			$mots_cles_tab = explode('OU',$mot_cle);
537
			foreach($mots_cles_tab as $mot_cle_item) {
534
			foreach($mots_cles_tab as $mot_cle_item) {
538
				$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 ';
539
			}
536
			}
540
			$requete = '('.rtrim($requete,'OR ').')';
537
			$requete = '('.rtrim($requete,'OR ').')';
541
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
538
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
542
			$mots_cles_tab = explode('ET',$mot_cle);
539
			$mots_cles_tab = explode('ET',$mot_cle);
543
			foreach($mots_cles_tab as $mot_cle_item) {
540
			foreach($mots_cles_tab as $mot_cle_item) {
544
				$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 ';
545
			}
542
			}
546
			$requete = '('.rtrim($requete, 'AND ').') ';
543
			$requete = '('.rtrim($requete, 'AND ').') ';
547
		} else {
544
		} else {
548
			$requete = "(c.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
545
			$requete = "(c.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
549
		}
546
		}
550
		return $requete;
547
		return $requete;
551
	}
548
	}
552
 
549
 
553
	private function creerSousRequeteProjet($mot_cle) {
550
	private function creerSousRequeteProjet($mot_cle) {
554
		$requete = '';
551
		$requete = '';
555
		if (preg_match('/.*OU.*/', $mot_cle)) {
552
		if (preg_match('/.*OU.*/', $mot_cle)) {
556
			$mots_cles_tab = explode('OU',$mot_cle);
553
			$mots_cles_tab = explode('OU',$mot_cle);
557
			foreach($mots_cles_tab as $mot_cle_item) {
554
			foreach($mots_cles_tab as $mot_cle_item) {
558
				$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 ';
559
			}
556
			}
560
			$requete = '('.rtrim($requete,'OR ').')';
557
			$requete = '('.rtrim($requete,'OR ').')';
561
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
558
		} else if (preg_match('/.*ET.*/', $mot_cle)) {
562
			$mots_cles_tab = explode('ET',$mot_cle);
559
			$mots_cles_tab = explode('ET',$mot_cle);
563
			foreach($mots_cles_tab as $mot_cle_item) {
560
			foreach($mots_cles_tab as $mot_cle_item) {
564
				$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 ';
565
			}
562
			}
566
			$requete = '('.rtrim($requete, 'AND ').') ';
563
			$requete = '('.rtrim($requete, 'AND ').') ';
567
		} else {
564
		} else {
568
			$requete = "(b.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
565
			$requete = "(b.mots_cles_texte LIKE ".Cel::db()->proteger('%'.$mot_cle.'%').') ';
569
		}
566
		}
570
		return $requete;
567
		return $requete;
571
	}
568
	}
572
 
569
 
573
	private function creerSousRequeteReferentiel($referentiel) {
570
	private function creerSousRequeteReferentiel($referentiel) {
574
		$requete = "b.nom_referentiel LIKE '$referentiel%'";
571
		$requete = "b.nom_referentiel LIKE '$referentiel%'";
575
		return $requete;
572
		return $requete;
576
	}
573
	}
577
 
574
 
578
	private function creerSousRequeteRechercheGenerale($chaine_requete) {
575
	private function creerSousRequeteRechercheGenerale($chaine_requete) {
579
		$requete = '';
576
		$requete = '';
580
		if (trim($chaine_requete) != '') {
577
		if (trim($chaine_requete) != '') {
581
			$chaine_requete = strtolower($chaine_requete);
578
			$chaine_requete = strtolower($chaine_requete);
582
			$chaine_requete = str_replace(' ', '_', $chaine_requete);
579
			$chaine_requete = str_replace(' ', '_', $chaine_requete);
583
			$requete = ' ('.
580
			$requete = ' ('.
584
				'b.nom_ret LIKE "'.$chaine_requete.'%"'.
581
				'b.nom_ret LIKE "'.$chaine_requete.'%"'.
585
				' OR '.
582
				' OR '.
586
				'b.nom_sel LIKE "'.$chaine_requete.'%"'.
583
				'b.nom_sel LIKE "'.$chaine_requete.'%"'.
587
				' OR '.
584
				' OR '.
588
				'b.zone_geo LIKE "'.$chaine_requete.'%" '.
585
				'b.zone_geo LIKE "'.$chaine_requete.'%" '.
589
				' OR '.
586
				' OR '.
590
				'b.ce_zone_geo LIKE "INSEE-C:'.$chaine_requete.'%" '.
587
				'b.ce_zone_geo LIKE "INSEE-C:'.$chaine_requete.'%" '.
591
				' OR '.
588
				' OR '.
592
				'b.ce_zone_geo LIKE "'.$chaine_requete.'%" '.
589
				'b.ce_zone_geo LIKE "'.$chaine_requete.'%" '.
593
				' OR '.
590
				' OR '.
594
				'c.ce_utilisateur LIKE "'.$chaine_requete.'%" '.
591
				'c.ce_utilisateur LIKE "'.$chaine_requete.'%" '.
595
				' OR '.
592
				' OR '.
596
				'c.courriel_utilisateur LIKE "'.$chaine_requete.'%" '.
593
				'c.courriel_utilisateur LIKE "'.$chaine_requete.'%" '.
597
				' OR '.
594
				' OR '.
598
				'b.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
595
				'b.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
599
				' OR '.
596
				' OR '.
600
				'c.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
597
				'c.mots_cles_texte LIKE "'.$chaine_requete.'%" '.
601
				') ';
598
				') ';
602
		}
599
		}
603
		return $requete;
600
		return $requete;
604
	}
601
	}
605
 
602
 
606
	private function estUneRechercheGenerale() {
603
	private function estUneRechercheGenerale() {
607
		return isset($_GET['recherche']);
604
		return isset($_GET['recherche']);
608
	}
605
	}
609
 
606
 
610
	private function traiterCriteresMultiples($tableau_criteres) {
607
	private function traiterCriteresMultiples($tableau_criteres) {
611
		$tableau_criteres_pour_bdd = array();
608
		$tableau_criteres_pour_bdd = array();
612
 
609
 
613
		foreach($tableau_criteres as $nom_critere => $valeur_critere) {
610
		foreach($tableau_criteres as $nom_critere => $valeur_critere) {
614
			if (isset($this->criteres[$nom_critere])) {
611
			if (isset($this->criteres[$nom_critere])) {
615
				$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
612
				$tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
616
			}
613
			}
617
		}
614
		}
618
		return $tableau_criteres_pour_bdd;
615
		return $tableau_criteres_pour_bdd;
619
	}
616
	}
620
 
617
 
621
	private function creerDescriptionComplet($donnees, $item) {
618
	private function creerDescriptionComplet($donnees, $item) {
622
		$auteur = $this->getIntituleAuteur($donnees['courriel_utilisateur']);
619
		$auteur = $this->getIntituleAuteur($donnees['courriel_utilisateur']);
623
		$auteur_mail = $donnees['courriel_utilisateur'];
620
		$auteur_mail = $donnees['courriel_utilisateur'];
624
 
621
 
625
		$id_img = $donnees['id_image'];
622
		$id_img = $donnees['id_image'];
626
		$nom_fichier = $donnees['nom_original'];
623
		$nom_fichier = $donnees['nom_original'];
627
		$url_img = $this->getUrlImage($donnees['id_image'], 'CS');
624
		$url_img = $this->getUrlImage($donnees['id_image'], 'CS');
628
		$url_img_normale = $this->getUrlImage($donnees['id_image'], 'XL');
625
		$url_img_normale = $this->getUrlImage($donnees['id_image'], 'XL');
629
		//
626
		//
630
		$mots_cles_image = $donnees['mots_cles_texte_images'];
627
		$mots_cles_image = $donnees['mots_cles_texte_images'];
631
		$note = ($donnees['note_qualite'] +1).'/5';
628
		$note = ($donnees['note_qualite'] +1).'/5';
632
		$commentaire_img = $donnees['commentaire_img'];
629
		$commentaire_img = $donnees['commentaire_img'];
633
 
630
 
634
		$id_obs = $donnees['id_observation'];
631
		$id_obs = $donnees['id_observation'];
635
		$famille = $donnees['famille'];
632
		$famille = $donnees['famille'];
636
		$nom_saisi = $donnees['nom_sel'];
633
		$nom_saisi = $donnees['nom_sel'];
637
		$nom_retenu = $donnees['nom_ret'];
634
		$nom_retenu = $donnees['nom_ret'];
638
		//
635
		//
639
		$mots_cles_obs = $donnees['mots_cles_texte_obs'];
636
		$mots_cles_obs = $donnees['mots_cles_texte_obs'];
640
		
637
		
641
		$lieu =  $this->formaterZoneGeoEtCodePourAffichage($donnees).' > '.$donnees['lieudit'].' > '.$donnees['station'];
638
		$lieu =  $this->formaterZoneGeoEtCodePourAffichage($donnees).' > '.$donnees['lieudit'].' > '.$donnees['station'];
642
		$milieu = $donnees['milieu'];
639
		$milieu = $donnees['milieu'];
643
		$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'];
644
		$commentaire_obs = $donnees['commentaire_obs'];
641
		$commentaire_obs = $donnees['commentaire_obs'];
645
		$date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
642
		$date_observation = $this->formaterDate($donnees['date_observation'], '%A %d %B %Y');
646
		$date_transmission = $this->formaterDate($donnees['date_transmission']);
643
		$date_transmission = $this->formaterDate($donnees['date_transmission']);
647
		$date_modification = $this->formaterDate($donnees['date_modification']);
644
		$date_modification = $this->formaterDate($donnees['date_modification']);
648
		$date_creation = $this->formaterDate($donnees['date_creation']);
645
		$date_creation = $this->formaterDate($donnees['date_creation']);
649
		$transmission = $donnees['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
646
		$transmission = $donnees['transmission'] == 1 ? "oui ($date_transmission)" : 'non';
650
 
647
 
651
		$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>'.
652
			'<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>'.
653
			'<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>'.
654
			'<div class="gauche">'.
651
			'<div class="gauche">'.
655
			'<h3>'.'Image'.'</h3>'.
652
			'<h3>'.'Image'.'</h3>'.
656
			'<ul>'.
653
			'<ul>'.
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>'.
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>'.
658
			'<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>'.
659
			'<li>'.'<span class="champ">Par :</span> '.
656
			'<li>'.'<span class="champ">Par :</span> '.
660
				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
657
				(($this->etreFluxAdmin()) ? '<a href="mailto:'.$auteur_mail.'">'.$auteur.'</a>' : $auteur).
661
			'</li>'.
658
			'</li>'.
662
			'<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>'.
663
			'<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
660
			'<li>'.'<span class="champ">Note qualité :</span> '.$note.'</li>'.
664
			'<li>'.'<span class="champ">Commentaires :</span> '.$this->nePasInterpreterXml($commentaire_img).'</li>'.
661
			'<li>'.'<span class="champ">Commentaires :</span> '.$this->nePasInterpreterXml($commentaire_img).'</li>'.
665
			'<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>'.
666
			'</ul>'.
663
			'</ul>'.
667
			'</div>';
664
			'</div>';
668
			// TODO : ajouter le champ commentaire EXIF.
665
			// TODO : ajouter le champ commentaire EXIF.
669
		if (! $this->etreNull($id_obs)) {
666
		if (! $this->etreNull($id_obs)) {
670
			$description .=
667
			$description .=
671
				'<div class="gauche">'.
668
				'<div class="gauche">'.
672
				'<h3>'.'Observation'.'</h3>'.
669
				'<h3>'.'Observation'.'</h3>'.
673
				'<ul>'.
670
				'<ul>'.
674
				'<li>'.'<span class="champ">Famille :</span> '.$famille.'</li>'.
671
				'<li>'.'<span class="champ">Famille :</span> '.$famille.'</li>'.
675
				'<li>'.'<span class="champ">Nom saisi :</span> '.$nom_saisi.'</li>'.
672
				'<li>'.'<span class="champ">Nom saisi :</span> '.$nom_saisi.'</li>'.
676
				'<li>'.'<span class="champ">Nom retenu :</span> '.$nom_retenu.'</li>'.
673
				'<li>'.'<span class="champ">Nom retenu :</span> '.$nom_retenu.'</li>'.
677
				'<li>'.'<span class="champ">Observée le :</span> '.$date_observation.'</li>'.
674
				'<li>'.'<span class="champ">Observée le :</span> '.$date_observation.'</li>'.
678
				'<li>'.'<span class="champ">Lieu :</span> '.$lieu.'</li>'.
675
				'<li>'.'<span class="champ">Lieu :</span> '.$lieu.'</li>'.
679
				'<li>'.'<span class="champ">Milieu :</span> '.$milieu.'</li>'.
676
				'<li>'.'<span class="champ">Milieu :</span> '.$milieu.'</li>'.
680
				(($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>' : '').
681
				'<li>'.'<span class="champ">Commentaire :</span> '.$this->nePasInterpreterXml($commentaire_obs).'</li>'.
678
				'<li>'.'<span class="champ">Commentaire :</span> '.$this->nePasInterpreterXml($commentaire_obs).'</li>'.
682
				'<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>'.
683
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Transmis (= public) :</span> '.$transmission.'</li>' : '').
680
				(($this->etreFluxAdmin()) ? '<li><span class="champ">Transmis (= public) :</span> '.$transmission.'</li>' : '').
684
				'<li><span class="champ">Modifiée le :</span> '.$date_modification.'</li>'.
681
				'<li><span class="champ">Modifiée le :</span> '.$date_modification.'</li>'.
685
				'<li><span class="champ">Créée le :</span> '.$date_creation.'</li>'.
682
				'<li><span class="champ">Créée le :</span> '.$date_creation.'</li>'.
686
				'</ul>'.
683
				'</ul>'.
687
				'</div>';
684
				'</div>';
688
		}
685
		}
689
		$description = $this->nettoyerTexte($description);
686
		$description = $this->nettoyerTexte($description);
690
		return $description;
687
		return $description;
691
	}
688
	}
692
 
689
 
693
	private function getServiceParMotsCles() {
690
	private function getServiceParMotsCles() {
694
		$infos=array();
691
		$infos=array();
695
		$infos[0]['nom_sel_nn'] = '';
692
		$infos[0]['nom_sel_nn'] = '';
696
		$infos[0]['date_creation'] = '2011-06-28';
693
		$infos[0]['date_creation'] = '2011-06-28';
697
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
694
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
698
		$donnees['items'][0]['guid'] = 0;
695
		$donnees['items'][0]['guid'] = 0;
699
		$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 '.
700
			'<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=';
701
		if (isset($this->parametres[0])) {
698
		if (isset($this->parametres[0])) {
702
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
699
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
703
		} else {
700
		} else {
704
			$donnees['items'][0]['description'] .= '</b>';
701
			$donnees['items'][0]['description'] .= '</b>';
705
		}
702
		}
706
		$donnees['items'][0]['titre'] = '';
703
		$donnees['items'][0]['titre'] = '';
707
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
704
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
708
		return $contenu;
705
		return $contenu;
709
	}
706
	}
710
 
707
 
711
	private function getServiceParCommune() {
708
	private function getServiceParCommune() {
712
		$infos=array();
709
		$infos=array();
713
		$infos[0]['nom_sel_nn'] = '';
710
		$infos[0]['nom_sel_nn'] = '';
714
		$infos[0]['date_creation'] = '2011-06-28';
711
		$infos[0]['date_creation'] = '2011-06-28';
715
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
712
		$donnees = $this->construireDonneesCommunesAuFlux($infos);
716
		$donnees['items'][0]['guid'] = 0;
713
		$donnees['items'][0]['guid'] = 0;
717
		$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 '.
718
			'<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=';
719
		if (isset($this->parametres[0])) {
716
		if (isset($this->parametres[0])) {
720
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
717
			$donnees['items'][0]['description'] .= $this->parametres[0].'</b>';
721
		} else {
718
		} else {
722
			$donnees['items'][0]['description'] .= '</b>';
719
			$donnees['items'][0]['description'] .= '</b>';
723
		}
720
		}
724
		$donnees['items'][0]['titre'] = '';
721
		$donnees['items'][0]['titre'] = '';
725
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
722
		$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
726
		return $contenu;
723
		return $contenu;
727
	}
724
	}
728
 
725
 
729
	private function getIntituleAuteur($courriel) {
726
	private function getIntituleAuteur($courriel) {
730
		$courriel = strtolower($courriel);
727
		$courriel = strtolower($courriel);
731
		$intitule = $this->auteurs[$courriel];
728
		$intitule = $this->auteurs[$courriel];
732
		return $intitule;
729
		return $intitule;
733
	}
730
	}
734
}
-
 
735
731
}
-
 
732