Subversion Repositories Applications.annuaire

Rev

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

Rev 292 Rev 331
Line 12... Line 12...
12
 */
12
 */
13
abstract class JRestService {
13
abstract class JRestService {
Line 14... Line 14...
14
 
14
 
15
	public $config;
15
	public $config;
-
 
16
	protected $bdd;
16
	protected $bdd;
17
	protected $ressources;
17
	protected $log = array();
18
	protected $log = array();
18
	protected $messages = array();
19
	protected $messages = array();
19
	protected $debug = array();
20
	protected $debug = array();
20
	protected $distinct = false;
21
	protected $distinct = false;
Line 50... Line 51...
50
	 */
51
	 */
51
	public function getRessource() {
52
	public function getRessource() {
52
		$this->getElement(array());
53
		$this->getElement(array());
53
	}
54
	}
Line -... Line 55...
-
 
55
 
-
 
56
	//+----------------------------------------------------------------------------------------------------------------+
-
 
57
	// GESTION de l'ENVOIE au NAVIGATEUR
-
 
58
 
-
 
59
	protected function envoyerJson($donnees, $encodage = 'utf-8') {
-
 
60
		$contenu = json_encode($donnees);
-
 
61
		$this->envoyer($contenu, 'application/json', $encodage, false);
-
 
62
	}
-
 
63
	
-
 
64
	protected function envoyerJsonVar($variable, $donnees = null, $encodage = 'utf-8') {
-
 
65
		$contenu = "var $variable = ".json_encode($donnees);
-
 
66
		$this->envoyer($contenu, 'text/html', $encodage, false);
-
 
67
	}
-
 
68
	
-
 
69
	protected function envoyerJsonp($donnees = null, $encodage = 'utf-8') {
-
 
70
		$contenu = $_GET['callback'].'('.json_encode($donnees).');';
-
 
71
		$this->envoyer($contenu, 'text/html', $encodage, false);
-
 
72
	}
-
 
73
	
-
 
74
	protected function envoyerTxt($donnees, $encodage = 'utf-8') {
-
 
75
		$this->envoyer($contenu, 'text/html', $encodage, false);
-
 
76
	}
54
 
77
 
55
	protected function envoyer($donnees = null, $mime = 'text/html', $encodage = 'utf-8', $json = true) {
78
	protected function envoyer($donnees = null, $mime = 'text/html', $encodage = 'utf-8', $json = true) {
56
		// Traitements des messages d'erreurs et données
79
		// Traitements des messages d'erreurs et données
57
		if (count($this->messages) != 0) {
80
		if (count($this->messages) != 0) {
58
			header('HTTP/1.1 500 Internal Server Error');
81
			header('HTTP/1.1 500 Internal Server Error');
Line 73... Line 96...
73
		// Encodage au format et JSON et envoie sur la sortie standard
96
		// Encodage au format et JSON et envoie sur la sortie standard
74
		$contenu = $json ? json_encode($sortie) : $sortie;
97
		$contenu = $json ? json_encode($sortie) : $sortie;
75
		$this->envoyerContenu($encodage, $mime, $contenu);
98
		$this->envoyerContenu($encodage, $mime, $contenu);
76
	}
99
	}
Line 77... Line 100...
77
 
100
 
78
	protected function envoyerDebogage() {
101
	private function envoyerDebogage() {
79
		if (!is_array($this->debug)) {
102
		if (!is_array($this->debug)) {
80
			$this->debug[] = $this->debug;
103
			$this->debug[] = $this->debug;
81
		}
104
		}
82
		if (count($this->debug) != 0) {
105
		if (count($this->debug) != 0) {
Line 87... Line 110...
87
			}
110
			}
88
			header('X-DebugJrest-Data:'.json_encode($this->debug));
111
			header('X-DebugJrest-Data:'.json_encode($this->debug));
89
		}
112
		}
90
	}
113
	}
Line 91... Line 114...
91
 
114
 
-
 
115
	private function envoyerContenu($encodage, $mime, $contenu) {
92
	protected function envoyerContenu($encodage, $mime, $contenu) {
116
		if (!is_null($mime) && !is_null($encodage)) {
-
 
117
			header("Content-Type: $mime; charset=$encodage");
-
 
118
		} else if (!is_null($mime) && is_null($encodage)) {
-
 
119
			header("Content-Type: $mime");
93
		header("Content-Type: $mime; charset=$encodage");
120
		}
94
		print $contenu;
121
		print $contenu;
95
	}
122
	}
-
 
123
	
-
 
124
	private function envoyerAuth($message_accueil, $message_echec) {
-
 
125
		header('HTTP/1.0 401 Unauthorized');
-
 
126
		header('WWW-Authenticate: Basic realm="'.mb_convert_encoding($message_accueil, 'ISO-8859-1', 'UTF-8').'"');
-
 
127
		header('Content-type: text/plain; charset=UTF-8');
-
 
128
		print $message_echec;
-
 
129
		exit(0);
-
 
130
	}
-
 
131
	
-
 
132
	//+----------------------------------------------------------------------------------------------------------------+
-
 
133
	// GESTION de la BASE de DONNÉES
96
 
134
	
97
	private function connecterPDO($config, $base = 'database') {
135
	private function connecterPDO($config, $base = 'database') {
98
        $cfg = $config[$base];
136
        $cfg = $config[$base];
99
		$dsn = $cfg['phptype'].':dbname='.$cfg['database'].';host='.$cfg['hostspec'];
137
		$dsn = $cfg['phptype'].':dbname='.$cfg['database'].';host='.$cfg['hostspec'];
100
		try {
138
		try {
Line 116... Line 154...
116
			default : $sortie = $id;
154
			default : $sortie = $id;
117
		}
155
		}
118
		return $sortie;
156
		return $sortie;
119
	}
157
	}
Line -... Line 158...
-
 
158
 
-
 
159
	//+----------------------------------------------------------------------------------------------------------------+
-
 
160
	// TRAITEMENT des URLs et des PARAMÊTRES
-
 
161
	
-
 
162
	protected function traiterNomMethodeGet($nom) {
-
 
163
		$methode = 'get';
-
 
164
		$methode .= str_replace(' ', '', ucwords(str_replace('-', ' ', strtolower($nom))));
-
 
165
		return $methode;
-
 
166
	}
120
 
167
	
121
	protected function traiterParametresUrl($params_attendu, $params, $pourBDD = true) {
168
	protected function traiterParametresUrl($params_attendu, $params, $pourBDD = true) {
122
		$sortie = array();
169
		$sortie = array();
123
		foreach ($params_attendu as $num => $nom) {
170
		foreach ($params_attendu as $num => $nom) {
124
			if (isset($params[$num]) && $params[$num] != '*') {
171
			if (isset($params[$num]) && $params[$num] != '*') {
Line 137... Line 184...
137
			$sortie[$cle] = $this->bdd->quote($valeur);
184
			$sortie[$cle] = $this->bdd->quote($valeur);
138
		}
185
		}
139
		return $sortie;
186
		return $sortie;
140
	}
187
	}
Line -... Line 188...
-
 
188
 
-
 
189
	//+----------------------------------------------------------------------------------------------------------------+
-
 
190
	// GESTION DE L'IDENTIFICATION
141
 
191
	
142
	protected function getIdentification(&$params) {
192
	protected function getIdentification(&$params) {
143
		// Initialisation des variables
193
		// Initialisation des variables
Line 144... Line 194...
144
		$utilisateur = array(0, session_id());
194
		$utilisateur = array(0, session_id());
Line 176... Line 226...
176
	}
226
	}
Line 177... Line 227...
177
 
227
 
178
	protected function getUtilisateur() {
228
	protected function getUtilisateur() {
179
		return (isset($_SESSION['coel_utilisateur']) ? $_SESSION['coel_utilisateur'] : '');
229
		return (isset($_SESSION['coel_utilisateur']) ? $_SESSION['coel_utilisateur'] : '');
-
 
230
	}
-
 
231
	
-
 
232
	protected function authentifier() {
-
 
233
		if (!isset($_SERVER['PHP_AUTH_USER'])) {
-
 
234
			header('WWW-Authenticate: Basic realm="www.tela-botanica.org"');
-
 
235
			header('HTTP/1.0 401 Unauthorized');
-
 
236
			header('Content-type: text/html; charset=UTF-8');
-
 
237
			echo 'Accès interdit';
-
 
238
			exit;
-
 
239
		} else {
-
 
240
			if($this->verifierAcces($_SERVER['PHP_AUTH_USER'])) {
-
 
241
				return ;
-
 
242
			} else {
-
 
243
				header('WWW-Authenticate: Basic realm="www.tela-botanica.org"');
-
 
244
				header('HTTP/1.0 401 Unauthorized');
-
 
245
				header('Content-type: text/html; charset=UTF-8');
-
 
246
				echo 'Accès interdit';
-
 
247
				exit ;
-
 
248
			}
-
 
249
		}
-
 
250
	}
-
 
251
 
-
 
252
	protected function verifierAcces($id) {
-
 
253
		$query = 'SELECT '.$this->config['database_ident']['ann_id'].' AS name '.
-
 
254
			'FROM '.$this->config['database_ident']['database'].'.'.$this->config['database_ident']['annuaire'].' '.
-
 
255
			'WHERE '.$this->config['database_ident']['ann_id'].' = '.$this->bdd->quote($id).' '.
-
 
256
			'	AND '.$this->config['database_ident']['ann_pwd'].' = '.$this->config['database_ident']['pass_crypt_funct'].'('.$this->bdd->quote($_SERVER['PHP_AUTH_PW']).')' ;
-
 
257
		$res = $this->bdd->query($query);
-
 
258
		
-
 
259
		if ($res == '') {
-
 
260
			return false ;
-
 
261
		}
-
 
262
 
-
 
263
		if (DB::isError($res)) {
-
 
264
			die($res->getMessage());
Line -... Line 265...
-
 
265
		}
-
 
266
 
-
 
267
		return true;
-
 
268
	}
-
 
269
	
-
 
270
	//+----------------------------------------------------------------------------------------------------------------+
180
	}
271
	// GESTION DES SQUELETTES PHP
181
 
272
	
182
	/**
273
	/**
183
	 * Méthode prenant en paramètre un chemin de fichier squelette et un tableau associatif de données,
274
	 * Méthode prenant en paramètre un chemin de fichier squelette et un tableau associatif de données,
184
	 * en extrait les variables, charge le squelette et retourne le résultat des deux combinés.
275
	 * en extrait les variables, charge le squelette et retourne le résultat des deux combinés.
Line 232... Line 323...
232
		$contenu = str_replace('<?=', '<?php echo ',  $contenu);
323
		$contenu = str_replace('<?=', '<?php echo ',  $contenu);
233
		// Ajout systématique d'un point virgule avant la fermeture php
324
		// Ajout systématique d'un point virgule avant la fermeture php
234
		$contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu);
325
		$contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu);
235
		return $contenu;
326
		return $contenu;
236
	}
327
	}
237
	
-
 
238
	protected function authentifier() {
-
 
239
		if (!isset($_SERVER['PHP_AUTH_USER'])) {
-
 
240
			header('WWW-Authenticate: Basic realm="www.tela-botanica.org"');
-
 
241
			header('HTTP/1.0 401 Unauthorized');
-
 
242
			header('Content-type: text/html; charset=UTF-8');
-
 
243
			echo 'Accès interdit';
-
 
244
			exit;
-
 
245
		} else {
-
 
246
			if($this->verifierAcces($_SERVER['PHP_AUTH_USER'])) {
-
 
247
				return ;
-
 
248
			} else {
-
 
249
				header('WWW-Authenticate: Basic realm="www.tela-botanica.org"');
-
 
250
				header('HTTP/1.0 401 Unauthorized');
-
 
251
				header('Content-type: text/html; charset=UTF-8');
-
 
252
				echo 'Accès interdit';
-
 
253
				exit ;
-
 
254
			}
-
 
255
		}
-
 
256
	}
-
 
257
 
-
 
258
	protected function verifierAcces($id) {
-
 
259
		$query = 'SELECT '.$this->config['database_ident']['ann_id'].' AS name '.
-
 
260
			'FROM '.$this->config['database_ident']['database'].'.'.$this->config['database_ident']['annuaire'].' '.
-
 
261
			'WHERE '.$this->config['database_ident']['ann_id'].' = '.$this->bdd->quote($id).' '.
-
 
262
			'	AND '.$this->config['database_ident']['ann_pwd'].' = '.$this->config['database_ident']['pass_crypt_funct'].'('.$this->bdd->quote($_SERVER['PHP_AUTH_PW']).')' ;
-
 
263
		$res = $this->bdd->query($query);
-
 
264
		
-
 
265
		if ($res == '') {
-
 
266
			return false ;
-
 
267
		}
-
 
268
 
-
 
269
		if (DB::isError($res)) {
-
 
270
			die($res->getMessage());
-
 
271
		}
-
 
272
 
-
 
273
		return true;
-
 
274
	}
-
 
275
}
328
}
276
?>
329
?>
277
330