Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 1634 Rev 1648
1
<?php
1
<?php
2
/** Paramêtres indiquant que l'on est en français pour permettre l'affichage des dates en français. */
2
/** Paramêtres indiquant que l'on est en français pour permettre l'affichage des dates en français. */
3
setlocale(LC_TIME, 'fr_FR.UTF-8');
3
setlocale(LC_TIME, 'fr_FR.UTF-8');
4
/** Définition de l'encodage interne des fichiers. */
4
/** Définition de l'encodage interne des fichiers. */
5
mb_internal_encoding('UTF-8');
5
mb_internal_encoding('UTF-8');
6
 
6
 
7
/**
7
/**
8
 * Classe mère abstraite contenant les méthodes génériques des services.
8
 * Classe mère abstraite contenant les méthodes génériques des services.
9
 * Encodage en entrée : utf8
9
 * Encodage en entrée : utf8
10
 * Encodage en sortie : utf8
10
 * Encodage en sortie : utf8
11
 * 
11
 * 
12
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
13
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
13
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
14
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
14
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
15
 * @version $Id$
15
 * @version $Id$
16
 * @copyright 2009
16
 * @copyright 2009
17
 */
17
 */
18
abstract class Coel {
18
abstract class Coel {
19
	
19
	
20
	const ETAT_AJOUTER = 1;
20
	const ETAT_AJOUTER = 1;
21
	const ETAT_MODIFIER = 2;
21
	const ETAT_MODIFIER = 2;
22
	const ETAT_SUPPRIMER = 3;
22
	const ETAT_SUPPRIMER = 3;
23
	
23
	
24
	protected $sessionName = 'CoelSession';
24
	protected $sessionName = 'CoelSession';
25
	protected $sessionExpireTime = 8640000;// 60*60*24*100 = 100 jours
25
	protected $sessionExpireTime = 8640000;// 60*60*24*100 = 100 jours
26
	protected static $cookieChemin = '';
26
	protected static $cookieChemin = '';
27
	public $config;
27
	public $config;
28
	protected $bdd;
28
	protected $bdd;
29
	protected $log = array();
29
	protected $log = array();
30
	protected $messages = array();
30
	protected $messages = array();
31
	protected $debug = array();
31
	protected $debug = array();
32
	protected $distinct = false;
32
	protected $distinct = false;
33
	protected $orderby = null;
33
	protected $orderby = null;
34
	protected $formatRetour = 'objet';
34
	protected $formatRetour = 'objet';
35
	protected $start = 0; 
35
	protected $start = 0; 
36
	protected $limit = 150;
36
	protected $limit = 150;
37
	
37
	
38
	public function __construct($config, $demarrer_session = true) {
38
	public function __construct($config, $demarrer_session = true) {
39
		// Tableau contenant la config de Jrest
39
		// Tableau contenant la config de Jrest
40
		$this->config = $config;
40
		$this->config = $config;
41
		
41
		
42
		// Connection à la base de données
42
		// Connection à la base de données
43
		$this->bdd = $this->connecterPDO($this->config, 'coel');
43
		$this->bdd = $this->connecterPDO($this->config, 'coel');
44
		
44
		
45
		$this->gererSession($demarrer_session);
45
		$this->gererSession($demarrer_session);
46
		$this->gererIdentificationPermanente();
46
		$this->gererIdentificationPermanente();
47
		
47
		
48
		// Nettoyage du $_GET (sécurité)
48
		// Nettoyage du $_GET (sécurité)
49
		if (isset($_GET)) {
49
		if (isset($_GET)) {
50
			$get_params = array('orderby', 'distinct', 'start', 'limit', 'formatRetour');
50
			$get_params = array('orderby', 'distinct', 'start', 'limit', 'formatRetour');
51
			foreach ($get_params as $get) {
51
			foreach ($get_params as $get) {
52
				$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
52
				$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
53
				if (isset($_GET[$get]) && $_GET[$get] != '') {
53
				if (isset($_GET[$get]) && $_GET[$get] != '') {
54
					$_GET[$get] = str_replace($verifier, '', $_GET[$get]);
54
					$_GET[$get] = str_replace($verifier, '', $_GET[$get]);
55
					$this->$get = $_GET[$get];
55
					$this->$get = $_GET[$get];
56
				} else {
56
				} else {
57
					$_GET[$get] = null;
57
					$_GET[$get] = null;
58
				}
58
				}
59
			}
59
			}
60
		}
60
		}
61
	}
61
	}
62
 
62
 
63
	/**
63
	/**
64
	 * Méthode appelée quand aucun paramètre n'est passé dans l'url et avec une requête de type GET.
64
	 * Méthode appelée quand aucun paramètre n'est passé dans l'url et avec une requête de type GET.
65
	 */
65
	 */
66
	public function getRessource() {
66
	public function getRessource() {
67
		$this->getElement(array());
67
		$this->getElement(array());
68
	}
68
	}
69
	
69
	
70
	
70
	
71
	protected function creerXmlHisto($donnees) {
71
	protected function creerXmlHisto($donnees) {
72
		// Création du xml de l'enregistrement à historiser
72
		// Création du xml de l'enregistrement à historiser
73
		$info = null;
73
		$info = null;
74
		$xml_tpl = '<?xml version="1.0" encoding="UTF-8" ?>'."\n<resultset>\n<row>\n%s</row>\n</resultset>";
74
		$xml_tpl = '<?xml version="1.0" encoding="UTF-8" ?>'."\n<resultset>\n<row>\n%s</row>\n</resultset>";
75
		$xml = null;
75
		$xml = null;
76
		 
76
		 
77
		foreach ($donnees as $cle => $valeur) {
77
		foreach ($donnees as $cle => $valeur) {
78
			if (!is_null($valeur) && $valeur != '') {
78
			if (!is_null($valeur) && $valeur != '') {
79
				$xml .= "<$cle>$valeur</$cle>\n";
79
				$xml .= "<$cle>$valeur</$cle>\n";
80
			}
80
			}
81
		}
81
		}
82
		if ($xml !== null) {
82
		if ($xml !== null) {
83
			$info = sprintf($xml_tpl, $xml);
83
			$info = sprintf($xml_tpl, $xml);
84
			$info = $this->bdd->quote($info);
84
			$info = $this->bdd->quote($info);
85
		}
85
		}
86
		
86
		
87
		return $info;
87
		return $info;
88
	}
88
	}
89
	
89
	
90
	protected function getTableauDepuisXmlHisto($xml) {
90
	protected function getTableauDepuisXmlHisto($xml) {
91
		// Création du xml de l'enregistrement à historiser
91
		// Création du xml de l'enregistrement à historiser
92
		$info = array();
92
		$info = array();
93
		
93
		
94
		if (!empty($xml) && preg_match_all('|<([^>]+)>(.*)</[^>]+>|U', $xml, $matches, PREG_SET_ORDER)) {
94
		if (!empty($xml) && preg_match_all('|<([^>]+)>(.*)</[^>]+>|U', $xml, $matches, PREG_SET_ORDER)) {
95
			foreach ($matches as $val) {
95
			foreach ($matches as $val) {
96
				$info[$val[1]] = $val[2];
96
				$info[$val[1]] = $val[2];
97
			}
97
			}
98
		}
98
		}
99
		
99
		
100
		return $info;
100
		return $info;
101
	}
101
	}
102
		
102
		
103
	protected function historiser($table_id, $ligne_cle, $info, $id_utilisateur, $etat, $id_session) {
103
	protected function historiser($table_id, $ligne_cle, $info, $id_utilisateur, $etat, $id_session) {
-
 
104
		date_default_timezone_set('Europe/Paris');
104
		// Pré-traitement des variables
105
		// Pré-traitement des variables
105
		$info = (is_null($info)) ? 'NULL' : $info;
106
		$info = (is_null($info)) ? 'NULL' : $info;
106
		
107
		
107
		// Historisation (Ajout des méta-données)
108
		// Historisation (Ajout des méta-données)
108
		$requete = 	'INSERT INTO coel_meta_historique_ligne '. 
109
		$requete = 	'INSERT INTO coel_meta_historique_ligne '. 
109
					'	(cmhl_ce_table, cmhl_cle_ligne, cmhl_enregistrement, cmhl_date_modification, cmhl_ce_modifier_par, cmhl_ce_etat, cmhl_ip, cmhl_session_id) '.
110
					'	(cmhl_ce_table, cmhl_cle_ligne, cmhl_enregistrement, cmhl_date_modification, cmhl_ce_modifier_par, cmhl_ce_etat, cmhl_ip, cmhl_session_id) '.
110
					'VALUES ('.
111
					'VALUES ('.
111
					"		$table_id, ".
112
					"		$table_id, ".
112
					'		"'.$ligne_cle.'", '.
113
					'		"'.$ligne_cle.'", '.
113
					"		$info, ".
114
					"		$info, ".
114
 					'		"'.date('Y-m-d H:i:s', time()).'", '.
115
 					'		"'.date('Y-m-d H:i:s', time()).'", '.
115
					"		$id_utilisateur, ".
116
					"		$id_utilisateur, ".
116
					"		$etat, ".
117
					"		$etat, ".
117
					'		"'.$_SERVER['REMOTE_ADDR'].'", '.
118
					'		"'.$_SERVER['REMOTE_ADDR'].'", '.
118
					'		"'.$id_session.'") ';
119
					'		"'.$id_session.'") ';
119
		
120
		
120
   		// Exécution de la requêtre SQL et test d'éventuelles erreurs
121
   		// Exécution de la requêtre SQL et test d'éventuelles erreurs
121
		$resultat = $this->bdd->exec($requete);
122
		$resultat = $this->bdd->exec($requete);
122
		if ($resultat === false ) {
123
		if ($resultat === false ) {
123
			$this->log[] = "Des données de la table '$table_id' (enrg. $ligne_cle) n'ont pas été historisées car la requête a échouée.";
124
			$this->log[] = "Des données de la table '$table_id' (enrg. $ligne_cle) n'ont pas été historisées car la requête a échouée.";
124
		}
125
		}
125
		return $this->bdd->lastInsertId();
126
		return $this->bdd->lastInsertId();
126
	}
127
	}
127
	
128
	
128
	protected function envoyer($donnees = null, $mime = 'application/json', $encodage = 'utf-8', $json = true) {
129
	protected function envoyer($donnees = null, $mime = 'application/json', $encodage = 'utf-8', $json = true) {
129
		// Traitements des messages d'erreurs et données
130
		// Traitements des messages d'erreurs et données
130
		if (count($this->messages) != 0) {
131
		if (count($this->messages) != 0) {
131
			header('HTTP/1.1 500 Internal Server Error');
132
			header('HTTP/1.1 500 Internal Server Error');
132
			$mime = 'text/html';
133
			$mime = 'text/html';
133
			$encodage = 'utf-8';
134
			$encodage = 'utf-8';
134
			$json = true;
135
			$json = true;
135
			$sortie = $this->messages;
136
			$sortie = $this->messages;
136
		} else {
137
		} else {
137
			$sortie = $donnees;
138
			$sortie = $donnees;
138
			if (is_null($donnees)) {
139
			if (is_null($donnees)) {
139
				$sortie = 'OK';
140
				$sortie = 'OK';
140
			}
141
			}
141
		}
142
		}
142
 
143
 
143
		// Gestion de l'envoie du déboguage
144
		// Gestion de l'envoie du déboguage
144
		$this->envoyerDebogage();
145
		$this->envoyerDebogage();
145
		
146
		
146
		// Encodage au format et JSON et envoie sur la sortie standard
147
		// Encodage au format et JSON et envoie sur la sortie standard
147
		$contenu = $json ? json_encode($sortie) : $sortie;
148
		$contenu = $json ? json_encode($sortie) : $sortie;
148
		$this->envoyerContenu($encodage, $mime, $contenu);
149
		$this->envoyerContenu($encodage, $mime, $contenu);
149
	}
150
	}
150
	
151
	
151
	protected function envoyerHTML($donnees = null) {
152
	protected function envoyerHTML($donnees = null) {
152
		// Traitements des messages d'erreurs et données
153
		// Traitements des messages d'erreurs et données
153
		$contenu = '';
154
		$contenu = '';
154
		if (count($this->messages) > 0) {
155
		if (count($this->messages) > 0) {
155
			$contenu = '<p>'.implode('<br />', $this->messages).'</p>';
156
			$contenu = '<p>'.implode('<br />', $this->messages).'</p>';
156
		} else {
157
		} else {
157
			$contenu = $donnees;
158
			$contenu = $donnees;
158
			if (is_null($donnees)) {
159
			if (is_null($donnees)) {
159
				$contenu = 'OK';
160
				$contenu = 'OK';
160
			}
161
			}
161
		}
162
		}
162
 
163
 
163
		// Gestion de l'envoie du déboguage
164
		// Gestion de l'envoie du déboguage
164
		$this->envoyerDebogage();
165
		$this->envoyerDebogage();
165
		
166
		
166
		// Envoie sur la sortie standard
167
		// Envoie sur la sortie standard
167
		$this->envoyerContenu(null, null, $contenu);
168
		$this->envoyerContenu(null, null, $contenu);
168
	}
169
	}
169
	
170
	
170
	protected function envoyerEnteteMessage() {
171
	protected function envoyerEnteteMessage() {
171
		if (!is_array($this->messages)) {
172
		if (!is_array($this->messages)) {
172
			$this->messages[] = $this->messages;
173
			$this->messages[] = $this->messages;
173
		}
174
		}
174
		if (count($this->messages) != 0) {
175
		if (count($this->messages) != 0) {
175
			foreach ($this->messages as $cle => $val) {
176
			foreach ($this->messages as $cle => $val) {
176
				if (is_array($val)) {
177
				if (is_array($val)) {
177
					$this->messages[$cle] = print_r($val, true);
178
					$this->messages[$cle] = print_r($val, true);
178
				}
179
				}
179
			}
180
			}
180
			header('X-MessageJrest-Data: '.json_encode($this->messages));
181
			header('X-MessageJrest-Data: '.json_encode($this->messages));
181
		}
182
		}
182
	}
183
	}
183
 
184
 
184
	protected function envoyerDebogage() {
185
	protected function envoyerDebogage() {
185
		$this->envoyerEnteteDebogage();
186
		$this->envoyerEnteteDebogage();
186
	}
187
	}
187
	
188
	
188
	protected function envoyerEnteteDebogage() {
189
	protected function envoyerEnteteDebogage() {
189
		if (!is_array($this->debug)) {
190
		if (!is_array($this->debug)) {
190
			$this->debug[] = $this->debug;
191
			$this->debug[] = $this->debug;
191
		}
192
		}
192
		if (count($this->debug) != 0) {
193
		if (count($this->debug) != 0) {
193
			foreach ($this->debug as $cle => $val) {
194
			foreach ($this->debug as $cle => $val) {
194
				if (is_array($val)) {
195
				if (is_array($val)) {
195
					$this->debug[$cle] = print_r($val, true);
196
					$this->debug[$cle] = print_r($val, true);
196
				}
197
				}
197
			}
198
			}
198
			header('X-DebugJrest-Data: '.json_encode($this->debug));
199
			header('X-DebugJrest-Data: '.json_encode($this->debug));
199
		}
200
		}
200
	}
201
	}
201
	
202
	
202
	protected function envoyerContenu($encodage, $mime, $contenu) {
203
	protected function envoyerContenu($encodage, $mime, $contenu) {
203
		if (!is_null($mime) && !is_null($encodage)) {
204
		if (!is_null($mime) && !is_null($encodage)) {
204
			header("Content-Type: $mime; charset=$encodage");
205
			header("Content-Type: $mime; charset=$encodage");
205
		} else if (!is_null($mime) && is_null($encodage)) {
206
		} else if (!is_null($mime) && is_null($encodage)) {
206
			header("Content-Type: $mime");
207
			header("Content-Type: $mime");
207
		}
208
		}
208
		print $contenu;
209
		print $contenu;
209
	}
210
	}
210
	
211
	
211
	private function connecterPDO($config, $base = 'database') {
212
	private function connecterPDO($config, $base = 'database') {
212
        $cfg = $config[$base];
213
        $cfg = $config[$base];
213
		$dsn = $cfg['phptype'].':dbname='.$cfg['database'].';host='.$cfg['hostspec'];
214
		$dsn = $cfg['phptype'].':dbname='.$cfg['database'].';host='.$cfg['hostspec'];
214
		try {
215
		try {
215
    		$PDO = new PDO($dsn, $cfg['username'], $cfg['password']);
216
    		$PDO = new PDO($dsn, $cfg['username'], $cfg['password']);
216
		} catch (PDOException $e) {
217
		} catch (PDOException $e) {
217
    		echo 'La connexion à la base de donnée via PDO a échouée : ' . $e->getMessage();
218
    		echo 'La connexion à la base de donnée via PDO a échouée : ' . $e->getMessage();
218
		}
219
		}
219
		// Passe en UTF-8 la connexion à la BDD
220
		// Passe en UTF-8 la connexion à la BDD
220
		$PDO->exec("SET NAMES 'utf8'");
221
		$PDO->exec("SET NAMES 'utf8'");
221
		// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché)
222
		// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché)
222
		$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
223
		$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
223
        return $PDO;
224
        return $PDO;
224
	}
225
	}
225
	
226
	
226
	protected function getTxt($id) {
227
	protected function getTxt($id) {
227
		$sortie = '';
228
		$sortie = '';
228
		switch ($id) {
229
		switch ($id) {
229
			case 'sql_erreur' : $sortie = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s'; break;
230
			case 'sql_erreur' : $sortie = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s'; break;
230
			case 'sql_erreur_requete' : $sortie = "Requête echec.\nFichier : %s.\nLigne : %s.\nMessage : %s.\nRequête : %s"; break;
231
			case 'sql_erreur_requete' : $sortie = "Requête echec.\nFichier : %s.\nLigne : %s.\nMessage : %s.\nRequête : %s"; break;
231
			default : $sortie = $id; 
232
			default : $sortie = $id; 
232
		}
233
		}
233
		return $sortie;
234
		return $sortie;
234
	}
235
	}
235
	
236
	
236
	protected function concatenerChamps($champs, $prefixe = null) {
237
	protected function concatenerChamps($champs, $prefixe = null) {
237
		$chaine = '';
238
		$chaine = '';
238
		foreach ($champs as $cle => $valeur) {
239
		foreach ($champs as $cle => $valeur) {
239
			if (is_null($prefixe) || (!is_null($prefixe) && stristr($cle, $prefixe.'_'))) {
240
			if (is_null($prefixe) || (!is_null($prefixe) && stristr($cle, $prefixe.'_'))) {
240
				$chaine .= ", $cle = $valeur";
241
				$chaine .= ", $cle = $valeur";
241
			}
242
			}
242
		}
243
		}
243
		return ltrim($chaine, ', ');
244
		return ltrim($chaine, ', ');
244
	}
245
	}
245
 
246
 
246
	protected function separerChampsValeurs($donnees, $prefixe = null) {
247
	protected function separerChampsValeurs($donnees, $prefixe = null) {
247
		$sortie = array('', '');
248
		$sortie = array('', '');
248
		// Concaténation des champs et des valeurs dans des chaines séparées
249
		// Concaténation des champs et des valeurs dans des chaines séparées
249
		foreach ($donnees as $cle => $valeur) {
250
		foreach ($donnees as $cle => $valeur) {
250
			if (is_null($prefixe) || (!is_null($prefixe) && stristr($cle, $prefixe.'_'))) {
251
			if (is_null($prefixe) || (!is_null($prefixe) && stristr($cle, $prefixe.'_'))) {
251
				$sortie[0] .= "$cle, ";
252
				$sortie[0] .= "$cle, ";
252
				$sortie[1] .= "$valeur, ";
253
				$sortie[1] .= "$valeur, ";
253
			}
254
			}
254
		}
255
		}
255
		// Suppression de la virgule finale
256
		// Suppression de la virgule finale
256
		$sortie[0] = rtrim($sortie[0], ', ');
257
		$sortie[0] = rtrim($sortie[0], ', ');
257
		$sortie[1] = rtrim($sortie[1], ', ');
258
		$sortie[1] = rtrim($sortie[1], ', ');
258
		return $sortie;
259
		return $sortie;
259
	}
260
	}
260
	
261
	
261
	
262
	
262
	protected function traiterParametresUrl($params_attendu, $params, $pourBDD = true) {
263
	protected function traiterParametresUrl($params_attendu, $params, $pourBDD = true) {
263
		$sortie = array();
264
		$sortie = array();
264
		foreach ($params_attendu as $num => $nom) {
265
		foreach ($params_attendu as $num => $nom) {
265
			if (isset($params[$num]) && $params[$num] != '*') {
266
			if (isset($params[$num]) && $params[$num] != '*') {
266
				if ($pourBDD) {
267
				if ($pourBDD) {
267
					$params[$num] = $this->bdd->quote($params[$num]);
268
					$params[$num] = $this->bdd->quote($params[$num]);
268
				}
269
				}
269
				$sortie[$nom] = $params[$num];
270
				$sortie[$nom] = $params[$num];
270
			}
271
			}
271
		}
272
		}
272
		return $sortie;
273
		return $sortie;
273
	}
274
	}
274
	
275
	
275
	protected function traiterBddClauseIn($chaine) {
276
	protected function traiterBddClauseIn($chaine) {
276
		$sortie = '';
277
		$sortie = '';
277
		$chaine = trim($chaine, " '");
278
		$chaine = trim($chaine, " '");
278
		if ($chaine != '') {
279
		if ($chaine != '') {
279
			$valeurs = explode(',', $chaine);
280
			$valeurs = explode(',', $chaine);
280
			foreach ($valeurs as $id => $valeur) {
281
			foreach ($valeurs as $id => $valeur) {
281
				$valeurs[$id] = $this->bdd->quote($valeur);
282
				$valeurs[$id] = $this->bdd->quote($valeur);
282
			}
283
			}
283
			$sortie = implode(',', $valeurs);
284
			$sortie = implode(',', $valeurs);
284
		}
285
		}
285
		return $sortie;
286
		return $sortie;
286
	}
287
	}
287
	
288
	
288
	protected function traiterParametresPost($params) {
289
	protected function traiterParametresPost($params) {
289
		$sortie = array();
290
		$sortie = array();
290
		foreach ($params as $cle => $valeur) {
291
		foreach ($params as $cle => $valeur) {
291
			$sortie[$cle] = $this->bdd->quote($valeur);
292
			$sortie[$cle] = $this->bdd->quote($valeur);
292
		}
293
		}
293
		return $sortie;
294
		return $sortie;
294
	}
295
	}
295
	
296
	
296
	protected function getIdentification(&$params) {
297
	protected function getIdentification(&$params) {
297
		// Initialisation des variables
298
		// Initialisation des variables
298
		$utilisateur = array(0, session_id());
299
		$utilisateur = array(0, session_id());
299
		
300
		
300
		// L'id utilisateur est soit passé par le POST soit dans l'url
301
		// L'id utilisateur est soit passé par le POST soit dans l'url
301
		if (is_array($params) && isset($params['cmhl_ce_modifier_par'])) {
302
		if (is_array($params) && isset($params['cmhl_ce_modifier_par'])) {
302
		   	$utilisateur[0] = $params['cmhl_ce_modifier_par'];
303
		   	$utilisateur[0] = $params['cmhl_ce_modifier_par'];
303
			unset($params['cmhl_ce_modifier_par']);
304
			unset($params['cmhl_ce_modifier_par']);
304
		} else if (is_string($params)) {
305
		} else if (is_string($params)) {
305
			$utilisateur[0] = $params;
306
			$utilisateur[0] = $params;
306
		}
307
		}
307
		
308
		
308
		return $utilisateur;
309
		return $utilisateur;
309
	}
310
	}
310
	
311
	
311
	protected function etreAutorise($id_utilisateur) {
312
	protected function etreAutorise($id_utilisateur) {
312
		$autorisation = false;
313
		$autorisation = false;
313
		if (($_SESSION['coel_utilisateur'] != '') && $_SESSION['coel_utilisateur']['id'] != $id_utilisateur) {    	  
314
		if (!array_key_exists('coel_utilisateur', $_SESSION) || (($_SESSION['coel_utilisateur'] != '') && $_SESSION['coel_utilisateur']['id'] != $id_utilisateur)) {
314
			$this->messages[] = 'Accès interdit.';
315
			$this->messages[] = 'Accès interdit.';
315
		} else if ($_SESSION['coel_utilisateur'] == '') {    	  
316
		} else if ($_SESSION['coel_utilisateur'] == '') {    	  
316
			$this->messages[] = 'Veuillez vous identifiez pour accéder à cette fonction.';
317
			$this->messages[] = 'Veuillez vous identifiez pour accéder à cette fonction.';
317
		} else {
318
		} else {
318
			$autorisation = true;
319
			$autorisation = true;
319
		}
320
		}
320
		return $autorisation;
321
		return $autorisation;
321
	}
322
	}
322
	
323
	
323
	protected function recupererCle($table) {
324
	protected function recupererCle($table) {
324
		$cle = null;
325
		$cle = null;
325
		if (isset($table['champs_valeurs_id'])) {
326
		if (isset($table['champs_valeurs_id'])) {
326
			$identifiants = array();
327
			$identifiants = array();
327
			// Trie des clés primaire pour avoir toujours le même ordre dans la table historique pour les clés multiples
328
			// Trie des clés primaire pour avoir toujours le même ordre dans la table historique pour les clés multiples
328
			ksort($table['champs_valeurs_id']);
329
			ksort($table['champs_valeurs_id']);
329
		   	foreach ($table['champs_valeurs_id'] as $id) {
330
		   	foreach ($table['champs_valeurs_id'] as $id) {
330
		   		$identifiants[] = $id;
331
		   		$identifiants[] = $id;
331
		   	}
332
		   	}
332
		   	$cle = implode('-', $identifiants);
333
		   	$cle = implode('-', $identifiants);
333
		}
334
		}
334
		return $cle;
335
		return $cle;
335
	}
336
	}
336
	
337
	
337
	protected function avoirCleComplete($table) {
338
	protected function avoirCleComplete($table) {
338
		$cle_complete = false;
339
		$cle_complete = false;
339
		if (isset($table['champs_valeurs_id'])) {
340
		if (isset($table['champs_valeurs_id'])) {
340
		   	$ok = true;
341
		   	$ok = true;
341
			foreach ($table['id'] as $id) {
342
			foreach ($table['id'] as $id) {
342
		   		if (!isset($table['champs_valeurs_id'][$id]) || $table['champs_valeurs_id'][$id] == '') {
343
		   		if (!isset($table['champs_valeurs_id'][$id]) || $table['champs_valeurs_id'][$id] == '') {
343
		   			$ok = false;
344
		   			$ok = false;
344
		   			break;
345
		   			break;
345
		   		}
346
		   		}
346
		   	}
347
		   	}
347
		   	$cle_complete = $ok;
348
		   	$cle_complete = $ok;
348
		}
349
		}
349
		return $cle_complete;
350
		return $cle_complete;
350
	}
351
	}
351
	
352
	
352
	protected function recupererEtat($table) {
353
	protected function recupererEtat($table) {
353
		$etat = 1;// Ajout
354
		$etat = 1;// Ajout
354
		if ($this->avoirEnregistrement($table) === true) {
355
		if ($this->avoirEnregistrement($table) === true) {
355
			$etat = 2;// Modification
356
			$etat = 2;// Modification
356
		}
357
		}
357
		return $etat;
358
		return $etat;
358
	}
359
	}
359
	
360
	
360
	protected function avoirEnregistrement($table) {
361
	protected function avoirEnregistrement($table) {
361
		$avoir_enregistrement = false;
362
		$avoir_enregistrement = false;
362
   		$requete = 	'SELECT * '.
363
   		$requete = 	'SELECT * '.
363
					"FROM {$table['nom']} ".
364
					"FROM {$table['nom']} ".
364
					"WHERE %s ";
365
					"WHERE %s ";
365
   		
366
   		
366
   		$where = $this->construireWhere($table['champs_valeurs_id']);
367
   		$where = $this->construireWhere($table['champs_valeurs_id']);
367
   		$requete = sprintf($requete, $where);
368
   		$requete = sprintf($requete, $where);
368
   		
369
   		
369
	   	// Exécution de la requêtre SQL et test d'éventuelles erreurs
370
	   	// Exécution de la requêtre SQL et test d'éventuelles erreurs
370
		$resultat = $this->bdd->query($requete, PDO::FETCH_ASSOC)->fetch();
371
		$resultat = $this->bdd->query($requete, PDO::FETCH_ASSOC)->fetch();
371
		
372
		
372
		if ($resultat !== false) {
373
		if ($resultat !== false) {
373
			$avoir_enregistrement = true;
374
			$avoir_enregistrement = true;
374
		}
375
		}
375
		return $avoir_enregistrement;
376
		return $avoir_enregistrement;
376
	}
377
	}
377
	
378
	
378
	protected function contenirDonnees($requete) {
379
	protected function contenirDonnees($requete) {
379
		$nbre = $this->bdd->query($requete)->fetchColumn();
380
		$nbre = $this->bdd->query($requete)->fetchColumn();
380
		
381
		
381
		$presence = false;
382
		$presence = false;
382
		if ($nbre != 0) {
383
		if ($nbre != 0) {
383
			$presence = true;
384
			$presence = true;
384
		}
385
		}
385
		return $presence;
386
		return $presence;
386
	}
387
	}
387
	
388
	
388
	protected function construireWhere($table) {
389
	protected function construireWhere($table) {
389
		$where = '1';
390
		$where = '1';
390
	   	if (is_array($table) && count($table) > 0) {
391
	   	if (is_array($table) && count($table) > 0) {
391
			$table_where = array();
392
			$table_where = array();
392
	   		foreach ($table as $chp => $id) {
393
	   		foreach ($table as $chp => $id) {
393
	   			$table_where[] = "$chp = '$id'";
394
	   			$table_where[] = "$chp = '$id'";
394
	   		}
395
	   		}
395
	   		$where = implode(' AND ', $table_where);
396
	   		$where = implode(' AND ', $table_where);
396
	   	}
397
	   	}
397
	   	return $where;
398
	   	return $where;
398
	}
399
	}
399
	
400
	
400
	protected function recupererTablesAModifier($parametres) {
401
	protected function recupererTablesAModifier($parametres) {
401
		$tables_a_modifier = $this->tables;
402
		$tables_a_modifier = $this->tables;
402
   		foreach ($this->tables as $table_id => $table) {
403
   		foreach ($this->tables as $table_id => $table) {
403
   			$tables_a_modifier[$table_id]['champs'] = null;
404
   			$tables_a_modifier[$table_id]['champs'] = null;
404
   			foreach ($parametres as $cle => $valeur) {
405
   			foreach ($parametres as $cle => $valeur) {
405
   				if (preg_match('/^'.$table['prefixe'].'_/', $cle)) {
406
   				if (preg_match('/^'.$table['prefixe'].'_/', $cle)) {
406
   					// Contient les noms des champs seulements
407
   					// Contient les noms des champs seulements
407
   					$tables_a_modifier[$table_id]['champs'][] = $cle;
408
   					$tables_a_modifier[$table_id]['champs'][] = $cle;
408
   					// Contient un tableau de résultats protégé pour l'inclusion en bdd
409
   					// Contient un tableau de résultats protégé pour l'inclusion en bdd
409
   					$tables_a_modifier[$table_id]['champs_valeurs_protege'][$cle] = $this->bdd->quote($valeur);
410
   					$tables_a_modifier[$table_id]['champs_valeurs_protege'][$cle] = $this->bdd->quote($valeur);
410
   					// Contient un tableau de résultats non protégé
411
   					// Contient un tableau de résultats non protégé
411
   					$tables_a_modifier[$table_id]['champs_valeurs_brut'][$cle] = $valeur;
412
   					$tables_a_modifier[$table_id]['champs_valeurs_brut'][$cle] = $valeur;
412
   					if (preg_match('/_id_/', $cle)) {
413
   					if (preg_match('/_id_/', $cle)) {
413
   						$tables_a_modifier[$table_id]['champs_valeurs_id'][$cle] = $valeur;
414
   						$tables_a_modifier[$table_id]['champs_valeurs_id'][$cle] = $valeur;
414
   					}
415
   					}
415
   				}
416
   				}
416
   			}  
417
   			}  
417
   		}
418
   		}
418
   		return $tables_a_modifier;
419
   		return $tables_a_modifier;
419
	}
420
	}
420
	
421
	
421
 
422
 
422
	protected function mettreAJourAvecCle($id_utilisateur, $id_session, $table_id, $table) {
423
	protected function mettreAJourAvecCle($id_utilisateur, $id_session, $table_id, $table) {
423
		if (!is_null($table['champs'])) {
424
		if (!is_null($table['champs'])) {
424
	   		// Historisation (Ajout des méta-données)
425
	   		// Historisation (Ajout des méta-données)
425
	   		$cle = $this->recupererCle($table);
426
	   		$cle = $this->recupererCle($table);
426
	   		$etat = $this->recupererEtat($table);
427
	   		$etat = $this->recupererEtat($table);
427
	   		$info = $this->creerXmlHisto($table['champs_valeurs_brut']);
428
	   		$info = $this->creerXmlHisto($table['champs_valeurs_brut']);
428
			$id_meta = $this->historiser($table_id, $cle, $info, $id_utilisateur, $etat, $id_session);
429
			$id_meta = $this->historiser($table_id, $cle, $info, $id_utilisateur, $etat, $id_session);
429
			$champ_meta = "{$table['prefixe']}_ce_meta";
430
			$champ_meta = "{$table['prefixe']}_ce_meta";
430
			$table['champs_valeurs_protege'][$champ_meta] = $this->bdd->quote($id_meta);
431
			$table['champs_valeurs_protege'][$champ_meta] = $this->bdd->quote($id_meta);
431
			
432
			
432
			// Mise à jour des données ou ajout en fonction de l'état
433
			// Mise à jour des données ou ajout en fonction de l'état
433
			if ($etat == 1) { // Ajout
434
			if ($etat == 1) { // Ajout
434
				$this->ajouter($table);
435
				$this->ajouter($table);
435
			} else if ($etat == 2) { // Modif
436
			} else if ($etat == 2) { // Modif
436
				$this->modifier($table);
437
				$this->modifier($table);
437
			}
438
			}
438
   		}
439
   		}
439
	}
440
	}
440
	
441
	
441
	protected function ajouter($table) {
442
	protected function ajouter($table) {
442
		$requete = 	"INSERT INTO {$table['nom']} ".
443
		$requete = 	"INSERT INTO {$table['nom']} ".
443
   					' (%s) '.
444
   					' (%s) '.
444
					' VALUES (%s) ';
445
					' VALUES (%s) ';
445
		
446
		
446
		$champs = $valeurs = '';
447
		$champs = $valeurs = '';
447
		foreach ($table['champs_valeurs_protege'] as $chp => $val) {
448
		foreach ($table['champs_valeurs_protege'] as $chp => $val) {
448
			$champs .= "$chp, ";
449
			$champs .= "$chp, ";
449
			$valeurs .= "$val, ";
450
			$valeurs .= "$val, ";
450
		}
451
		}
451
		$requete = sprintf($requete, rtrim($champs, ', '), rtrim($valeurs, ', '));
452
		$requete = sprintf($requete, rtrim($champs, ', '), rtrim($valeurs, ', '));
452
		
453
		
453
		$resultat = $this->bdd->exec($requete);
454
		$resultat = $this->bdd->exec($requete);
454
		$dernier_id = false;
455
		$dernier_id = false;
455
		if ($resultat === false) {
456
		if ($resultat === false) {
456
			$cle = $this->recupererCle($table);
457
			$cle = $this->recupererCle($table);
457
			$this->log[] = "L'enregistrement '$cle' de la table {$table['nom']} n'a pas été ajouté car la requête a échouée.";
458
			$this->log[] = "L'enregistrement '$cle' de la table {$table['nom']} n'a pas été ajouté car la requête a échouée.";
458
		} else {
459
		} else {
459
			$dernier_id = $this->bdd->lastInsertId();
460
			$dernier_id = $this->bdd->lastInsertId();
460
		}
461
		}
461
		return $dernier_id;
462
		return $dernier_id;
462
	}
463
	}
463
	
464
	
464
	protected function modifier($table) {
465
	protected function modifier($table) {
465
		$requete = 	"UPDATE {$table['nom']} ".
466
		$requete = 	"UPDATE {$table['nom']} ".
466
   					'SET %s '.
467
   					'SET %s '.
467
   					'WHERE %s ';
468
   					'WHERE %s ';
468
		
469
		
469
		$champs_requete = '';
470
		$champs_requete = '';
470
		foreach ($table['champs_valeurs_protege'] as $chp => $val) {
471
		foreach ($table['champs_valeurs_protege'] as $chp => $val) {
471
			$champs_requete .= "$chp = $val, ";
472
			$champs_requete .= "$chp = $val, ";
472
		}
473
		}
473
		$where = $this->construireWhere($table['champs_valeurs_id']);
474
		$where = $this->construireWhere($table['champs_valeurs_id']);
474
		$requete = sprintf($requete, rtrim($champs_requete, ', '), $where);
475
		$requete = sprintf($requete, rtrim($champs_requete, ', '), $where);
475
		$resultat = $this->bdd->exec($requete);
476
		$resultat = $this->bdd->exec($requete);
476
		if ($resultat === false) {
477
		if ($resultat === false) {
477
			$cle = $this->recupererCle($table);
478
			$cle = $this->recupererCle($table);
478
			$this->log[] = "L'enregistrement '$cle' de la table {$table['nom']} n'a pas été mis à jour car la requête a échouée.";
479
			$this->log[] = "L'enregistrement '$cle' de la table {$table['nom']} n'a pas été mis à jour car la requête a échouée.";
479
		} else {
480
		} else {
480
			$resultat = true;
481
			$resultat = true;
481
		}
482
		}
482
		return $resultat;
483
		return $resultat;
483
	}
484
	}
484
	
485
	
485
	protected function supprimer($table) {
486
	protected function supprimer($table) {
486
		$requete = 	"DELETE FROM {$table['nom']} ".
487
		$requete = 	"DELETE FROM {$table['nom']} ".
487
					'WHERE %s ';
488
					'WHERE %s ';
488
		
489
		
489
		$where = $this->construireWhere($table['champs_valeurs_id']);
490
		$where = $this->construireWhere($table['champs_valeurs_id']);
490
		$requete = sprintf($requete, $where);
491
		$requete = sprintf($requete, $where);
491
		
492
		
492
		$resultat = $this->bdd->exec($requete);
493
		$resultat = $this->bdd->exec($requete);
493
		if ($resultat === false) {
494
		if ($resultat === false) {
494
			$cle = $this->recupererCle($table);
495
			$cle = $this->recupererCle($table);
495
			$this->messages[] = "L'enregistrement '$cle' de la table {$table['nom']} n'a pas été supprimé car la requête a échouée.";
496
			$this->messages[] = "L'enregistrement '$cle' de la table {$table['nom']} n'a pas été supprimé car la requête a échouée.";
496
		} else {
497
		} else {
497
			$resultat = true;
498
			$resultat = true;
498
		}
499
		}
499
		return $resultat;
500
		return $resultat;
500
	}
501
	}
501
	
502
	
502
	private function gererSession($demarrage) {
503
	private function gererSession($demarrage) {
503
		session_name($this->sessionName);
504
		session_name($this->sessionName);
504
 
505
 
505
		// Configuration du cookie de session
506
		// Configuration du cookie de session
506
		// Détermination du chemin pour les cookies nécessaire à Jrest
507
		// Détermination du chemin pour les cookies nécessaire à Jrest
507
		/// ATTENTION : comme les cookies sont passés à Jrest, il faut utiliser l'url de Jrest pour établir le chemin
508
		/// ATTENTION : comme les cookies sont passés à Jrest, il faut utiliser l'url de Jrest pour établir le chemin
508
		$url_morceaux = parse_url($this->config['coel']['urlBaseJrest']);
509
		$url_morceaux = parse_url($this->config['coel']['urlBaseJrest']);
509
		self::$cookieChemin = $this->reparerCheminCookie($url_morceaux['path']);
510
		self::$cookieChemin = $this->reparerCheminCookie($url_morceaux['path']);
510
		unset($url_morceaux);
511
		unset($url_morceaux);
511
		session_set_cookie_params($this->sessionExpireTime, self::$cookieChemin);
512
		session_set_cookie_params($this->sessionExpireTime, self::$cookieChemin);
512
		
513
		
513
		// Démarrage de la session
514
		// Démarrage de la session
514
		if ($demarrage) {
515
		if ($demarrage) {
515
			session_start();
516
			session_start();
516
		}
517
		}
517
	}
518
	}
518
	
519
	
519
	private function reparerCheminCookie($chemin) {
520
	private function reparerCheminCookie($chemin) {
520
		// dirname renvoit / si le chemin vaut seulement /dossier/, cela renvoit /dossier si le chemin vaut /dossier//.
521
		// dirname renvoit / si le chemin vaut seulement /dossier/, cela renvoit /dossier si le chemin vaut /dossier//.
521
		$chemin = dirname($chemin.'/.');
522
		$chemin = dirname($chemin.'/.');
522
		// Fixe la gestion des chemins pour les cookies sous les OS utilisant le \ comme séparteur de chemin
523
		// Fixe la gestion des chemins pour les cookies sous les OS utilisant le \ comme séparteur de chemin
523
		$chemin = str_replace('\\', '/', $chemin);
524
		$chemin = str_replace('\\', '/', $chemin);
524
		// Ajoute un '/' terminal sauf si on est à la racine web
525
		// Ajoute un '/' terminal sauf si on est à la racine web
525
		$chemin = ($chemin != '/' ? $chemin.'/' : '');
526
		$chemin = ($chemin != '/' ? $chemin.'/' : '');
526
		return $chemin;
527
		return $chemin;
527
	}
528
	}
528
	
529
	
529
	private function gererIdentificationPermanente() {
530
	private function gererIdentificationPermanente() {
530
		// Pour maintenir l'utilisateur tjrs réellement identifié nous sommes obligé de recréer une SESSION et de le recharger depuis la bdd
531
		// Pour maintenir l'utilisateur tjrs réellement identifié nous sommes obligé de recréer une SESSION et de le recharger depuis la bdd
531
		if ($this->getUtilisateur() == '' 
532
		if ($this->getUtilisateur() == '' 
532
				&& isset($_COOKIE['coel_login']) 
533
				&& isset($_COOKIE['coel_login']) 
533
				&& ($utilisateur = $this->chargerUtilisateur($_COOKIE['coel_login'], $_COOKIE['coel_mot_de_passe']))) {
534
				&& ($utilisateur = $this->chargerUtilisateur($_COOKIE['coel_login'], $_COOKIE['coel_mot_de_passe']))) {
534
			$this->setUtilisateur($utilisateur, $_COOKIE['coel_permanence']);
535
			$this->setUtilisateur($utilisateur, $_COOKIE['coel_permanence']);
535
		}
536
		}
536
	}
537
	}
537
	
538
	
538
	protected function rechargerCookieUtilisateur() {
539
	protected function rechargerCookieUtilisateur() {
539
		$utilisateur = $this->chargerUtilisateur($_COOKIE['coel_login']);
540
		$utilisateur = $this->chargerUtilisateur($_COOKIE['coel_login']);
540
		$this->setUtilisateur($utilisateur, $_COOKIE['coel_permanence']);
541
		$this->setUtilisateur($utilisateur, $_COOKIE['coel_permanence']);
541
	}
542
	}
542
	
543
	
543
	protected function getUtilisateur() {
544
	protected function getUtilisateur() {
544
		return (isset($_SESSION['coel_utilisateur']) ? $_SESSION['coel_utilisateur'] : '');
545
		return (isset($_SESSION['coel_utilisateur']) ? $_SESSION['coel_utilisateur'] : '');
545
	}
546
	}
546
	
547
	
547
	protected function chargerUtilisateur($login, $mot_de_passe = null) {
548
	protected function chargerUtilisateur($login, $mot_de_passe = null) {
548
		$sortie = false;
549
		$sortie = false;
549
		$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs'];
550
		$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs'];
550
		$requete =	'SELECT cp_id_personne AS id, cp_fmt_nom_complet AS nom_complet, cp_prenom AS prenom, '.
551
		$requete =	'SELECT cp_id_personne AS id, cp_fmt_nom_complet AS nom_complet, cp_prenom AS prenom, '.
551
					'	cp_nom AS nom, cp_login AS login, cp_mot_de_passe AS mot_de_passe, cp_parametre AS parametre, '.
552
					'	cp_nom AS nom, cp_login AS login, cp_mot_de_passe AS mot_de_passe, cp_parametre AS parametre, '.
552
					'	cp_ville AS ville, cp_code_postal AS code_postal, '.
553
					'	cp_ville AS ville, cp_code_postal AS code_postal, '.
553
					'	cp_mark_licence AS licence '.
554
					'	cp_mark_licence AS licence '.
554
					'FROM coel_personne '.
555
					'FROM coel_personne '.
555
					"WHERE cp_login = {$this->bdd->quote($login)} ".
556
					"WHERE cp_login = {$this->bdd->quote($login)} ".
556
					((!is_null($mot_de_passe)) ? "AND cp_mot_de_passe = {$this->bdd->quote($mot_de_passe)} " : '');
557
					((!is_null($mot_de_passe)) ? "AND cp_mot_de_passe = {$this->bdd->quote($mot_de_passe)} " : '');
557
		try {
558
		try {
558
			$resultat = $this->bdd->query($requete)->fetch();
559
			$resultat = $this->bdd->query($requete)->fetch();
559
			if ($resultat === false) {
560
			if ($resultat === false) {
560
				$this->debug[] = "L'utilisateur n'est pas enregistré comme utilisateur de COEL.";
561
				$this->debug[] = "L'utilisateur n'est pas enregistré comme utilisateur de COEL.";
561
			} else {
562
			} else {
562
				$sortie = array('id' => $resultat['id'], 
563
				$sortie = array('id' => $resultat['id'], 
563
					'login' => $login, 
564
					'login' => $login, 
564
					'mot_de_passe' => $resultat['mot_de_passe'], 
565
					'mot_de_passe' => $resultat['mot_de_passe'], 
565
					'nom_complet' => $resultat['nom_complet'], 
566
					'nom_complet' => $resultat['nom_complet'], 
566
					'nom' => $resultat['nom'], 
567
					'nom' => $resultat['nom'], 
567
					'prenom' => $resultat['prenom'], 
568
					'prenom' => $resultat['prenom'], 
568
					'parametre' => $resultat['parametre'],
569
					'parametre' => $resultat['parametre'],
569
					'ville' => $resultat['ville'], 
570
					'ville' => $resultat['ville'], 
570
					'code_postal' => $resultat['code_postal'],  
571
					'code_postal' => $resultat['code_postal'],  
571
					'licence' => $resultat['licence']);
572
					'licence' => $resultat['licence']);
572
			}
573
			}
573
		} catch (PDOException $e) {
574
		} catch (PDOException $e) {
574
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
575
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
575
		}
576
		}
576
		
577
		
577
		return $sortie;
578
		return $sortie;
578
	}
579
	}
579
	
580
	
580
	protected function setUtilisateur($utilisateur, $permanence = 1) {
581
	protected function setUtilisateur($utilisateur, $permanence = 1) {
581
		$_SESSION['coel_utilisateur'] = $utilisateur;
582
		$_SESSION['coel_utilisateur'] = $utilisateur;
582
		$this->debug[] = $_SESSION['coel_utilisateur'];
583
		$this->debug[] = $_SESSION['coel_utilisateur'];
583
		$this->setCookiePersistant('coel_login', $utilisateur['login'], $permanence);
584
		$this->setCookiePersistant('coel_login', $utilisateur['login'], $permanence);
584
		$this->setCookiePersistant('coel_mot_de_passe', $utilisateur['mot_de_passe'], $permanence);
585
		$this->setCookiePersistant('coel_mot_de_passe', $utilisateur['mot_de_passe'], $permanence);
585
		$this->setCookiePersistant('coel_licence', $utilisateur['licence'], $permanence);
586
		$this->setCookiePersistant('coel_licence', $utilisateur['licence'], $permanence);
586
		$this->setCookiePersistant('coel_permanence', $permanence, $permanence);
587
		$this->setCookiePersistant('coel_permanence', $permanence, $permanence);
587
	}
588
	}
588
	
589
	
589
	protected function setCookiePersistant($cookie_nom, $valeur, $permanence = 1) {
590
	protected function setCookiePersistant($cookie_nom, $valeur, $permanence = 1) {
590
		setCookie($cookie_nom, $valeur, time() + ($permanence ? 100*24*60*60 : 60*60), self::$cookieChemin);
591
		setCookie($cookie_nom, $valeur, time() + ($permanence ? 100*24*60*60 : 60*60), self::$cookieChemin);
591
		$_COOKIE[$cookie_nom] = $valeur;
592
		$_COOKIE[$cookie_nom] = $valeur;
592
	}
593
	}
593
	
594
	
594
	protected function supprimerCookie($cookie_nom) {
595
	protected function supprimerCookie($cookie_nom) {
595
		setCookie($cookie_nom, '', 1, self::$cookieChemin);
596
		setCookie($cookie_nom, '', 1, self::$cookieChemin);
596
		$_COOKIE[$cookie_nom] = '';
597
		$_COOKIE[$cookie_nom] = '';
597
	}
598
	}
598
	
599
	
599
	/**
600
	/**
600
	 * Méthode prenant en paramètre un chemin de fichier squelette et un tableau associatif de données,
601
	 * Méthode prenant en paramètre un chemin de fichier squelette et un tableau associatif de données,
601
	 * en extrait les variables, charge le squelette et retourne le résultat des deux combinés.
602
	 * en extrait les variables, charge le squelette et retourne le résultat des deux combinés.
602
	 *
603
	 *
603
	 * @param String $fichier	le chemin du fichier du squelette
604
	 * @param String $fichier	le chemin du fichier du squelette
604
	 * @param Array  $donnees	un tableau associatif contenant les variables a injecter dans le squelette.
605
	 * @param Array  $donnees	un tableau associatif contenant les variables a injecter dans le squelette.
605
	 *
606
	 *
606
	 * @return boolean false si le squelette n'existe pas, sinon la chaine résultat.
607
	 * @return boolean false si le squelette n'existe pas, sinon la chaine résultat.
607
	 */
608
	 */
608
	public static function traiterSquelettePhp($fichier, Array $donnees = array()) {
609
	public static function traiterSquelettePhp($fichier, Array $donnees = array()) {
609
		$sortie = false;
610
		$sortie = false;
610
		if (file_exists($fichier)) {
611
		if (file_exists($fichier)) {
611
			// Extraction des variables du tableau de données
612
			// Extraction des variables du tableau de données
612
			extract($donnees);
613
			extract($donnees);
613
			// Démarage de la bufferisation de sortie
614
			// Démarage de la bufferisation de sortie
614
			ob_start();
615
			ob_start();
615
			// Si les tags courts sont activés
616
			// Si les tags courts sont activés
616
			if ((bool) @ini_get('short_open_tag') === true) {
617
			if ((bool) @ini_get('short_open_tag') === true) {
617
				// Simple inclusion du squelette
618
				// Simple inclusion du squelette
618
				include $fichier;
619
				include $fichier;
619
			} else {
620
			} else {
620
				// Sinon, remplacement des tags courts par la syntaxe classique avec echo
621
				// Sinon, remplacement des tags courts par la syntaxe classique avec echo
621
				$html_et_code_php = self::traiterTagsCourts($fichier);
622
				$html_et_code_php = self::traiterTagsCourts($fichier);
622
				// Pour évaluer du php mélangé dans du html il est nécessaire de fermer la balise php ouverte par eval
623
				// Pour évaluer du php mélangé dans du html il est nécessaire de fermer la balise php ouverte par eval
623
				$html_et_code_php = '?>'.$html_et_code_php;
624
				$html_et_code_php = '?>'.$html_et_code_php;
624
				// Interprétation du html et du php dans le buffer
625
				// Interprétation du html et du php dans le buffer
625
				echo eval($html_et_code_php);
626
				echo eval($html_et_code_php);
626
			}
627
			}
627
			// Récupèration du contenu du buffer
628
			// Récupèration du contenu du buffer
628
			$sortie = ob_get_contents();
629
			$sortie = ob_get_contents();
629
			// Suppression du buffer
630
			// Suppression du buffer
630
			@ob_end_clean();
631
			@ob_end_clean();
631
		} else {
632
		} else {
632
			$msg = "Le fichier du squelette '$fichier' n'existe pas.";
633
			$msg = "Le fichier du squelette '$fichier' n'existe pas.";
633
			trigger_error($msg, E_USER_WARNING);
634
			trigger_error($msg, E_USER_WARNING);
634
		}
635
		}
635
		// Retourne le contenu
636
		// Retourne le contenu
636
		return $sortie;
637
		return $sortie;
637
	}
638
	}
638
	
639
	
639
	/**
640
	/**
640
	 * Fonction chargeant le contenu du squelette et remplaçant les tags court php (<?= ...) par un tag long avec echo.
641
	 * Fonction chargeant le contenu du squelette et remplaçant les tags court php (<?= ...) par un tag long avec echo.
641
	 *
642
	 *
642
	 * @param String $chemin_squelette le chemin du fichier du squelette
643
	 * @param String $chemin_squelette le chemin du fichier du squelette
643
	 *
644
	 *
644
	 * @return string le contenu du fichier du squelette php avec les tags courts remplacés.
645
	 * @return string le contenu du fichier du squelette php avec les tags courts remplacés.
645
	 */
646
	 */
646
	private static function traiterTagsCourts($chemin_squelette) {
647
	private static function traiterTagsCourts($chemin_squelette) {
647
		$contenu = file_get_contents($chemin_squelette);
648
		$contenu = file_get_contents($chemin_squelette);
648
		// Remplacement de tags courts par un tag long avec echo
649
		// Remplacement de tags courts par un tag long avec echo
649
		$contenu = str_replace('<?=', '<?php echo ',  $contenu);
650
		$contenu = str_replace('<?=', '<?php echo ',  $contenu);
650
		// Ajout systématique d'un point virgule avant la fermeture php
651
		// Ajout systématique d'un point virgule avant la fermeture php
651
		$contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu);
652
		$contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu);
652
		return $contenu;
653
		return $contenu;
653
	}
654
	}
654
	
655
	
655
	public static function debug($var) {
656
	public static function debug($var) {
656
		echo '<pre>'.print_r($var, true).'</pre>';
657
		echo '<pre>'.print_r($var, true).'</pre>';
657
	}
658
	}
658
}
659
}
659
?>
660
?>