Subversion Repositories Applications.gtt

Rev

Rev 10 | Rev 48 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
10 jpm 1
<?php
2
 
3
abstract class aGttSql {
14 jpm 4
 
10 jpm 5
	/*** Attributs : */
6
	private $base_de_donnees = GTT_BDD_NOM;
7
	protected $table_nom;
8
	protected $correspondance;
14 jpm 9
 
10 jpm 10
	/*** Accesseurs : */
14 jpm 11
 
10 jpm 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
	}
14 jpm 39
 
10 jpm 40
	/*** Méthodes : */
14 jpm 41
 
10 jpm 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)
14 jpm 46
	{
10 jpm 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)) {
14 jpm 71
					if (!is_null($donnees->$methode())) {
10 jpm 72
				 		$enregistrement[$champ] = $donnees->$methode();
73
					}
74
				}
75
			}
76
			return $enregistrement;
77
		}
78
	}
14 jpm 79
 
10 jpm 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) {
14 jpm 90
			if (!is_numeric($val)) {
91
				$val = '"'.$val.'"';
92
			}
10 jpm 93
			$sql_attributs .= $champ.', ';
94
			$sql_valeurs .= $val.', ';
95
		}
96
		$sql_attributs = trim($sql_attributs, ', ');
97
		$sql_valeurs = trim($sql_valeurs, ', ');
98
		$requete = 	'INSERT INTO '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' '.
99
					'( '.$sql_attributs.' ) '.
100
					'VALUES '.
101
					'( '.$sql_valeurs.' )';
14 jpm 102
		trigger_error($requete, E_USER_NOTICE);
10 jpm 103
		$resultat = $GLOBALS['db']->query($requete);
14 jpm 104
 
10 jpm 105
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
106
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
107
		if ($nbre_enregistrement_ajoute == 1) {
108
			return true;
109
		} elseif ($nbre_enregistrement_ajoute == 0) {
110
			return false;
111
		}
112
	}
14 jpm 113
 
10 jpm 114
	/**
115
	* Modifier un enregistrement dans la base de données.
116
	* @return true si ok, false si aucun enregistrement effectué
117
	*/
118
	public function modifier()
119
	{
120
		$enregistrement = $this->basculerEnregistrementObjet($this);
121
		$sql_where = '';
122
		$sql_set = '';
123
		foreach($enregistrement as $champ => $val) {
14 jpm 124
			if (!is_numeric($val)) {
125
				$val = '"'.$val.'"';
126
			}
10 jpm 127
			if (preg_match('/_id_/', $champ)) {
128
				$sql_where .= $champ.' = '.$val.' AND ';
129
			} else {
130
				$sql_set .= $champ.' = '.$val.', ';
131
			}
132
		}
133
		$sql_set = trim($sql_set, ', ').' ';
134
		$sql_where = trim($sql_where, ' AND ').' ';
135
		$requete = 	'UPDATE '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' SET '.$sql_set.'WHERE '.$sql_where;
14 jpm 136
		trigger_error($requete, E_USER_NOTICE);
10 jpm 137
		$resultat = $GLOBALS['db']->query($requete);
14 jpm 138
 
10 jpm 139
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
140
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
141
		if ($nbre_enregistrement_ajoute == 1) {
142
			return true;
143
		} elseif ($nbre_enregistrement_ajoute == 0) {
144
			return false;
145
		}
146
	}
14 jpm 147
 
10 jpm 148
	/**
149
	* Supprimer un enregistrement dans la base de données.
150
	* @return true si ok, false si aucun enregistrement effectué
151
	*/
152
	public function supprimer()
153
	{
154
		$enregistrement = $this->basculerEnregistrementObjet($this);
155
		$sql_where = '';
156
		foreach($enregistrement as $champ => $val) {
14 jpm 157
			if (!is_numeric($val)) {
158
				$val = '"'.$val.'"';
159
			}
10 jpm 160
			//if (preg_match('/_id_/', $champ)) {
161
				$sql_where .= $champ.' = '.$val.' AND ';
162
			//}
163
		}
164
		$sql_where = trim($sql_where, ' AND ').' ';
165
		$requete = 'DELETE FROM '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' WHERE '.$sql_where ;
14 jpm 166
		trigger_error($requete, E_USER_NOTICE);
10 jpm 167
		$resultat = $GLOBALS['db']->query($requete);
168
		(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
169
 
170
		$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
171
		if ($nbre_enregistrement_ajoute == 1) {
172
			return true;
173
		} elseif ($nbre_enregistrement_ajoute == 0) {
174
			return false;
175
		}
176
	}
14 jpm 177
 
10 jpm 178
}
179
?>