Subversion Repositories Applications.gtt

Rev

Rev 14 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
10 jpm 1
<?php
2
 
3
abstract class aGttSql {
4
 
5
	/*** Attributs : */
6
	private $base_de_donnees = GTT_BDD_NOM;
7
	protected $table_nom;
8
	protected $correspondance;
9
 
10
	/*** Accesseurs : */
11
 
12
	// Base De Donnees
13
	function getBaseDeDonnees()
14
	{
15
		return $this->base_de_donnees;
16
	}
17
	function setBaseDeDonnees($bdd)
18
	{
19
		$this->base_de_donnees = $bdd;
20
	}
21
	// TableNom
22
	function getTableNom()
23
	{
24
		return $this->dao_table_nom;
25
	}
26
	function setTableNom($tn)
27
	{
28
		$this->dao_table_nom = $tn;
29
	}
30
	// Correspondance
31
	function getCorrespondance()
32
	{
33
		return $this->dao_correspondance;
34
	}
35
	function setCorrespondance($c)
36
	{
37
		$this->dao_correspondance = $c;
38
	}
39
 
40
	/*** Méthodes : */
41
 
42
    /** 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.
44
	*/
45
	protected function basculerEnregistrementObjet($donnees, $instancier = false)
46
	{
47
		$classe = get_class($this);
48
		if (is_array($donnees)) {
49
			if ($instancier) {
50
				foreach ($this->getCorrespondance() as $champ => $attribut) {
51
					if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {
52
						$methode = 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
53
						$this->$methode($donnees[$champ]);
54
					}
55
				}
56
			} else {
57
				$Objet = new $classe;
58
				foreach ($this->getCorrespondance() as $champ => $attribut) {
59
					if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {
60
						$methode = 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
61
						$Objet->$methode($donnees[$champ]);
62
					}
63
				}
64
				return $Objet;
65
			}
66
		} else if ($donnees instanceof $classe) {
67
			$enregistrement = array();
68
			foreach ($this->getCorrespondance() as $champ => $attribut) {
69
				$methode = 'get'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
70
				if (method_exists($donnees, $methode)) {
71
					if ($donnees->$methode()) {
72
				 		$enregistrement[$champ] = $donnees->$methode();
73
					}
74
				}
75
			}
76
			return $enregistrement;
77
		}
78
	}
79
 
80
	/**
81
	* Ajouter un enregistrement dans la base de données.
82
	* @return true si ok, false si aucun enregistrement effectué
83
	*/
84
	public function ajouter()
85
	{
86
		$enregistrement = $this->basculerEnregistrementObjet($this);
87
		$sql_attributs = '';
88
		$sql_valeurs = '';
89
		foreach($enregistrement as $champ => $val) {
90
			$sql_attributs .= $champ.', ';
91
			$sql_valeurs .= $val.', ';
92
		}
93
		$sql_attributs = trim($sql_attributs, ', ');
94
		$sql_valeurs = trim($sql_valeurs, ', ');
95
		$requete = 	'INSERT INTO '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' '.
96
					'( '.$sql_attributs.' ) '.
97
					'VALUES '.
98
					'( '.$sql_valeurs.' )';
99
 
100
		$resultat = $GLOBALS['db']->query($requete);
101
 
102
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
103
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
104
		if ($nbre_enregistrement_ajoute == 1) {
105
			return true;
106
		} elseif ($nbre_enregistrement_ajoute == 0) {
107
			return false;
108
		}
109
	}
110
 
111
	/**
112
	* Modifier un enregistrement dans la base de données.
113
	* @return true si ok, false si aucun enregistrement effectué
114
	*/
115
	public function modifier()
116
	{
117
		$enregistrement = $this->basculerEnregistrementObjet($this);
118
		$sql_where = '';
119
		$sql_set = '';
120
		foreach($enregistrement as $champ => $val) {
121
			if (preg_match('/_id_/', $champ)) {
122
				$sql_where .= $champ.' = '.$val.' AND ';
123
			} else {
124
				$sql_set .= $champ.' = '.$val.', ';
125
			}
126
		}
127
		$sql_set = trim($sql_set, ', ').' ';
128
		$sql_where = trim($sql_where, ' AND ').' ';
129
		$requete = 	'UPDATE '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' SET '.$sql_set.'WHERE '.$sql_where;
130
 
131
		$resultat = $GLOBALS['db']->query($requete);
132
 
133
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
134
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
135
		if ($nbre_enregistrement_ajoute == 1) {
136
			return true;
137
		} elseif ($nbre_enregistrement_ajoute == 0) {
138
			return false;
139
		}
140
	}
141
 
142
	/**
143
	* Supprimer un enregistrement dans la base de données.
144
	* @return true si ok, false si aucun enregistrement effectué
145
	*/
146
	public function supprimer()
147
	{
148
		$enregistrement = $this->basculerEnregistrementObjet($this);
149
		$sql_where = '';
150
		foreach($enregistrement as $champ => $val) {
151
			//if (preg_match('/_id_/', $champ)) {
152
				$sql_where .= $champ.' = '.$val.' AND ';
153
			//}
154
		}
155
		$sql_where = trim($sql_where, ' AND ').' ';
156
		$requete = 'DELETE FROM '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' WHERE '.$sql_where ;
157
 
158
		$resultat = $GLOBALS['db']->query($requete);
159
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
160
 
161
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
162
		if ($nbre_enregistrement_ajoute == 1) {
163
			return true;
164
		} elseif ($nbre_enregistrement_ajoute == 0) {
165
			return false;
166
		}
167
	}
168
 
169
}
170
?>