Subversion Repositories Applications.gtt

Rev

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

Rev 64 Rev 75
1
<?php
1
<?php
2
 
2
 
3
abstract class aGttSql {
3
abstract class aGttSql {
4
 
4
 
5
	/*** Attributs : */
5
	/*** Attributs : */
6
	private $base_de_donnees = GTT_BDD_NOM;
6
	private $base_de_donnees = GTT_BDD_NOM;
7
	protected $table_nom;
7
	protected $table_nom;
8
	protected $correspondance;
8
	protected $correspondance;
9
 
9
 
10
	/*** Accesseurs : */
10
	/*** Accesseurs : */
11
 
11
 
12
	// Base De Donnees
12
	// Base De Donnees
13
	function getBaseDeDonnees()
13
	function getBaseDeDonnees()
14
	{
14
	{
15
		return $this->base_de_donnees;
15
		return $this->base_de_donnees;
16
	}
16
	}
17
	function setBaseDeDonnees($bdd)
17
	function setBaseDeDonnees($bdd)
18
	{
18
	{
19
		$this->base_de_donnees = $bdd;
19
		$this->base_de_donnees = $bdd;
20
	}
20
	}
21
	// TableNom
21
	// TableNom
22
	function getTableNom()
22
	function getTableNom()
23
	{
23
	{
24
		return $this->dao_table_nom;
24
		return $this->dao_table_nom;
25
	}
25
	}
26
	function setTableNom($tn)
26
	function setTableNom($tn)
27
	{
27
	{
28
		$this->dao_table_nom = $tn;
28
		$this->dao_table_nom = $tn;
29
	}
29
	}
30
	// Correspondance
30
	// Correspondance
31
	function getCorrespondance($champ = null)
31
	function getCorrespondance($champ = null)
32
	{
32
	{
33
		if (!is_null($champ)) {
33
		if (!is_null($champ)) {
34
			return $this->dao_correspondance[$champ];
34
			return $this->dao_correspondance[$champ];
35
		}
35
		}
36
		return $this->dao_correspondance;
36
		return $this->dao_correspondance;
37
	}
37
	}
38
	function setCorrespondance($c)
38
	function setCorrespondance($c)
39
	{
39
	{
40
		$this->dao_correspondance = $c;
40
		$this->dao_correspondance = $c;
41
	}
41
	}
42
 
42
 
43
	/*** Méthodes : */
43
	/*** Méthodes : */
44
 
44
 
45
    /** Instancie un objet utilisateur à partir d'un enregistrement issu de la base de donnée ou l'inverse.
45
    /** Instancie un objet utilisateur à partir d'un enregistrement issu de la base de donnée ou l'inverse.
46
	* Cette métohode permet de s'abstraire des noms des champs présent dans la base de donnée.
46
	* Cette métohode permet de s'abstraire des noms des champs présent dans la base de donnée.
47
	*/
47
	*/
48
	protected function basculerEnregistrementObjet($donnees, $instancier = false)
48
	protected function basculerEnregistrementObjet($donnees, $instancier = false)
49
	{
49
	{
50
		$classe = get_class($this);
50
		$classe = get_class($this);
51
		if (is_array($donnees)) {
51
		if (is_array($donnees)) {
52
			if ($instancier) {
52
			if ($instancier) {
53
				foreach ($this->getCorrespondance() as $champ => $attribut) {
53
				foreach ($this->getCorrespondance() as $champ => $attribut) {
54
					if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {
54
					if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {
55
						$methode = $this->donnerMethodeSetAvecAttribut($attribut);
55
						$methode = $this->donnerMethodeSetAvecAttribut($attribut);
56
						$this->$methode($donnees[$champ]);
56
						$this->$methode($donnees[$champ]);
57
					}
57
					}
58
				}
58
				}
59
			} else {
59
			} else {
60
				$Objet = new $classe;
60
				$Objet = new $classe;
61
				foreach ($this->getCorrespondance() as $champ => $attribut) {
61
				foreach ($this->getCorrespondance() as $champ => $attribut) {
62
					if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {
62
					if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {
63
						$methode = $this->donnerMethodeSetAvecAttribut($attribut);
63
						$methode = $this->donnerMethodeSetAvecAttribut($attribut);
64
						$Objet->$methode($donnees[$champ]);
64
						$Objet->$methode($donnees[$champ]);
65
					}
65
					}
66
				}
66
				}
67
				return $Objet;
67
				return $Objet;
68
			}
68
			}
69
		} else if ($donnees instanceof $classe) {
69
		} else if ($donnees instanceof $classe) {
70
			$enregistrement = array();
70
			$enregistrement = array();
71
			foreach ($this->getCorrespondance() as $champ => $attribut) {
71
			foreach ($this->getCorrespondance() as $champ => $attribut) {
72
				$methode = $this->donnerMethodeGetAvecAttribut($attribut);
72
				$methode = $this->donnerMethodeGetAvecAttribut($attribut);
73
				if (method_exists($donnees, $methode)) {
73
				if (method_exists($donnees, $methode)) {
74
					if (!is_null($donnees->$methode())) {
74
					if (!is_null($donnees->$methode())) {
75
				 		$enregistrement[$champ] = $donnees->$methode();
75
				 		$enregistrement[$champ] = $donnees->$methode();
76
					}
76
					}
77
				}
77
				}
78
			}
78
			}
79
			return $enregistrement;
79
			return $enregistrement;
80
		}
80
		}
81
	}
81
	}
82
	private function donnerMethodeGetAvecAttribut($attribut)
82
	private function donnerMethodeGetAvecAttribut($attribut)
83
	{
83
	{
84
		return 'get'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
84
		return 'get'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
85
	}
85
	}
86
	private function donnerMethodeGetAvecChamp($champ)
86
	private function donnerMethodeGetAvecChamp($champ)
87
	{
87
	{
88
		return 'get'.str_replace(' ', '', ucwords(str_replace('_', ' ', $this->getCorrespondance($champ))));
88
		return 'get'.str_replace(' ', '', ucwords(str_replace('_', ' ', $this->getCorrespondance($champ))));
89
	}
89
	}
90
	private function donnerMethodeSetAvecAttribut($attribut)
90
	private function donnerMethodeSetAvecAttribut($attribut)
91
	{
91
	{
92
		return 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
92
		return 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
93
	}
93
	}
94
	private function donnerMethodeSetAvecChamp($champ)
94
	private function donnerMethodeSetAvecChamp($champ)
95
	{
95
	{
96
		return 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $this->getCorrespondance($champ))));
96
		return 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $this->getCorrespondance($champ))));
97
	}
97
	}
98
 
98
 
99
	/**
99
	/**
-
 
100
	* Consulter un ou plusieurs enregistrements dans la base de données.
-
 
101
	* Chaque requête comportant des paramêtre doivent les inclures sous la forme "#0" pour le paramêtre 0,
-
 
102
	* puis "#1" pour le paramêtre 1 et ainsi de suite.
-
 
103
	* Exemple : SELECT * FROM gestion_projet WHERE gp_id_projet = #0
-
 
104
	* ou		SELECT * FROM gestion_projet WHERE gp_nom_projet = "#0"
-
 
105
	* @return mixed false, un objet, un tableau d'objet ou rien et instancie l'objet courant.
-
 
106
	*/
-
 
107
	public function consulter($requete, $parametres = null, $instancier = false)
-
 
108
	{
-
 
109
		// Formatage de la requête avec les paramêtres s'il y en a
-
 
110
		if (!is_null($parametres)) {
-
 
111
			if (!is_array($parametres)) {
-
 
112
				$parametres = array('#0' => $parametres);
-
 
113
			} else {
-
 
114
				// Ajout d'un # devant chaque clé numérique
-
 
115
				if (count($parametres) > 0) {
-
 
116
					foreach ($parametres as $c => $v) {
-
 
117
						$parametres['#'.$c] = $v;
-
 
118
					}
-
 
119
				}
-
 
120
			}
-
 
121
			// Remplacement dans la requete par les valeurs des paramêtres
-
 
122
			$requete = strtr($requete, $parametres);
-
 
123
		}
-
 
124
		
-
 
125
		$resultat = $GLOBALS['db']->query($requete);
-
 
126
		(DB::isError($resultat)) ? trigger_error(GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete), E_USER_ERROR) : '' ;
-
 
127
		$tab_resultat = array();
-
 
128
		while ($donnees =& $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
-
 
129
			$tab_resultat[] = $this->basculerEnregistrementObjet($donnees, $instancier);
-
 
130
		}
-
 
131
 
-
 
132
		$resultat_nbre = count($tab_resultat);
-
 
133
		if ($resultat_nbre > 1) {
-
 
134
			return $tab_resultat;
-
 
135
		} else if ($resultat_nbre == 1) {
-
 
136
			return $tab_resultat[0];
-
 
137
		} else if ($resultat_nbre == 0) {
-
 
138
			return false;
-
 
139
		}
-
 
140
	}
-
 
141
 
-
 
142
	/**
100
	* Ajouter un enregistrement dans la base de données.
143
	* Ajouter un enregistrement dans la base de données.
101
	* @return true si ok, false si aucun enregistrement effectué
144
	* @return true si ok, false si aucun enregistrement effectué
102
	*/
145
	*/
103
	public function ajouter()
146
	public function ajouter()
104
	{
147
	{
105
		$enregistrement = $this->basculerEnregistrementObjet($this);
148
		$enregistrement = $this->basculerEnregistrementObjet($this);
106
		$sql_attributs = '';
149
		$sql_attributs = '';
107
		$sql_valeurs = '';
150
		$sql_valeurs = '';
108
		foreach($enregistrement as $champ => $val) {
151
		foreach($enregistrement as $champ => $val) {
109
			if (!is_numeric($val)) {
152
			if (!is_numeric($val)) {
110
				$val = '"'.$val.'"';
153
				$val = '"'.$val.'"';
111
			}
154
			}
112
			$sql_attributs .= $champ.', ';
155
			$sql_attributs .= $champ.', ';
113
			$sql_valeurs .= $val.', ';
156
			$sql_valeurs .= $val.', ';
114
		}
157
		}
115
		$sql_attributs = trim($sql_attributs, ', ');
158
		$sql_attributs = trim($sql_attributs, ', ');
116
		$sql_valeurs = trim($sql_valeurs, ', ');
159
		$sql_valeurs = trim($sql_valeurs, ', ');
117
		$requete = 	'INSERT INTO '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' '.
160
		$requete = 	'INSERT INTO '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' '.
118
					'( '.$sql_attributs.' ) '.
161
					'( '.$sql_attributs.' ) '.
119
					'VALUES '.
162
					'VALUES '.
120
					'( '.$sql_valeurs.' )';
163
					'( '.$sql_valeurs.' )';
121
		trigger_error($requete, E_USER_NOTICE);
164
		trigger_error($requete, E_USER_NOTICE);
122
		$resultat = $GLOBALS['db']->query($requete);
165
		$resultat = $GLOBALS['db']->query($requete);
123
 
166
 
124
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
167
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
125
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
168
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
126
		if ($nbre_enregistrement_ajoute == 1) {
169
		if ($nbre_enregistrement_ajoute == 1) {
127
			return true;
170
			return true;
128
		} elseif ($nbre_enregistrement_ajoute == 0) {
171
		} elseif ($nbre_enregistrement_ajoute == 0) {
129
			return false;
172
			return false;
130
		}
173
		}
131
	}
174
	}
132
 
175
 
133
	/**
176
	/**
134
	* Modifier un enregistrement dans la base de données.
177
	* Modifier un enregistrement dans la base de données.
135
	* @param object l'ancien objet contenant les valeurs de clés primaires non modifiées. Laissé vide si on ne modifie pas les clés.
178
	* @param object l'ancien objet contenant les valeurs de clés primaires non modifiées. Laissé vide si on ne modifie pas les clés.
136
	* @return true si ok, false si aucun enregistrement effectué.
179
	* @return true si ok, false si aucun enregistrement effectué.
137
	*/
180
	*/
138
	public function modifier($Ancien = null)
181
	public function modifier($Ancien = null)
139
	{
182
	{
140
		$enregistrement = $this->basculerEnregistrementObjet($this);
183
		$enregistrement = $this->basculerEnregistrementObjet($this);
141
		$sql_where = '';
184
		$sql_where = '';
142
		$sql_set = '';
185
		$sql_set = '';
143
		foreach($enregistrement as $champ => $val) {
186
		foreach($enregistrement as $champ => $val) {
144
			if (!is_numeric($val)) {
187
			if (!is_numeric($val)) {
145
				$val = '"'.$val.'"';
188
				$val = '"'.$val.'"';
146
			}
189
			}
147
			$sql_set .= $champ.' = '.$val.', ';
190
			$sql_set .= $champ.' = '.$val.', ';
148
			$classe = get_class($this);
191
			$classe = get_class($this);
149
			if ($Ancien instanceof $classe) {
192
			if ($Ancien instanceof $classe) {
150
				$methode = $this->donnerMethodeGetAvecChamp($champ);
193
				$methode = $this->donnerMethodeGetAvecChamp($champ);
151
				$val = $Ancien->$methode();
194
				$val = $Ancien->$methode();
152
				if (!is_numeric($val)) {
195
				if (!is_numeric($val)) {
153
					$val = '"'.$val.'"';
196
					$val = '"'.$val.'"';
154
				}
197
				}
155
			}
198
			}
156
			if (preg_match('/_id_/', $champ)) {
199
			if (preg_match('/_id_/', $champ)) {
157
				$sql_where .= $champ.' = '.$val.' AND ';
200
				$sql_where .= $champ.' = '.$val.' AND ';
158
			}
201
			}
159
		}
202
		}
160
		$sql_set = trim($sql_set, ', ').' ';
203
		$sql_set = trim($sql_set, ', ').' ';
161
		$sql_where = trim($sql_where, ' AND ').' ';
204
		$sql_where = trim($sql_where, ' AND ').' ';
162
		$requete = 	'UPDATE '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' SET '.$sql_set.'WHERE '.$sql_where;
205
		$requete = 	'UPDATE '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' SET '.$sql_set.'WHERE '.$sql_where;
163
		trigger_error($requete, E_USER_NOTICE);
206
		trigger_error($requete, E_USER_NOTICE);
164
		$resultat = $GLOBALS['db']->query($requete);
207
		$resultat = $GLOBALS['db']->query($requete);
165
 
208
 
166
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
209
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
167
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
210
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
168
		if ($nbre_enregistrement_ajoute == 1) {
211
		if ($nbre_enregistrement_ajoute == 1) {
169
			return true;
212
			return true;
170
		} elseif ($nbre_enregistrement_ajoute == 0) {
213
		} elseif ($nbre_enregistrement_ajoute == 0) {
171
			return false;
214
			return false;
172
		}
215
		}
173
	}
216
	}
174
 
217
 
175
	/**
218
	/**
176
	* Supprimer un enregistrement dans la base de données.
219
	* Supprimer un enregistrement dans la base de données.
177
	* @return true si ok, false si aucun enregistrement effectué
220
	* @return true si ok, false si aucun enregistrement effectué
178
	*/
221
	*/
179
	public function supprimer()
222
	public function supprimer()
180
	{
223
	{
181
		$enregistrement = $this->basculerEnregistrementObjet($this);
224
		$enregistrement = $this->basculerEnregistrementObjet($this);
182
		$sql_where = '';
225
		$sql_where = '';
183
		foreach($enregistrement as $champ => $val) {
226
		foreach($enregistrement as $champ => $val) {
184
			if (!is_numeric($val)) {
227
			if (!is_numeric($val)) {
185
				$val = '"'.$val.'"';
228
				$val = '"'.$val.'"';
186
			}
229
			}
187
			//if (preg_match('/_id_/', $champ)) {
230
			//if (preg_match('/_id_/', $champ)) {
188
				$sql_where .= $champ.' = '.$val.' AND ';
231
				$sql_where .= $champ.' = '.$val.' AND ';
189
			//}
232
			//}
190
		}
233
		}
191
		$sql_where = trim($sql_where, ' AND ').' ';
234
		$sql_where = trim($sql_where, ' AND ').' ';
192
		$requete = 'DELETE FROM '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' WHERE '.$sql_where ;
235
		$requete = 'DELETE FROM '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' WHERE '.$sql_where ;
193
		trigger_error($requete, E_USER_NOTICE);
236
		trigger_error($requete, E_USER_NOTICE);
194
		$resultat = $GLOBALS['db']->query($requete);
237
		$resultat = $GLOBALS['db']->query($requete);
195
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
238
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
196
 
239
 
197
		$nbre_enregistrement_suppr = $GLOBALS['db']->affectedRows();
240
		$nbre_enregistrement_suppr = $GLOBALS['db']->affectedRows();
198
		if ($nbre_enregistrement_suppr == 1) {
241
		if ($nbre_enregistrement_suppr == 1) {
199
			return true;
242
			return true;
200
		} elseif ($nbre_enregistrement_suppr == 0) {
243
		} elseif ($nbre_enregistrement_suppr == 0) {
201
			return false;
244
			return false;
202
		}
245
		}
203
	}
246
	}
204
 
247
 
205
}
248
}
206
?>
249
?>