Subversion Repositories Applications.gtt

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

<?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()
        {
                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 = 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
                                                $this->$methode($donnees[$champ]);
                                        }
                                }
                        } else {
                                $Objet = new $classe;
                                foreach ($this->getCorrespondance() as $champ => $attribut) {
                                        if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {
                                                $methode = 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
                                                $Objet->$methode($donnees[$champ]);
                                        }
                                }
                                return $Objet;
                        }
                } else if ($donnees instanceof $classe) {
                        $enregistrement = array();
                        foreach ($this->getCorrespondance() as $champ => $attribut) {
                                $methode = 'get'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));
                                if (method_exists($donnees, $methode)) {
                                        if ($donnees->$methode()) {
                                                $enregistrement[$champ] = $donnees->$methode();
                                        }
                                }
                        }
                        return $enregistrement;
                }
        }
        
        /**
        * 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) {
                        $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.' )';
                                        
                $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.
        * @return true si ok, false si aucun enregistrement effectué
        */
        public function modifier()
        {
                $enregistrement = $this->basculerEnregistrementObjet($this);
                $sql_where = '';
                $sql_set = '';
                foreach($enregistrement as $champ => $val) {
                        if (preg_match('/_id_/', $champ)) {
                                $sql_where .= $champ.' = '.$val.' AND ';
                        } else {
                                $sql_set .= $champ.' = '.$val.', ';
                        }
                }
                $sql_set = trim($sql_set, ', ').' ';
                $sql_where = trim($sql_where, ' AND ').' ';
                $requete =      'UPDATE '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' SET '.$sql_set.'WHERE '.$sql_where;
                                        
                $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 (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 ;
                                        
                $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;
                }
        }
        
}
?>