Subversion Repositories Applications.gtt

Compare Revisions

Ignore whitespace Rev 63 → Rev 64

/trunk/bibliotheque/metier/aGttSql.class.php
New file
0,0 → 1,206
<?php
 
abstract class aGttSql {
 
/*** Attributs : */
private $base_de_donnees = GTT_BDD_NOM;
protected $table_nom;
protected $correspondance;
 
/*** Accesseurs : */
 
// Base De Donnees
function getBaseDeDonnees()
{
return $this->base_de_donnees;
}
function setBaseDeDonnees($bdd)
{
$this->base_de_donnees = $bdd;
}
// TableNom
function getTableNom()
{
return $this->dao_table_nom;
}
function setTableNom($tn)
{
$this->dao_table_nom = $tn;
}
// Correspondance
function getCorrespondance($champ = null)
{
if (!is_null($champ)) {
return $this->dao_correspondance[$champ];
}
return $this->dao_correspondance;
}
function setCorrespondance($c)
{
$this->dao_correspondance = $c;
}
 
/*** Méthodes : */
 
/** Instancie un objet utilisateur à partir d'un enregistrement issu de la base de donnée ou l'inverse.
* Cette métohode permet de s'abstraire des noms des champs présent dans la base de donnée.
*/
protected function basculerEnregistrementObjet($donnees, $instancier = false)
{
$classe = get_class($this);
if (is_array($donnees)) {
if ($instancier) {
foreach ($this->getCorrespondance() as $champ => $attribut) {
if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {
$methode = $this->donnerMethodeSetAvecAttribut($attribut);
$this->$methode($donnees[$champ]);
}
}
} else {
$Objet = new $classe;
foreach ($this->getCorrespondance() as $champ => $attribut) {
if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {
$methode = $this->donnerMethodeSetAvecAttribut($attribut);
$Objet->$methode($donnees[$champ]);
}
}
return $Objet;
}
} else if ($donnees instanceof $classe) {
$enregistrement = array();
foreach ($this->getCorrespondance() as $champ => $attribut) {
$methode = $this->donnerMethodeGetAvecAttribut($attribut);
if (method_exists($donnees, $methode)) {
if (!is_null($donnees->$methode())) {
$enregistrement[$champ] = $donnees->$methode();
}
}
}
return $enregistrement;
}
}
private function donnerMethodeGetAvecAttribut($attribut)
{
return 'get'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
}
private function donnerMethodeGetAvecChamp($champ)
{
return 'get'.str_replace(' ', '', ucwords(str_replace('_', ' ', $this->getCorrespondance($champ))));
}
private function donnerMethodeSetAvecAttribut($attribut)
{
return 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
}
private function donnerMethodeSetAvecChamp($champ)
{
return 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $this->getCorrespondance($champ))));
}
 
/**
* Ajouter un enregistrement dans la base de données.
* @return true si ok, false si aucun enregistrement effectué
*/
public function ajouter()
{
$enregistrement = $this->basculerEnregistrementObjet($this);
$sql_attributs = '';
$sql_valeurs = '';
foreach($enregistrement as $champ => $val) {
if (!is_numeric($val)) {
$val = '"'.$val.'"';
}
$sql_attributs .= $champ.', ';
$sql_valeurs .= $val.', ';
}
$sql_attributs = trim($sql_attributs, ', ');
$sql_valeurs = trim($sql_valeurs, ', ');
$requete = 'INSERT INTO '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' '.
'( '.$sql_attributs.' ) '.
'VALUES '.
'( '.$sql_valeurs.' )';
trigger_error($requete, E_USER_NOTICE);
$resultat = $GLOBALS['db']->query($requete);
 
(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
if ($nbre_enregistrement_ajoute == 1) {
return true;
} elseif ($nbre_enregistrement_ajoute == 0) {
return false;
}
}
 
/**
* Modifier un enregistrement dans la base de données.
* @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.
* @return true si ok, false si aucun enregistrement effectué.
*/
public function modifier($Ancien = null)
{
$enregistrement = $this->basculerEnregistrementObjet($this);
$sql_where = '';
$sql_set = '';
foreach($enregistrement as $champ => $val) {
if (!is_numeric($val)) {
$val = '"'.$val.'"';
}
$sql_set .= $champ.' = '.$val.', ';
$classe = get_class($this);
if ($Ancien instanceof $classe) {
$methode = $this->donnerMethodeGetAvecChamp($champ);
$val = $Ancien->$methode();
if (!is_numeric($val)) {
$val = '"'.$val.'"';
}
}
if (preg_match('/_id_/', $champ)) {
$sql_where .= $champ.' = '.$val.' AND ';
}
}
$sql_set = trim($sql_set, ', ').' ';
$sql_where = trim($sql_where, ' AND ').' ';
$requete = 'UPDATE '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' SET '.$sql_set.'WHERE '.$sql_where;
trigger_error($requete, E_USER_NOTICE);
$resultat = $GLOBALS['db']->query($requete);
 
(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();
if ($nbre_enregistrement_ajoute == 1) {
return true;
} elseif ($nbre_enregistrement_ajoute == 0) {
return false;
}
}
 
/**
* Supprimer un enregistrement dans la base de données.
* @return true si ok, false si aucun enregistrement effectué
*/
public function supprimer()
{
$enregistrement = $this->basculerEnregistrementObjet($this);
$sql_where = '';
foreach($enregistrement as $champ => $val) {
if (!is_numeric($val)) {
$val = '"'.$val.'"';
}
//if (preg_match('/_id_/', $champ)) {
$sql_where .= $champ.' = '.$val.' AND ';
//}
}
$sql_where = trim($sql_where, ' AND ').' ';
$requete = 'DELETE FROM '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' WHERE '.$sql_where ;
trigger_error($requete, E_USER_NOTICE);
$resultat = $GLOBALS['db']->query($requete);
(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
 
$nbre_enregistrement_suppr = $GLOBALS['db']->affectedRows();
if ($nbre_enregistrement_suppr == 1) {
return true;
} elseif ($nbre_enregistrement_suppr == 0) {
return false;
}
}
 
}
?>