Subversion Repositories eFlore/Applications.del

Rev

Rev 723 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php 
/**
 * Gestion BDD permet l'appel à l'objet BDD du framework,
 * gère les noms de table en fonction du schéma de la table 
 * ainsi que la limite SQL en fonction de l'objet Navigation

 * @category php 5.2
 * @package del
 * @author Grégoire Duché <gregoire@tela-botanica.org>
 * @copyright Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
 * @license     http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
 * @license     http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
 * @version     $Id: Bdd.php 403 2012-02-22 14:35:20Z gduche $
 */
class GestionBdd {
        
        private $bdd;
        private $schemaBdd;
        private $navigation;
        
        /**
         * Constructeur de la classe GestionBdd
         * @param Navigation $navigation l'objet navigation issu du Conteneur, et contenant les informations de départ et limite 
         * @param String $schemaBdd (optionnel) le schéma de la base issu du fichier de config 
         * @param Bdd $bdd (optionnel) un objet Bdd pour la connection à la base de données 
         * */
        public function __construct($navigation, $schemaBdd = null, $bdd = null) {
                if ($navigation == null) {
                        $message = 'L\'objet Navigation est nécessaire pour configurer l\'objet GestionBdd';
                        $code = RestServeur::HTTP_CODE_ERREUR;
                        throw new Exception($message, $code);
                } else {
                        $this->navigation = $navigation;
                        $this->schemaBdd = $schemaBdd;
                        if ($bdd == null) {
                                $this->bdd = new Bdd();
                        } else {
                                $this->bdd = $bdd;
                        }
                }
        }
        
        /**
        * Créer la chaine de limite de requête en fonction des paramètres donnés
        * */
        public function getLimitSql() {
                return ' LIMIT '.$this->navigation->getDepart().', '.$this->navigation->getLimite();
        }
        
        /**
         * Récupérer l'objet Bdd ou le créer s'il n'existe pas
         * @return Bdd l'objet Bdd
         * */
        public function getBdd() {
                if (!isset($this->bdd)){
                        $this->bdd = new Bdd();
                }
                return $this->bdd;
        }
        
        /** Formater un nom de table avec le schéma de la base de données, s'il existe
         *  @param String $table le nom de la table
         *  @param String $as (optionnel) l'alias de la table 
         *  @return String la chaine de caractère sous la forme "schema.nomtable as nt"
         * */
        public function formaterTable($table, $as = null) {
                $chaineTable = $table;
                if ($this->schemaBdd != null) {
                        $chaineTable = $this->schemaBdd.'.'.$table;
                }
                if ($as != null && $as != '') {
                        $chaineTable .= ' as '.$as;
                }
                return $chaineTable.' ';
        }
        
        /** Formater des noms de table avec le schéma de la base de données, s'il existe
        *  @param Array $tables un tableau à deux dimensions contenant le nom et l'alias de la table 
        *       Ex : Array("nom" => "as", "table" => "") 
        *  @return String la chaine de caractère sous la forme "schema.nomtable as nt, schema.nomtable2 as nt2"
        * */
        public function formaterTables($tables) {
                $tablesFormatees = array();
                foreach ($tables as $nom => $as) {
                        $tablesFormatees[] = $this->formaterTable($nom, $as);
                }
                
                return implode(',', $tablesFormatees);
        }
}
?>