Subversion Repositories eFlore/Applications.coel

Rev

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

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