Subversion Repositories Applications.papyrus

Rev

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

<?php
/**
 * Classe controlleur, coeur d'une application, c'est normalement la seule classe d'une application
 * qui devrait être appelée de l'extérieur.
 */
abstract class Controleur {

        private $registre;
        private $gestionnaire_erreur;
        
        /**
         * Constructeur par défaut
         */
     final public function __construct() {      
        
        $this->registre = Registre::getInstance() ;
        $this->registre->set('chemin_config',CHEMIN_APPLI.'configuration'.DIRECTORY_SEPARATOR);
        $this->registre->set('base_chemin_modele',DOSSIER_MODELES.DIRECTORY_SEPARATOR);
        $this->registre->set('base_chemin_squelette',DOSSIER_SQUELETTES.DIRECTORY_SEPARATOR);
        $this->registre->set('base_chemin_controleur',DOSSIER_CONTROLEURS.DIRECTORY_SEPARATOR);
        
        $this->registre->set('bdd_type',BDD_PROTOCOLE) ;
        $this->registre->set('bdd_hote',BDD_SERVEUR) ;
        $this->registre->set('bdd_nom',BDD_NOM_PRINCIPALE) ;
        $this->registre->set('bdd_utilisateur',BDD_UTILISATEUR) ;
        $this->registre->set('bdd_pass',BDD_MOT_DE_PASSE) ;
        
        $this->gestionnaire_erreur = GestionnaireErreur::getInstance();
        
    }
    
    /**
     * Charge un modele donné et le rend disponible sous la forme $this->nom_modele
     * @param $nom_modele le nom du modèle à charger
     */
     final protected function chargerModele($nom_modele) {
        

        $chemin_modele = ($this->registre->get('base_chemin_modele')).$nom_modele.'.php';
        
        if(!file_exists($chemin_modele)) {
                return false ;  
        }
        
        include_once($chemin_modele) ;
        
        if(!class_exists($nom_modele)) {                
                return false ;
        }
        
        $this->$nom_modele = new $nom_modele ;          
    }
    
    /**
     * Fonction prenant en paramètre le nom d'un squelette et un tableau associatif de données, en extrait les variables, charge le squelette
     * et cree une variable de classe contenant les deux combinés.
     * @param String le nom du squelette
     * @param Array un tableau associatif contenant les variables a injecter dans la vue
     * 
     */
     final protected function chargerVue($nom_squelette,$donnees) {
        
        $chemin_squelette = ($this->registre->get('base_chemin_squelette')).$nom_squelette.'.tpl.html';
        
        if(!file_exists($chemin_squelette)) {
                return false ;  
        }
        
        $donnees['base_url'] = $this->registre->get('base_url_application') ;
        
        // on extrait les variables du tableau de données      
        extract($donnees);
        
        // et on enclenche la bufferisation de sortie
        ob_start();
        
        // si les tags courts sont désactivés
        if ((bool) @ini_get('short_open_tag') === FALSE)
                {
                        // on remplace les tags par la syntaxe classique avec echo
                        echo eval('?>'.preg_replace("/;*\s*\?>/", "; ?>", str_replace('<?=', '<?php echo ', file_get_contents($chemin_squelette))));
                } else {
                        // sinon, on se contente d'inclure le squelette
                        include($chemin_squelette); 
                }
                
                // on récupère le buffer et on le vide        
                $buffer = ob_get_contents();
                @ob_end_clean();
                
                // enfin on renvoie le contenu
                $this->$nom_squelette = $buffer;
                
                return $nom_squelette;
    }
}
?>