Subversion Repositories Applications.gtt

Rev

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

Rev 14 Rev 48
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()
31
	function getCorrespondance($champ = null)
32
	{
32
	{
-
 
33
		if (!is_null($champ)) {
-
 
34
			return $this->dao_correspondance[$champ];
-
 
35
		}
33
		return $this->dao_correspondance;
36
		return $this->dao_correspondance;
34
	}
37
	}
35
	function setCorrespondance($c)
38
	function setCorrespondance($c)
36
	{
39
	{
37
		$this->dao_correspondance = $c;
40
		$this->dao_correspondance = $c;
38
	}
41
	}
39
 
42
 
40
	/*** Méthodes : */
43
	/*** Méthodes : */
41
 
44
 
42
    /** 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.
43
	* 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.
44
	*/
47
	*/
45
	protected function basculerEnregistrementObjet($donnees, $instancier = false)
48
	protected function basculerEnregistrementObjet($donnees, $instancier = false)
46
	{
49
	{
47
		$classe = get_class($this);
50
		$classe = get_class($this);
48
		if (is_array($donnees)) {
51
		if (is_array($donnees)) {
49
			if ($instancier) {
52
			if ($instancier) {
50
				foreach ($this->getCorrespondance() as $champ => $attribut) {
53
				foreach ($this->getCorrespondance() as $champ => $attribut) {
51
					if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {
54
					if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {
52
						$methode = 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
55
						$methode = $this->donnerMethodeSetAvecAttribut($attribut);
53
						$this->$methode($donnees[$champ]);
56
						$this->$methode($donnees[$champ]);
54
					}
57
					}
55
				}
58
				}
56
			} else {
59
			} else {
57
				$Objet = new $classe;
60
				$Objet = new $classe;
58
				foreach ($this->getCorrespondance() as $champ => $attribut) {
61
				foreach ($this->getCorrespondance() as $champ => $attribut) {
59
					if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {
62
					if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {
60
						$methode = 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
63
						$methode = $this->donnerMethodeSetAvecAttribut($attribut);
61
						$Objet->$methode($donnees[$champ]);
64
						$Objet->$methode($donnees[$champ]);
62
					}
65
					}
63
				}
66
				}
64
				return $Objet;
67
				return $Objet;
65
			}
68
			}
66
		} else if ($donnees instanceof $classe) {
69
		} else if ($donnees instanceof $classe) {
67
			$enregistrement = array();
70
			$enregistrement = array();
68
			foreach ($this->getCorrespondance() as $champ => $attribut) {
71
			foreach ($this->getCorrespondance() as $champ => $attribut) {
69
				$methode = 'get'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
72
				$methode = $this->donnerMethodeGetAvecAttribut($attribut);
70
				if (method_exists($donnees, $methode)) {
73
				if (method_exists($donnees, $methode)) {
71
					if (!is_null($donnees->$methode())) {
74
					if (!is_null($donnees->$methode())) {
72
				 		$enregistrement[$champ] = $donnees->$methode();
75
				 		$enregistrement[$champ] = $donnees->$methode();
73
					}
76
					}
74
				}
77
				}
75
			}
78
			}
76
			return $enregistrement;
79
			return $enregistrement;
77
		}
80
		}
78
	}
81
	}
-
 
82
	private function donnerMethodeGetAvecAttribut($attribut)
-
 
83
	{
-
 
84
		return 'get'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
-
 
85
	}
-
 
86
	private function donnerMethodeGetAvecChamp($champ)
-
 
87
	{
-
 
88
		return 'get'.str_replace(' ', '', ucwords(str_replace('_', ' ', $this->getCorrespondance($champ))));
-
 
89
	}
-
 
90
	private function donnerMethodeSetAvecAttribut($attribut)
-
 
91
	{
-
 
92
		return 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
-
 
93
	}
-
 
94
	private function donnerMethodeSetAvecChamp($champ)
-
 
95
	{
-
 
96
		return 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $this->getCorrespondance($champ))));
-
 
97
	}
79
 
98
 
80
	/**
99
	/**
81
	* Ajouter un enregistrement dans la base de données.
100
	* Ajouter un enregistrement dans la base de données.
82
	* @return true si ok, false si aucun enregistrement effectué
101
	* @return true si ok, false si aucun enregistrement effectué
83
	*/
102
	*/
84
	public function ajouter()
103
	public function ajouter()
85
	{
104
	{
86
		$enregistrement = $this->basculerEnregistrementObjet($this);
105
		$enregistrement = $this->basculerEnregistrementObjet($this);
87
		$sql_attributs = '';
106
		$sql_attributs = '';
88
		$sql_valeurs = '';
107
		$sql_valeurs = '';
89
		foreach($enregistrement as $champ => $val) {
108
		foreach($enregistrement as $champ => $val) {
90
			if (!is_numeric($val)) {
109
			if (!is_numeric($val)) {
91
				$val = '"'.$val.'"';
110
				$val = '"'.$val.'"';
92
			}
111
			}
93
			$sql_attributs .= $champ.', ';
112
			$sql_attributs .= $champ.', ';
94
			$sql_valeurs .= $val.', ';
113
			$sql_valeurs .= $val.', ';
95
		}
114
		}
96
		$sql_attributs = trim($sql_attributs, ', ');
115
		$sql_attributs = trim($sql_attributs, ', ');
97
		$sql_valeurs = trim($sql_valeurs, ', ');
116
		$sql_valeurs = trim($sql_valeurs, ', ');
98
		$requete = 	'INSERT INTO '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' '.
117
		$requete = 	'INSERT INTO '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' '.
99
					'( '.$sql_attributs.' ) '.
118
					'( '.$sql_attributs.' ) '.
100
					'VALUES '.
119
					'VALUES '.
101
					'( '.$sql_valeurs.' )';
120
					'( '.$sql_valeurs.' )';
102
		trigger_error($requete, E_USER_NOTICE);
121
		trigger_error($requete, E_USER_NOTICE);
103
		$resultat = $GLOBALS['db']->query($requete);
122
		$resultat = $GLOBALS['db']->query($requete);
104
 
123
 
105
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
124
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
106
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
125
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
107
		if ($nbre_enregistrement_ajoute == 1) {
126
		if ($nbre_enregistrement_ajoute == 1) {
108
			return true;
127
			return true;
109
		} elseif ($nbre_enregistrement_ajoute == 0) {
128
		} elseif ($nbre_enregistrement_ajoute == 0) {
110
			return false;
129
			return false;
111
		}
130
		}
112
	}
131
	}
113
 
132
 
114
	/**
133
	/**
115
	* Modifier un enregistrement dans la base de données.
134
	* 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.
116
	* @return true si ok, false si aucun enregistrement effectué
136
	* @return true si ok, false si aucun enregistrement effectué.
117
	*/
137
	*/
118
	public function modifier()
138
	public function modifier($Ancien = null)
119
	{
139
	{
120
		$enregistrement = $this->basculerEnregistrementObjet($this);
140
		$enregistrement = $this->basculerEnregistrementObjet($this);
121
		$sql_where = '';
141
		$sql_where = '';
122
		$sql_set = '';
142
		$sql_set = '';
123
		foreach($enregistrement as $champ => $val) {
143
		foreach($enregistrement as $champ => $val) {
124
			if (!is_numeric($val)) {
144
			if (!is_numeric($val)) {
125
				$val = '"'.$val.'"';
145
				$val = '"'.$val.'"';
126
			}
146
			}
-
 
147
			$sql_set .= $champ.' = '.$val.', ';
-
 
148
			$classe = get_class($this);
-
 
149
			if ($Ancien instanceof $classe) {
-
 
150
				$methode = $this->donnerMethodeGetAvecChamp($champ);
-
 
151
				$val = $Ancien->$methode();
-
 
152
				if (!is_numeric($val)) {
-
 
153
					$val = '"'.$val.'"';
-
 
154
				}
-
 
155
			}
127
			if (preg_match('/_id_/', $champ)) {
156
			if (preg_match('/_id_/', $champ)) {
128
				$sql_where .= $champ.' = '.$val.' AND ';
157
				$sql_where .= $champ.' = '.$val.' AND ';
129
			} else {
-
 
130
				$sql_set .= $champ.' = '.$val.', ';
-
 
131
			}
158
			}
132
		}
159
		}
133
		$sql_set = trim($sql_set, ', ').' ';
160
		$sql_set = trim($sql_set, ', ').' ';
134
		$sql_where = trim($sql_where, ' AND ').' ';
161
		$sql_where = trim($sql_where, ' AND ').' ';
135
		$requete = 	'UPDATE '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' SET '.$sql_set.'WHERE '.$sql_where;
162
		$requete = 	'UPDATE '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' SET '.$sql_set.'WHERE '.$sql_where;
136
		trigger_error($requete, E_USER_NOTICE);
163
		trigger_error($requete, E_USER_NOTICE);
137
		$resultat = $GLOBALS['db']->query($requete);
164
		$resultat = $GLOBALS['db']->query($requete);
138
 
165
 
139
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
166
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
140
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
167
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
141
		if ($nbre_enregistrement_ajoute == 1) {
168
		if ($nbre_enregistrement_ajoute == 1) {
142
			return true;
169
			return true;
143
		} elseif ($nbre_enregistrement_ajoute == 0) {
170
		} elseif ($nbre_enregistrement_ajoute == 0) {
144
			return false;
171
			return false;
145
		}
172
		}
146
	}
173
	}
147
 
174
 
148
	/**
175
	/**
149
	* Supprimer un enregistrement dans la base de données.
176
	* Supprimer un enregistrement dans la base de données.
150
	* @return true si ok, false si aucun enregistrement effectué
177
	* @return true si ok, false si aucun enregistrement effectué
151
	*/
178
	*/
152
	public function supprimer()
179
	public function supprimer()
153
	{
180
	{
154
		$enregistrement = $this->basculerEnregistrementObjet($this);
181
		$enregistrement = $this->basculerEnregistrementObjet($this);
155
		$sql_where = '';
182
		$sql_where = '';
156
		foreach($enregistrement as $champ => $val) {
183
		foreach($enregistrement as $champ => $val) {
157
			if (!is_numeric($val)) {
184
			if (!is_numeric($val)) {
158
				$val = '"'.$val.'"';
185
				$val = '"'.$val.'"';
159
			}
186
			}
160
			//if (preg_match('/_id_/', $champ)) {
187
			//if (preg_match('/_id_/', $champ)) {
161
				$sql_where .= $champ.' = '.$val.' AND ';
188
				$sql_where .= $champ.' = '.$val.' AND ';
162
			//}
189
			//}
163
		}
190
		}
164
		$sql_where = trim($sql_where, ' AND ').' ';
191
		$sql_where = trim($sql_where, ' AND ').' ';
165
		$requete = 'DELETE FROM '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' WHERE '.$sql_where ;
192
		$requete = 'DELETE FROM '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' WHERE '.$sql_where ;
166
		trigger_error($requete, E_USER_NOTICE);
193
		trigger_error($requete, E_USER_NOTICE);
167
		$resultat = $GLOBALS['db']->query($requete);
194
		$resultat = $GLOBALS['db']->query($requete);
168
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
195
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
169
 
196
 
170
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
197
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
171
		if ($nbre_enregistrement_ajoute == 1) {
198
		if ($nbre_enregistrement_ajoute == 1) {
172
			return true;
199
			return true;
173
		} elseif ($nbre_enregistrement_ajoute == 0) {
200
		} elseif ($nbre_enregistrement_ajoute == 0) {
174
			return false;
201
			return false;
175
		}
202
		}
176
	}
203
	}
177
 
204
 
178
}
205
}
179
?>
206
?>