Subversion Repositories eFlore/Applications.cel

Rev

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

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