Subversion Repositories eFlore/Applications.cel

Rev

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

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