Subversion Repositories Applications.papyrus

Rev

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

<?php
/**
 * 
 * Fichier contenant les fonctions d'initialisation de code igniter
 * permettant de l'utiliser en combinaison avec Papyrus.
 * 
 */

/**
 * Initialise la configuration de code igniter pour une application
 * donnée. Normalement, cette fonction ne doit pas être appelée directement
 * @param string le nom de l'application à initialiser
 */
function initialiserCodeIgniter($nom_appli) {
                        
        error_reporting(E_ALL);
        
        $system_folder = PAP_CHEMIN_RACINE.'papyrus/bibliotheque/system';

        $application_folder = GEN_CHEMIN_APPLICATION.$nom_appli;

        if (strpos($system_folder, '/') === FALSE) {
                if (function_exists('realpath') AND @realpath(dirname(__FILE__)) !== FALSE) {
                        $system_folder = realpath(dirname(__FILE__)).'/'.$system_folder;
                }
        } else {
                // Swap directory separators to Unix style for consistency
                $system_folder = str_replace("\\", "/", $system_folder); 
        }
        
        define('EXT', '.'.pathinfo(__FILE__, PATHINFO_EXTENSION));
        define('FCPATH', __FILE__);
        define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));
        define('BASEPATH', $system_folder.'/');
        
        if (is_dir($application_folder)) {
                define('APPPATH', $application_folder.'/');
        } else {
                if ($application_folder == '') {
                        $application_folder = 'application';
                }
                define('APPPATH', BASEPATH.$application_folder.'/');
        }
        
        $GLOBALS[$nom_appli] = array('ci' => true) ;
 }

/**
 * Fonction intermédiaire entre Papyrus et code igniter,
 * appelant une application et une fonction donnée
 * @param string le nom de l'application à éxécuter
 * @param string le nom de la fonction à éxécuter (optionnel)
 * @return string le code html à afficher généré par l'application
 */ 
function executerCodeIgniter($nom_appli,$nom_fonction = '') {
        
        // si l'application n'a pas encore été initialisée 
        if(!isset($GLOBALS[$nom_appli]['ci']) || $GLOBALS[$nom_appli]['ci'] != true) {
                // on appelle la fonction d'initialisation de code igniter
                initialiserCodeIgniter($nom_appli) ;
        } 
        
        // code igniter fonctionnant grâce à l'url, faute de mieux, on ajoute les bons
        // paramètres au tableau superglobal GET       
        $_GET['c'] = $nom_appli ;
        if($nom_fonction != '') {
                $_GET['m'] = $nom_fonction ;
        }
        
        // N'ayant aucun moyen de récupérer directement le html généré par code igniter
        // on le stockera dans une globale qui sera remplie par le controleur appelé.
        $GLOBALS['retour'] = '' ;
        
        // enfin on appelle le fichier principal de code igniter
        // TODO: trouver comment faire pour l'appeller plusieurs fois dans une page
        // sans que ça pose de problèmes
        require_once BASEPATH.'codeigniter/CodeIgniter'.EXT;
        
        // on renvoie la variable globale remplie par le code
        return $GLOBALS['retour'] ;
}
 
?>