Subversion Repositories eFlore/Applications.cel

Rev

Rev 798 | Rev 1129 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 798 Rev 1066
Line 11... Line 11...
11
 * @copyright © 2010, Jean-Pascal MILCENT
11
 * @copyright © 2010, Jean-Pascal MILCENT
12
 */
12
 */
13
abstract class Cel {
13
abstract class Cel {
14
	const TYPE_OBS = 'observation';
14
	const TYPE_OBS = 'observation';
15
	const TYPE_IMG = 'image';
15
	const TYPE_IMG = 'image';
-
 
16
	const SQL_MODE_ASSOC = PDO::FETCH_ASSOC;
-
 
17
	const SQL_MODE_OBJET = PDO::FETCH_OBJ;
-
 
18
	const SQL_RETOUR_COMPLET = 'All';
-
 
19
	const SQL_RETOUR_LIGNE = 'Row';
-
 
20
	const SQL_RETOUR_COLONNE = 'Column';
-
 
21
	const SQL_RETOUR_BRUT = 'Raw';
16
	
22
 
17
	public $config;
23
	public $config;
18
	private $ressources;
24
	private $ressources;
19
	private $parametres;
25
	private $parametres;
20
	protected $bdd;
26
	protected $bdd;
21
	protected $messages = array();
27
	protected $messages = array();
Line 29... Line 35...
29
		setlocale(LC_ALL, $this->config['settings']['locale']);
35
		setlocale(LC_ALL, $this->config['settings']['locale']);
30
		date_default_timezone_set($this->config['settings']['fuseauHoraire']);
36
		date_default_timezone_set($this->config['settings']['fuseauHoraire']);
Line 31... Line 37...
31
 
37
 
32
		// Connection à la base de données
38
		// Connection à la base de données
33
		$this->bdd = $this->connecterPDO($this->config, 'database_cel');
39
		$this->bdd = $this->connecterPDO($this->config, 'database_cel');
34
		
40
 
35
		// Nettoyage du _GET (sécurité)
41
		// Nettoyage du _GET (sécurité)
36
		$this->recupererParametresUrl();
42
		$this->recupererParametresUrl();
37
		$this->definirParametresUrlParDefaut();
43
		$this->definirParametresUrlParDefaut();
38
		
44
 
39
		// Définition de variable générale dans la config
45
		// Définition de variable générale dans la config
40
		$this->config['settings']['baseURLAbsoluDyn'] = 'http://'.$_SERVER['SERVER_NAME'].$this->config['settings']['baseURL'].'%s';
46
		$this->config['settings']['baseURLAbsoluDyn'] = 'http://'.$_SERVER['SERVER_NAME'].$this->config['settings']['baseURL'].'%s';
Line 41... Line 47...
41
	}
47
	}
Line 55... Line 61...
55
		}
61
		}
56
		// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché)
62
		// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché)
57
		$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
63
		$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
58
        return $PDO;
64
        return $PDO;
59
	}
65
	}
60
	
66
 
-
 
67
	/**
-
 
68
	* Encapsule executerRequete.
-
 
69
	* @param String $requete
-
 
70
	*/
61
	protected function executerRequete($requete, $retour = 'All', $mode = PDO::FETCH_ASSOC) {
71
	protected function requeter($requete, $retour = self::SQL_RETOUR_COMPLET, $mode = PDO::FETCH_ASSOC) {
-
 
72
		return $this->executerRequete($requete, $retour, $mode);
-
 
73
	}
-
 
74
 
-
 
75
	/**
-
 
76
	 * Encapsule executerRequeteSimple
-
 
77
	 * @param String $requete
-
 
78
	 */
-
 
79
	protected function executer($requete) {
-
 
80
		return $this->executerRequeteSimple($requete);
-
 
81
	}
-
 
82
 
-
 
83
/**
-
 
84
	 * @deprecated utiliser executer() à la place
-
 
85
	 * @see executer()
-
 
86
	 */
-
 
87
	protected function executerRequeteSimple($requete) {
-
 
88
		$resultat = false;
62
		try {
89
		try {
63
			switch ($retour) {
-
 
64
				case 'All' :
-
 
65
					$resultat = $this->bdd->query($requete)->fetchAll($mode);
-
 
66
					break;
-
 
67
				case 'Column' :
-
 
68
					$resultat = $this->bdd->query($requete)->fetchColumn();
90
			$resultat = $this->bdd->exec($requete);
69
					break;
-
 
70
				default:
-
 
71
					$resultat = false;
-
 
72
					$this->messages[] = "Le type de retour '$retour' est inconnu.";
-
 
73
			}
-
 
74
			if ($resultat === false) {
91
			if ($resultat === false) {
75
				$this->messages[] = "La requête a retourné aucun résultat.";
92
				$this->debug[] = "La requête a échoué : $requete";
76
			}
93
			}
77
		} catch (PDOException $e) {
94
		} catch (PDOException $e) {
78
			$this->messages[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
95
			$this->debug[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
79
		}
96
		}
80
		return $resultat;
97
		return $resultat;
81
	}
98
	}
82
	
99
 
-
 
100
	/**
83
	protected function executerRequeteSimple($requete) {
101
	 * @deprecated utiliser requeter() à la place
-
 
102
	 * @see requeter()
-
 
103
	 */
-
 
104
	protected function executerRequete($requete, $retour = self::SQL_RETOUR_COMPLET, $mode = PDO::FETCH_ASSOC) {
-
 
105
		$resultat = false;
84
		try {
106
		try {
85
				$resultat = false;
107
			switch ($retour) {
-
 
108
				case self::SQL_RETOUR_COMPLET :
-
 
109
					$resultat = $this->bdd->query($requete)->fetchAll($mode);// Retourne toutes les lignes
-
 
110
					break;
-
 
111
				case self::SQL_RETOUR_LIGNE :
86
				$resultat = $this->bdd->query($requete);
112
					$resultat = $this->bdd->query($requete)->fetch($mode);// Retourne la première ligne
-
 
113
					break;
-
 
114
				case self::SQL_RETOUR_COLONNE :
-
 
115
					$resultat = $this->bdd->query($requete)->fetchColumn();// Retourne la première colonne de la première ligne
-
 
116
					break;
-
 
117
				case self::SQL_RETOUR_BRUT :
-
 
118
					$resultat = $this->bdd->query($requete);// Retourne l'objet brut pour être utilisé dans une boucle de type foreach
-
 
119
					break;
-
 
120
				default:
-
 
121
					$this->debug[] = "Le type de retour '$retour' est inconnu.";
-
 
122
			}
87
			if ($resultat === false) {
123
			if ($resultat === false) {
88
				$this->messages[] = "La requête a retourné aucun résultat.";
124
				$this->debug[] = "La requête a retourné aucun résultat : $requete";
89
			}
125
			}
90
		} catch (PDOException $e) {
126
		} catch (PDOException $e) {
91
			$this->messages[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
127
			$this->debug[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
92
		}
128
		}
93
		return $resultat;
129
		return $resultat;
94
	}
130
	}
95
	
131
 
96
	protected function proteger($chaine) {
132
	protected function proteger($chaine) {
97
		return $this->bdd->quote($chaine);
133
		return $this->bdd->quote($chaine);
98
	}
134
	}
Line -... Line 135...
-
 
135
 
-
 
136
	protected function protegerTableau(Array $tableau) {
-
 
137
		foreach ($tableau as $id => $val) {
-
 
138
			$tableau[$id] = $this->proteger($val);
-
 
139
		}
-
 
140
		return $tableau;
-
 
141
	}
99
 
142
 
100
	protected function getTxt($id) {
143
	protected function getTxt($id) {
101
		$sortie = '';
144
		$sortie = '';
102
		switch ($id) {
145
		switch ($id) {
103
			case 'sql_erreur' : $sortie = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s'; break;
146
			case 'sql_erreur' : $sortie = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s'; break;
Line 107... Line 150...
107
		return $sortie;
150
		return $sortie;
108
	}
151
	}
Line 109... Line 152...
109
 
152
 
110
	//+----------------------------------------------------------------------------------------------------------------+
153
	//+----------------------------------------------------------------------------------------------------------------+
111
	// TRAITEMENT des URLs et des PARAMÊTRES
154
	// TRAITEMENT des URLs et des PARAMÊTRES
112
	
155
 
113
	private function recupererParametresUrl() {
156
	private function recupererParametresUrl() {
114
		if (isset($_GET)) {
157
		if (isset($_GET)) {
115
			$get_params = array('orderby', 'distinct', 'start', 'limit', 'formatRetour');
158
			$get_params = array('orderby', 'distinct', 'start', 'limit', 'formatRetour');
116
			foreach ($get_params as $get) {
159
			foreach ($get_params as $get) {
Line 128... Line 171...
128
					}
171
					}
129
				}
172
				}
130
			}
173
			}
131
		}
174
		}
132
	}
175
	}
133
	
176
 
134
	protected function verifierSecuriteParametreUrl($param) {
177
	protected function verifierSecuriteParametreUrl($param) {
135
		$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
178
		$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
136
		$param = strip_tags(str_replace($verifier, '', $param));
179
		$param = strip_tags(str_replace($verifier, '', $param));
137
		return $param;
180
		return $param;
138
	}
181
	}
139
	
182
 
140
	private function definirParametresUrlParDefaut() {
183
	private function definirParametresUrlParDefaut() {
141
		if (!isset($this->start)) {
184
		if (!isset($this->start)) {
142
			$this->start = 0;
185
			$this->start = 0;
143
		}
186
		}
144
		if (!isset($this->limit)) {
187
		if (!isset($this->limit)) {
145
			$this->limit = 150;
188
			$this->limit = 150;
146
		}
189
		}
147
	}
190
	}
148
	
191
 
149
	protected function traiterParametres($params_attendu, $params, $pourBDD = true) {
192
	protected function traiterParametres($params_attendu, $params, $pourBDD = true) {
150
		$sortie = array();
193
		$sortie = array();
151
		foreach ($params_attendu as $num => $nom) {
194
		foreach ($params_attendu as $num => $nom) {
152
			if (isset($params[$num]) && $params[$num] != '*') {
195
			if (isset($params[$num]) && $params[$num] != '*') {
153
				if ($pourBDD) {
196
				if ($pourBDD) {
Line 170... Line 213...
170
 
213
 
171
	protected function envoyerJson($donnees, $encodage = 'utf-8') {
214
	protected function envoyerJson($donnees, $encodage = 'utf-8') {
172
		$contenu = json_encode($donnees);
215
		$contenu = json_encode($donnees);
173
		$this->envoyer($contenu, 'application/json', $encodage);
216
		$this->envoyer($contenu, 'application/json', $encodage);
174
	}
217
	}
175
	
218
 
176
	protected function envoyerJsonVar($variable, $donnees = null, $encodage = 'utf-8') {
219
	protected function envoyerJsonVar($variable, $donnees = null, $encodage = 'utf-8') {
177
		$contenu = "var $variable = ".json_encode($donnees);
220
		$contenu = "var $variable = ".json_encode($donnees);
178
		$this->envoyer($contenu, 'text/html', $encodage);
221
		$this->envoyer($contenu, 'text/html', $encodage);
179
	}
222
	}
180
	
223
 
181
	protected function envoyerJsonp($donnees = null, $encodage = 'utf-8') {
224
	protected function envoyerJsonp($donnees = null, $encodage = 'utf-8') {
182
		$contenu = $_GET['callback'].'('.json_encode($donnees).');';
225
		$contenu = $_GET['callback'].'('.json_encode($donnees).');';
183
		$this->envoyer($contenu, 'text/html', $encodage);
226
		$this->envoyer($contenu, 'text/html', $encodage);
Line 226... Line 269...
226
		} else if (!is_null($mime) && is_null($encodage)) {
269
		} else if (!is_null($mime) && is_null($encodage)) {
227
			header("Content-Type: $mime");
270
			header("Content-Type: $mime");
228
		}
271
		}
229
		print $contenu;
272
		print $contenu;
230
	}
273
	}
231
	
274
 
232
	private function envoyerAuth($message_accueil, $message_echec) {
275
	private function envoyerAuth($message_accueil, $message_echec) {
233
		header('HTTP/1.0 401 Unauthorized');
276
		header('HTTP/1.0 401 Unauthorized');
234
		header('WWW-Authenticate: Basic realm="'.mb_convert_encoding($message_accueil, 'ISO-8859-1', 'UTF-8').'"');
277
		header('WWW-Authenticate: Basic realm="'.mb_convert_encoding($message_accueil, 'ISO-8859-1', 'UTF-8').'"');
235
		header('Content-type: text/plain; charset=UTF-8');
278
		header('Content-type: text/plain; charset=UTF-8');
236
		print $message_echec;
279
		print $message_echec;
237
		exit(0);
280
		exit(0);
238
	}
281
	}
239
	
282
 
240
	//+----------------------------------------------------------------------------------------------------------------+
283
	//+----------------------------------------------------------------------------------------------------------------+
241
	// GESTION DU DAO
284
	// GESTION DU DAO
242
	
285
 
243
	protected function getDao() {
286
	protected function getDao() {
244
		if (isset($this->dao)) {
287
		if (isset($this->dao)) {
245
			return $this->dao;	
288
			return $this->dao;
246
		} else {
289
		} else {
247
			$e = "Le DAO n'a pas été initialisé. Utiliser la méthode initialiserDao().";
290
			$e = "Le DAO n'a pas été initialisé. Utiliser la méthode initialiserDao().";
248
			trigger_error($e, E_USER_WARNING);
291
			trigger_error($e, E_USER_WARNING);
249
		}
292
		}
250
	}
293
	}
251
	
294
 
252
	protected function initialiserDao($url_services_distant) {
295
	protected function initialiserDao($url_services_distant) {
253
		if (is_null($this->dao)) {
296
		if (is_null($this->dao)) {
254
			$this->dao = new CelDao($url_services_distant);
297
			$this->dao = new CelDao($url_services_distant);
255
		} else {
298
		} else {
256
			$this->dao->url_jrest = $url_services_distant;
299
			$this->dao->url_jrest = $url_services_distant;
257
		}
300
		}
258
	}
301
	}
259
	
302
 
260
	//+----------------------------------------------------------------------------------------------------------------+
303
	//+----------------------------------------------------------------------------------------------------------------+
261
	// GESTION DE L'IDENTIFICATION
304
	// GESTION DE L'IDENTIFICATION
262
	
305
 
263
	protected function getAuthIdentifiant() {
306
	protected function getAuthIdentifiant() {
264
		$id = (isset($_SERVER['PHP_AUTH_USER'])) ? $_SERVER['PHP_AUTH_USER'] : null;
307
		$id = (isset($_SERVER['PHP_AUTH_USER'])) ? $_SERVER['PHP_AUTH_USER'] : null;
265
		return $id;
308
		return $id;
266
	}
309
	}
267
	
310
 
268
	protected function getAuthMotDePasse() {
311
	protected function getAuthMotDePasse() {
269
		$mdp = (isset($_SERVER['PHP_AUTH_PW'])) ? $_SERVER['PHP_AUTH_PW'] : null;
312
		$mdp = (isset($_SERVER['PHP_AUTH_PW'])) ? $_SERVER['PHP_AUTH_PW'] : null;
270
		return $mdp;
313
		return $mdp;
271
	}
314
	}
272
	
315
 
273
	public function authentifierAdmin() { 
316
	public function authentifierAdmin() {
274
		$message_accueil = "Veuillez vous identifier avec votre compte Tela Botanica.";
317
		$message_accueil = "Veuillez vous identifier avec votre compte Tela Botanica.";
275
		$message_echec = "Accès limité aux administrateurs du CEL.\n".
318
		$message_echec = "Accès limité aux administrateurs du CEL.\n".
276
			"Votre tentative d'identification a échoué.\n".
319
			"Votre tentative d'identification a échoué.\n".
277
			"Actualiser la page pour essayer à nouveau si vous êtes bien inscrit comme administrateur.";
320
			"Actualiser la page pour essayer à nouveau si vous êtes bien inscrit comme administrateur.";
278
		return $this->authentifier($message_accueil, $message_echec, 'Admin');
321
		return $this->authentifier($message_accueil, $message_echec, 'Admin');
279
	}
322
	}
280
	
323
 
281
	public function authentifierUtilisateur() { 
324
	public function authentifierUtilisateur() {
282
		$message_accueil = "Veuillez vous identifier avec votre compte Tela Botanica.";
325
		$message_accueil = "Veuillez vous identifier avec votre compte Tela Botanica.";
283
		$message_echec = "Accès limité aux utilisateur du CEL.\n".
326
		$message_echec = "Accès limité aux utilisateur du CEL.\n".
284
			"Inscrivez vous http://www.tela-botanica.org/page:inscription pour le devenir.\n".
327
			"Inscrivez vous http://www.tela-botanica.org/page:inscription pour le devenir.\n".
285
			"Votre tentative d'identification a échoué.\n".
328
			"Votre tentative d'identification a échoué.\n".
286
			"Actualiser la page pour essayer à nouveau si vous êtes déjà inscrit ou contacter 'accueil@tela-botanica.org'.";
329
			"Actualiser la page pour essayer à nouveau si vous êtes déjà inscrit ou contacter 'accueil@tela-botanica.org'.";
287
		return $this->authentifier($message_accueil, $message_echec, 'Utilisateur');
330
		return $this->authentifier($message_accueil, $message_echec, 'Utilisateur');
288
	}
331
	}
289
	
332
 
290
	public function isAdmin($id) {
333
	public function isAdmin($id) {
291
		$admins = $this->config['jrest_admin']['admin'];
334
		$admins = $this->config['jrest_admin']['admin'];
292
		$admin_tab = split(',',$admins);
335
		$admin_tab = split(',',$admins);
Line 293... Line 336...
293
 
336
 
Line 320... Line 363...
320
		Log::setTimeZone($this->config['log']['timezone']);
363
		Log::setTimeZone($this->config['log']['timezone']);
321
		Log::setTailleMax($this->config['log']['taillemax']);
364
		Log::setTailleMax($this->config['log']['taillemax']);
Line 322... Line 365...
322
 
365
 
323
		Log::ajouterEntree($index,$chaine);
366
		Log::ajouterEntree($index,$chaine);
324
	}
367
	}
325
	
368
 
326
	private function authentifier($message_accueil, $message_echec, $type) {
369
	private function authentifier($message_accueil, $message_echec, $type) {
327
		$id = $this->getAuthIdentifiant();
370
		$id = $this->getAuthIdentifiant();
328
		if (!isset($id)) {
371
		if (!isset($id)) {
329
			$this->envoyerAuth($message_accueil, $message_echec);
372
			$this->envoyerAuth($message_accueil, $message_echec);
Line 337... Line 380...
337
			if ($autorisation == false) {
380
			if ($autorisation == false) {
338
				$this->envoyerAuth($message_accueil, $message_echec);
381
				$this->envoyerAuth($message_accueil, $message_echec);
339
			}
382
			}
340
		}
383
		}
341
		return true;
384
		return true;
342
	} 
385
	}
343
    
386
 
344
	public function etreUtilisateurAutorise() {
387
	public function etreUtilisateurAutorise() {
345
		$this->initialiserDao('http://www.tela-botanica.org/client/annuaire_nouveau/actuelle/jrest/');
388
		$this->initialiserDao('http://www.tela-botanica.org/client/annuaire_nouveau/actuelle/jrest/');
346
		$identifiant = $this->getAuthIdentifiant();
389
		$identifiant = $this->getAuthIdentifiant();
347
		$mdp = md5($this->getAuthMotDePasse());
390
		$mdp = md5($this->getAuthMotDePasse());
348
		$url = $this->getDao()->url_jrest."TestLoginMdp/$identifiant/$mdp";
391
		$url = $this->getDao()->url_jrest."TestLoginMdp/$identifiant/$mdp";
349
		$json = $this->getDao()->envoyerRequeteConsultation($url);
392
		$json = $this->getDao()->envoyerRequeteConsultation($url);
350
		$existe = json_decode($json);
393
		$existe = json_decode($json);
351
		
394
 
352
		$autorisation = (isset($existe) && $existe) ? true :false;
395
		$autorisation = (isset($existe) && $existe) ? true :false;
353
		return $autorisation;
396
		return $autorisation;
354
	}
397
	}
355
	
398
 
356
	public function etreAdminAutorise() {
399
	public function etreAdminAutorise() {
357
		$identifiant = $this->getAuthIdentifiant();
400
		$identifiant = $this->getAuthIdentifiant();
358
		$autorisation = ($this->etreUtilisateurAutorise() && $this->etreAdminCel($identifiant)) ? true : false;
401
		$autorisation = ($this->etreUtilisateurAutorise() && $this->etreAdminCel($identifiant)) ? true : false;
359
		return $autorisation;
402
		return $autorisation;
360
	}
403
	}
361
	
404
 
362
	public function etreAdminCel($courriel) {
405
	public function etreAdminCel($courriel) {
363
		$admins = $this->config['jrest_admin']['admin'];
406
		$admins = $this->config['jrest_admin']['admin'];
364
		$courriels_autorises = explode(',', $admins);
407
		$courriels_autorises = explode(',', $admins);
Line 365... Line 408...
365
 
408
 
366
		$autorisation = (in_array($courriel, $courriels_autorises)) ? true : false ;
409
		$autorisation = (in_array($courriel, $courriels_autorises)) ? true : false ;
367
		return $autorisation;
410
		return $autorisation;
Line 368... Line 411...
368
	}
411
	}
369
 
412
 
370
	//+----------------------------------------------------------------------------------------------------------------+
413
	//+----------------------------------------------------------------------------------------------------------------+
371
	// GESTION DE MÉTHODES COMMUNES ENTRE LES SERVICES
414
	// GESTION DE MÉTHODES COMMUNES ENTRE LES SERVICES
372
	
415
 
373
	protected function getUrlImage($id, $format = 'L') {
416
	protected function getUrlImage($id, $format = 'L') {
374
		$url_tpl = $this->config['settings']['celImgUrlTpl'];
417
		$url_tpl = $this->config['settings']['celImgUrlTpl'];
375
		$id = sprintf('%09s', $id).$format;
418
		$id = sprintf('%09s', $id).$format;
376
		$url = sprintf($url_tpl, $id); 
419
		$url = sprintf($url_tpl, $id);
377
		return $url;
420
		return $url;
378
	}
421
	}
379
	
422
 
380
	protected function creerAuteur($courriel, $pourAdmin = false) {
423
	protected function creerAuteur($courriel, $pourAdmin = false) {
381
		$auteur = ($pourAdmin) ? $courriel : $this->tronquerCourriel($courriel);
424
		$auteur = ($pourAdmin) ? $courriel : $this->tronquerCourriel($courriel);
382
		return $auteur;
425
		return $auteur;
383
	}
426
	}
384
	
427
 
385
	protected function creerAuteurs(array $courriels, $pourAdmin = false) {
428
	protected function creerAuteurs(array $courriels, $pourAdmin = false) {
386
		$auteurs = ($pourAdmin) ? $courriels : $this->recupererUtilisateursNomPrenom($courriels);
429
		$auteurs = ($pourAdmin) ? $courriels : $this->recupererUtilisateursNomPrenom($courriels);
387
		return $auteurs;
430
		return $auteurs;
388
	}
431
	}
389
	
432
 
390
	protected function recupererUtilisateursNomPrenom(array $courriels) {
433
	protected function recupererUtilisateursNomPrenom(array $courriels) {
391
		// Récupération des données au format Json
434
		// Récupération des données au format Json
392
		$service = "utilisateur/prenom-nom-par-courriel/".implode(',', $courriels);
435
		$service = "utilisateur/prenom-nom-par-courriel/".implode(',', $courriels);
Line 396... Line 439...
396
		foreach ($courriels as $courriel) {
439
		foreach ($courriels as $courriel) {
397
			if (isset($utilisateurs->$courriel)) {
440
			if (isset($utilisateurs->$courriel)) {
398
				$noms[$courriel] = $utilisateurs->$courriel->prenom.' '.$utilisateurs->$courriel->nom;
441
				$noms[$courriel] = $utilisateurs->$courriel->prenom.' '.$utilisateurs->$courriel->nom;
399
			} else {
442
			} else {
400
				$noms[$courriel] = $this->tronquerCourriel($courriel);
443
				$noms[$courriel] = $this->tronquerCourriel($courriel);
401
			}	
444
			}
402
		}	
445
		}
403
		return $noms;
446
		return $noms;
404
	}
447
	}
405
	
448
 
406
	protected function tronquerCourriel($courriel) {
449
	protected function tronquerCourriel($courriel) {
407
		$courriel = preg_replace('/[^@]+$/i', '...', $courriel);
450
		$courriel = preg_replace('/[^@]+$/i', '...', $courriel);
408
		return $courriel;
451
		return $courriel;
409
	}
452
	}
410
	
453
 
411
	protected function nettoyerTableau(Array $tableau) {
454
	protected function nettoyerTableau(Array $tableau) {
412
		foreach ($tableau as $cle => $valeur) {
455
		foreach ($tableau as $cle => $valeur) {
413
			if (is_array($valeur)) {
456
			if (is_array($valeur)) {
414
				$valeur = $this->nettoyerTableau($valeur);
457
				$valeur = $this->nettoyerTableau($valeur);
415
			} else {
458
			} else {
Line 417... Line 460...
417
			}
460
			}
418
			$tableau[$cle] = $valeur;
461
			$tableau[$cle] = $valeur;
419
		}
462
		}
420
		return $tableau;
463
		return $tableau;
421
	}
464
	}
422
	
465
 
423
	/**
466
	/**
424
	 * Fonction nettoyant les caractères spéciaux (&,<) et les valeurs nulles du CEL dans un texte comprenant du HTML.
467
	 * Fonction nettoyant les caractères spéciaux (&,<) et les valeurs nulles du CEL dans un texte comprenant du HTML.
425
	 */
468
	 */
426
	protected function nettoyerTexte($txt) {
469
	protected function nettoyerTexte($txt) {
427
		$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9][a-f]+);)/i', '&amp;', $txt);
470
		$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9][a-f]+);)/i', '&amp;', $txt);
Line 429... Line 472...
429
		//$txt = preg_replace('/<(?!([a-z][a-z0-9]*)\b[^>]*>(.*?)<\/\1>|\/\s*([a-z][a-z0-9]*)\s*>)/i', '&lt;', $txt);
472
		//$txt = preg_replace('/<(?!([a-z][a-z0-9]*)\b[^>]*>(.*?)<\/\1>|\/\s*([a-z][a-z0-9]*)\s*>)/i', '&lt;', $txt);
430
		//$txt = preg_replace('/(?!<([a-z][a-z0-9]*)\b[^>]*)>(?!(.*?)<\/\1>)/i', '&gt;', $txt);
473
		//$txt = preg_replace('/(?!<([a-z][a-z0-9]*)\b[^>]*)>(?!(.*?)<\/\1>)/i', '&gt;', $txt);
431
		$txt = preg_replace('/(?:000null|null)/i', '', $txt);
474
		$txt = preg_replace('/(?:000null|null)/i', '', $txt);
432
		return $txt;
475
		return $txt;
433
	}
476
	}
434
	
477
 
435
	/**
478
	/**
436
	 * Fonction nettoyant les caractères spéciaux HTML pour les champs de saisie libre du CEL.
479
	 * Fonction nettoyant les caractères spéciaux HTML pour les champs de saisie libre du CEL.
437
	 */
480
	 */
438
	protected function protegerCaracteresHtmlDansChamps($donnees) {
481
	protected function protegerCaracteresHtmlDansChamps($donnees) {
439
		$champs = array('ci_meta_mots_cles', 'ci_meta_comment', 
482
		$champs = array('ci_meta_mots_cles', 'ci_meta_comment',
440
			'mots_cles', 'location', 'lieudit', 'station', 'milieu', 'commentaire', 'nom_sel');
483
			'mots_cles', 'location', 'lieudit', 'station', 'milieu', 'commentaire', 'nom_sel');
441
		foreach ($champs as $champ) {
484
		foreach ($champs as $champ) {
442
			if (isset($donnees[$champ])) {
485
			if (isset($donnees[$champ])) {
443
				$donnees[$champ] = htmlspecialchars($donnees[$champ]);
486
				$donnees[$champ] = htmlspecialchars($donnees[$champ]);
444
			}
487
			}
445
		}
488
		}
446
		return $donnees;
489
		return $donnees;
447
	}
490
	}
448
	
491
 
449
	protected function convertirDateHeureMysqlEnTimestamp($date_heure_mysql){
492
	protected function convertirDateHeureMysqlEnTimestamp($date_heure_mysql){
450
       $val = explode(' ', $date_heure_mysql);
493
       $val = explode(' ', $date_heure_mysql);
451
       $date = explode('-', $val[0]);
494
       $date = explode('-', $val[0]);
452
       $heure = explode(':', $val[1]);
495
       $heure = explode(':', $val[1]);
453
       return mktime((int) $heure[0], (int) $heure[1], (int) $heure[2], (int) $date[1], (int) $date[2], (int) $date[0]);
496
       return mktime((int) $heure[0], (int) $heure[1], (int) $heure[2], (int) $date[1], (int) $date[2], (int) $date[0]);
454
	}
497
	}
455
	
498
 
456
	protected function etreNull($valeur) {
499
	protected function etreNull($valeur) {
457
		$etre_null = false;
500
		$etre_null = false;
458
		if ($valeur == '' || $valeur == null || $valeur == '000null' || $valeur == 'null') {
501
		if ($valeur == '' || $valeur == null || $valeur == '000null' || $valeur == 'null') {
459
			$etre_null = true;
502
			$etre_null = true;
460
		}
503
		}
461
		return $etre_null;
504
		return $etre_null;
462
	}
505
	}
463
	
506
 
464
	protected function formaterDate($date_heure_mysql, $format = '%A %d %B %Y à %H:%M') {
507
	protected function formaterDate($date_heure_mysql, $format = '%A %d %B %Y à %H:%M') {
465
		$date_formatee = '';
508
		$date_formatee = '';
466
		if (!$this->etreNull($date_heure_mysql)) {
509
		if (!$this->etreNull($date_heure_mysql)) {
467
			$timestamp = $this->convertirDateHeureMysqlEnTimestamp($date_heure_mysql);
510
			$timestamp = $this->convertirDateHeureMysqlEnTimestamp($date_heure_mysql);
468
			$date_formatee = strftime($format, $timestamp);
511
			$date_formatee = strftime($format, $timestamp);
469
		}
512
		}
470
		return $date_formatee;
513
		return $date_formatee;
471
	}
514
	}
472
	
515
 
473
	protected function encoderMotCle($mot_cle) {
516
	protected function encoderMotCle($mot_cle) {
474
		return md5(mb_strtolower($mot_cle));
517
		return md5(mb_strtolower($mot_cle));
475
	}
518
	}
476
	
519
 
477
	protected function decoderMotsClesObs($utilisateur_id, $mots_cles) {
520
	protected function decoderMotsClesObs($utilisateur_id, $mots_cles) {
478
		return $this->decoderMotsCles($utilisateur_id, $mots_cles, self::TYPE_OBS);
521
		return $this->decoderMotsCles($utilisateur_id, $mots_cles, self::TYPE_OBS);
479
	}
522
	}
480
	
523
 
481
	protected function decoderMotsClesImg($utilisateur_id, $mots_cles) {
524
	protected function decoderMotsClesImg($utilisateur_id, $mots_cles) {
482
		return $this->decoderMotsCles($utilisateur_id, $mots_cles, self::TYPE_IMG);
525
		return $this->decoderMotsCles($utilisateur_id, $mots_cles, self::TYPE_IMG);
483
	}
526
	}
484
	
527
 
485
	private function decoderMotsCles($utilisateur_id, $mots_cles, $type) {
528
	private function decoderMotsCles($utilisateur_id, $mots_cles, $type) {
486
		$mots = array();
529
		$mots = array();
487
		if (! $this->etreNull($mots_cles)) {
530
		if (! $this->etreNull($mots_cles)) {
488
			$utilisateur_id = $this->bdd->quote($utilisateur_id);
531
			$utilisateur_id = $this->bdd->quote($utilisateur_id);
489
			
532
 
490
			$mots_cles = $this->protegerMotsCles($mots_cles, $type);
533
			$mots_cles = $this->protegerMotsCles($mots_cles, $type);
491
			if (! $this->etreNull($mots_cles)) {
534
			if (! $this->etreNull($mots_cles)) {
492
				$table = ($type == self::TYPE_IMG) ? 'cel_mots_cles_images' : 'cel_mots_cles_obs' ;
535
				$table = ($type == self::TYPE_IMG) ? 'cel_mots_cles_images' : 'cel_mots_cles_obs' ;
493
				
536
 
494
				$requete = 'SELECT cmc_mot_cle '.
537
				$requete = 'SELECT cmc_mot_cle '.
495
					"FROM $table ".
538
					"FROM $table ".
496
					"WHERE cmc_id_mot_cle_utilisateur IN ($mots_cles) ".
539
					"WHERE cmc_id_mot_cle_utilisateur IN ($mots_cles) ".
497
					"AND cmc_id_proprietaire = $utilisateur_id ";
540
					"AND cmc_id_proprietaire = $utilisateur_id ";
498
				
541
 
499
				$elements = $this->executerRequete($requete);
542
				$elements = $this->executerRequete($requete);
500
				
543
 
501
				foreach ($elements as $mot) {
544
				foreach ($elements as $mot) {
502
					$mots[] = $mot['cmc_mot_cle'];
545
					$mots[] = $mot['cmc_mot_cle'];
503
				}
546
				}
504
			}
547
			}
505
		}
548
		}
506
		return $mots;
549
		return $mots;
507
	}
550
	}
508
	
551
 
509
	private function protegerMotsCles($mots_cles, $type) {
552
	private function protegerMotsCles($mots_cles, $type) {
510
		$separateur = ($type == self::TYPE_IMG) ? ',' : ';' ;
553
		$separateur = ($type == self::TYPE_IMG) ? ',' : ';' ;
511
		$mots_cles = $this->traiterValeursMultiples($mots_cles, $separateur);
554
		$mots_cles = $this->traiterValeursMultiples($mots_cles, $separateur);
512
		return $mots_cles;
555
		return $mots_cles;
513
	}
556
	}
514
	
557
 
515
	protected function traiterValeursMultiples($valeurs, $separateur_entree = ',' , $separateur_sortie = ',') {
558
	protected function traiterValeursMultiples($valeurs, $separateur_entree = ',' , $separateur_sortie = ',') {
516
		if (! $this->etreNull($valeurs)) {
559
		if (! $this->etreNull($valeurs)) {
517
			$valeurs_a_proteger = explode($separateur_entree,trim(trim($valeurs), $separateur_entree));
560
			$valeurs_a_proteger = explode($separateur_entree,trim(trim($valeurs), $separateur_entree));
518
			foreach ($valeurs_a_proteger as $valeur) {
561
			foreach ($valeurs_a_proteger as $valeur) {
519
				$valeurs_protegees[] = $this->bdd->quote($valeur);
562
				$valeurs_protegees[] = $this->bdd->quote($valeur);
520
			}
563
			}
521
			$valeurs = implode($separateur_sortie, $valeurs_protegees);
564
			$valeurs = implode($separateur_sortie, $valeurs_protegees);
522
		}
565
		}
523
		return ($this->etreNull($valeurs)) ? null : $valeurs;
566
		return ($this->etreNull($valeurs)) ? null : $valeurs;
524
	}
567
	}
525
	
568
 
526
	//+----------------------------------------------------------------------------------------------------------------+
569
	//+----------------------------------------------------------------------------------------------------------------+
527
	// GESTION DES SQUELETTES PHP
570
	// GESTION DES SQUELETTES PHP
Line 528... Line 571...
528
 
571
 
529
	/**
572
	/**