Subversion Repositories eFlore/Applications.cel

Rev

Rev 1157 | Blame | Last modification | View Log | RSS feed

<?php
/**
* Script principal d'appel aux script de jrest par ligne de commande.
* Pour le moment ne supporte pas correctement les méthodes ayant des paramètres.
*/


/**
* La fonction __autoload() charge dynamiquement les classes trouvées dans le code.
*
* Cette fonction est appelée par php5 quand il trouve une instanciation de classe dans le code.
*
*@param string le nom de la classe appelée.
*@return void le fichier contenant la classe doit être inclu par la fonction.
*/
function __autoload($classe) {
        if (class_exists($classe)) {
                return null;
        }

        $chemins = array('', 'scripts/', 'lib/');
        foreach ($chemins as $chemin) {
                $chemin = $chemin.$classe.'.php';
                if (file_exists($chemin)) {
                        require_once $chemin;
                }
        }
}

try {
        if (php_sapi_name() == 'cli') {
                        if ($_SERVER['argc'] < 2){
                           $message = "Erreur: vous n'avez pas indiqué le nom du script à appeler.";
                           throw new Exception($message, 'ERREUR');
                        }

                        // suppression du premier paramètre qui est le nom du script
                        array_shift($argv);

                        $nom_script = array_shift($argv);

                        if ($_SERVER['argc'] < 2){
                           $message = "Erreur: vous n'avez pas indiqué le nom de la méthode";
                           throw new Exception($message, 'ERREUR');
                        }

                        $nom_methode = array_shift($argv);

                        $params = $argv;
                        $_SERVER['SERVER_NAME'] = 'localhost';

                        $config =  parse_ini_file('jrest.ini.php', TRUE);

                        $script = new $nom_script($config);
                        if (!is_callable(array($script, $nom_methode))) {
                                $message = "Erreur: la méthode '$nom_methode' du script '$nom_script' n'existe pas ou n'est pas accessible";
                                throw new Exception($message, 'ERREUR');
                        }
                        $script->$nom_methode($params);
        } else {
                $message = "Erreur: ce fichier est destiné a être appelé en ligne de commande.";
                throw new Exception($message, 'ERREUR');
        }
} catch (Exception $e) {
        echo $e->getCode().' : '.$e->getMessage();
}
exit;
?>