Subversion Repositories Applications.referentiel

Rev

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

Rev 19 Rev 23
1
<?php
1
<?php
2
/**
2
/**
3
 * Classe mère abstraite contenant les méthodes génériques des services des Référentiels.
3
 * Classe mère abstraite contenant les méthodes génériques des services des Référentiels.
4
 * Encodage en entrée : utf8
4
 * Encodage en entrée : utf8
5
 * Encodage en sortie : utf8
5
 * Encodage en sortie : utf8
6
 * 
6
 * 
7
 * @category	Php 5.2
7
 * @category	Php 5.2
8
 * @package		Referentiel
8
 * @package		Referentiel
9
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
10
 * @license		GPL v3 <http://www.gnu.org/licenses/gpl.txt>
10
 * @license		GPL v3 <http://www.gnu.org/licenses/gpl.txt>
11
 * @license		CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
11
 * @license		CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
12
 * @copyright	2010 Tela-Botanica
12
 * @copyright	2010 Tela-Botanica
13
 * @version		$Id$
13
 * @version		$Id$
14
 */
14
 */
15
abstract class Ref {
15
abstract class Ref {
16
	
16
	
17
	public $config;
17
	public $config;
18
	protected $bdd;
18
	protected $bdd;
19
	protected $messages = array();
19
	protected $messages = array();
20
	protected $debug = array();
20
	protected $debug = array();
21
	protected $distinct = false;
21
	protected $distinct = false;
22
	protected $orderby = null;
22
	protected $orderby = null;
23
	protected $formatRetour = 'objet';
23
	protected $formatRetour = 'objet';
24
	protected $start = 0; 
24
	protected $start = 0; 
25
	protected $limit = 150;
25
	protected $limit = 150;
26
	
26
	
27
	public function __construct($config, $demarrer_session = true) {
27
	public function __construct($config, $demarrer_session = true) {
28
		// Tableau contenant la config de Jrest
28
		// Tableau contenant la config de Jrest
29
		$this->config = $config;
29
		$this->config = $config;
30
		
30
		
31
		// Connection à la base de données
31
		// Connection à la base de données
32
		$this->bdd = $this->connecterPDO($this->config, 'database');
32
		$this->bdd = $this->connecterPDO($this->config, 'database');
33
		
33
		
34
		// Nettoyage du $_GET (sécurité)
34
		// Nettoyage du $_GET (sécurité)
35
		if (isset($_GET)) {
35
		if (isset($_GET)) {
36
			$get_params = array('orderby', 'distinct', 'start', 'limit', 'formatRetour');
36
			$get_params = array('orderby', 'distinct', 'start', 'limit', 'formatRetour');
37
			foreach ($get_params as $get) {
37
			foreach ($get_params as $get) {
38
				$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
38
				$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
39
				$_GET[$get] = str_replace($verifier, '', $_GET[$get]);
39
				$_GET[$get] = str_replace($verifier, '', $_GET[$get]);
40
				if (isset($_GET[$get]) && $_GET[$get] != '') {
40
				if (isset($_GET[$get]) && $_GET[$get] != '') {
41
					$this->$get = $_GET[$get];
41
					$this->$get = $_GET[$get];
42
				} else {
42
				} else {
43
					$_GET[$get] = null;
43
					$_GET[$get] = null;
44
				}
44
				}
45
			}
45
			}
46
		}
46
		}
47
	}
47
	}
48
 
48
 
49
	/**
49
	/**
50
	 * Méthode appelée quand aucun paramètre n'est passé dans l'url et avec une requête de type GET.
50
	 * Méthode appelée quand aucun paramètre n'est passé dans l'url et avec une requête de type GET.
51
	 */
51
	 */
52
	public function getRessource() {
52
	public function getRessource() {
53
		$this->getElement(array());
53
		$this->getElement(array());
54
	}
54
	}
55
	
55
	
56
	protected function envoyer($donnees = null, $mime = 'text/html', $encodage = 'utf-8', $json = true) {
56
	protected function envoyer($donnees = null, $mime = 'text/html', $encodage = 'utf-8', $json = true) {
57
		// Traitements des messages d'erreurs et données
57
		// Traitements des messages d'erreurs et données
58
		if (count($this->messages) != 0) {
58
		if (count($this->messages) != 0) {
59
			header('HTTP/1.1 500 Internal Server Error');
59
			header('HTTP/1.1 500 Internal Server Error');
60
			$mime = 'text/html';
60
			$mime = 'text/html';
61
			$encodage = 'utf-8';
61
			$encodage = 'utf-8';
62
			$sortie = $this->messages;
62
			$sortie = $this->messages;
63
		} else {
63
		} else {
64
			$sortie = $donnees;
64
			$sortie = $donnees;
65
			if (is_null($donnees)) {
65
			if (is_null($donnees)) {
66
				$sortie = 'OK';
66
				$sortie = 'OK';
67
			}
67
			}
68
		}
68
		}
69
 
69
 
70
		// Gestion de l'envoie du déboguage
70
		// Gestion de l'envoie du déboguage
71
		$this->envoyerDebogage();
71
		$this->envoyerDebogage();
72
		
72
		
73
		// Encodage au format et JSON et envoie sur la sortie standard
73
		// Encodage au format et JSON et envoie sur la sortie standard
74
		$contenu = $json ? json_encode($sortie) : $sortie;
74
		$contenu = $json ? json_encode($sortie) : $sortie;
75
		$this->envoyerContenu($encodage, $mime, $contenu);
75
		$this->envoyerContenu($encodage, $mime, $contenu);
76
	}
76
	}
77
	
77
	
78
	protected function envoyerDebogage() {
78
	protected function envoyerDebogage() {
79
		if (!is_array($this->debug)) {
79
		if (!is_array($this->debug)) {
80
			$this->debug[] = $this->debug;
80
			$this->debug[] = $this->debug;
81
		}
81
		}
82
		if (count($this->debug) != 0) {
82
		if (count($this->debug) != 0) {
83
			foreach ($this->debug as $cle => $val) {
83
			foreach ($this->debug as $cle => $val) {
84
				if (is_array($val)) {
84
				if (is_array($val)) {
85
					$this->debug[$cle] = print_r($val, true);
85
					$this->debug[$cle] = print_r($val, true);
86
				}
86
				}
87
			}
87
			}
88
			header('X-DebugJrest-Data:'.json_encode($this->debug));
88
			header('X-DebugJrest-Data:'.json_encode($this->debug));
89
		}
89
		}
90
	}
90
	}
91
	
91
	
92
	protected function envoyerContenu($encodage, $mime, $contenu) {
92
	protected function envoyerContenu($encodage, $mime, $contenu) {
93
		header("Content-Type: $mime; charset=$encodage");
93
		header("Content-Type: $mime; charset=$encodage");
94
		print $contenu;
94
		print $contenu;
95
	}
95
	}
96
	
96
	
97
	private function connecterPDO($config, $base = 'database') {
97
	private function connecterPDO($config, $base = 'database') {
98
        $cfg = $config[$base];
98
        $cfg = $config[$base];
99
		$dsn = $cfg['phptype'].':dbname='.$cfg['database'].';host='.$cfg['hostspec'];
99
		$dsn = $cfg['phptype'].':dbname='.$cfg['database'].';host='.$cfg['hostspec'];
100
		try {
100
		try {
101
    		$PDO = new PDO($dsn, $cfg['username'], $cfg['password']);
101
    		$PDO = new PDO($dsn, $cfg['username'], $cfg['password']);
102
		} catch (PDOException $e) {
102
		} catch (PDOException $e) {
103
    		echo 'La connexion à la base de donnée via PDO a échouée : ' . $e->getMessage();
103
    		echo 'La connexion à la base de donnée via PDO a échouée : ' . $e->getMessage();
104
		}
104
		}
105
		// Passe en UTF-8 la connexion à la BDD
105
		// Passe en UTF-8 la connexion à la BDD
106
		$PDO->exec("SET NAMES 'utf8'");
106
		$PDO->exec("SET NAMES 'utf8'");
107
		// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché)
107
		// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché)
108
		$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
108
		$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
109
        return $PDO;
109
        return $PDO;
110
	}
110
	}
111
	
111
	
112
	protected function getTxt($id) {
112
	protected function getTxt($id) {
113
		$sortie = '';
113
		$sortie = '';
114
		switch ($id) {
114
		switch ($id) {
115
			case 'sql_erreur' : $sortie = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s'; break;
115
			case 'sql_erreur' : $sortie = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s'; break;
116
			default : $sortie = $id; 
116
			default : $sortie = $id; 
117
		}
117
		}
118
		return $sortie;
118
		return $sortie;
119
	}
119
	}
120
	
120
	
121
	protected function traiterParametresUrl($params_attendu, $params, $pourBDD = true) {
121
	protected function traiterParametresUrl($params_attendu, $params, $pourBDD = true) {
122
		$sortie = array();
122
		$sortie = array();
123
		foreach ($params_attendu as $num => $nom) {
123
		foreach ($params_attendu as $num => $nom) {
124
			if (isset($params[$num]) && $params[$num] != '*') {
124
			if (isset($params[$num]) && $params[$num] != '*') {
125
				if ($pourBDD) {
125
				if ($pourBDD) {
126
					$params[$num] = $this->bdd->quote($params[$num]);
126
					$params[$num] = $this->bdd->quote($params[$num]);
127
				}
127
				}
128
				$sortie[$nom] = $params[$num];
128
				$sortie[$nom] = $params[$num];
129
			}
129
			}
130
		}
130
		}
131
		return $sortie;
131
		return $sortie;
132
	}
132
	}
-
 
133
	
-
 
134
	protected function traiterParametresPost($params_attendu, $params, $pourBDD = true) {
-
 
135
		$sortie = array();
-
 
136
		foreach ($params_attendu as $num => $nom) {
-
 
137
			if (isset($params[$nom]) && $params[$nom] != '') {
-
 
138
				if ($pourBDD) {
-
 
139
					$params[$nom] = $this->bdd->quote($params[$nom]);
-
 
140
				}
-
 
141
				$sortie[$nom] = $params[$nom];
-
 
142
			} else {
-
 
143
				if ($pourBDD) {
-
 
144
					$sortie[$nom] = 'NULL';
-
 
145
				} else {
-
 
146
					$sortie[$nom] = '';
-
 
147
				}
-
 
148
			}
-
 
149
		}
-
 
150
		return $sortie;
-
 
151
	}
133
}
152
}
134
?>
153
?>