00001 <?php
00012 class Aplicacion{
00013
00014 private $dirIu;
00015 private $claseDefecto;
00016 private $metodoDefecto;
00017
00018 public function __construct($dirIu, $claseDefecto, $metodoDefecto){
00019 $this->dirIu = $dirIu;
00020 $this->claseDefecto = $claseDefecto;
00021 $this->metodoDefecto = $metodoDefecto;
00022 }
00027 public function ejecutar(){
00028
00029
00030 if(isset($_REQUEST['PaxAccion'])){
00031 $accion = $_REQUEST['PaxAccion'];
00032 $trozos = explode(".",$accion);
00033 if (sizeof($trozos) > 1){
00034 if (!include_once($this->dirIu.$trozos[0].".php")) throw new ExcepcionAplicacionClaseIuInexistente($trozos[0]);
00035 eval('$iuActivo = new '.$trozos[0].'();');
00036 $_SESSION['iuActivo'] = $iuActivo;
00037 $metodo = $trozos[1];
00038 }
00039 else{
00040 if (isset($_SESSION['iuActivo']))
00041 $iuActivo = $_SESSION['iuActivo'];
00042 else{
00043 if (!include_once($this->dirIu.$this->claseDefecto.".php")) throw new ExcepcionAplicacionClaseIuInexistente(IU_CLASE_DEFECTO);
00044 eval('$iuActivo = new '.$this->claseDefecto.'();');
00045 $_SESSION['iuActivo'] = $iuActivo;
00046 }
00047 $metodo = $accion;
00048 }
00049 }
00050 else{
00051 if (isset($_SESSION['iuActivo']))
00052 $iuActivo = $_SESSION['iuActivo'];
00053 else{
00054 if (!include_once($this->dirIu.$this->claseDefecto.".php")) throw new ExcepcionAplicacionClaseIuInexistente(IU_CLASE_DEFECTO);
00055 eval('$iuActivo = new '.$this->claseDefecto.'();');
00056 $_SESSION['iuActivo'] = $iuActivo;
00057 }
00058 $metodo = $this->metodoDefecto;
00059 }
00060 if (!method_exists($iuActivo, $metodo)) throw new ExcepcionAplicacionMetodoInexistente(get_class($iuActivo),$metodo);
00061 call_user_func(array(&$iuActivo, $metodo));
00062 }
00063 public function gestionarError($num, $texto, $archivo, $linea){
00064 $mensaje = "Error nº: $num - $texto\nEn el archivo $archivo, línea $linea";
00065 Registro::anotar("Error interno: $mensaje");
00066 }
00067 }
00068
00069
00070 class ExcepcionAplicacionClaseIuInexistente extends Excepcion{
00072 public function __construct($clase){
00073 $titulo = "No se pudo instanciar la clase de interfaz '$clase'";
00074 $texto = "La aplicación no pudo crear un objeto de la clase de interfaz de usuario '$clase'.";
00075 $solucion = "Compruebe los parámetros de la acción llamada. Sólo pueden instanciarse clases de interfaz de usuario.";
00076 parent::__construct($titulo,$texto,$solucion);
00077 }
00078 }
00079 class ExcepcionAplicacionMetodoInexistente extends Excepcion{
00081 public function __construct($clase, $metodo){
00082 $titulo = "El método solicitado no existe.";
00083 $texto = "Ha llamado a un método ($metodo) que no existe en la clase $clase.";
00084 $solucionProgramador = "Compruebe los parámetros de la acción llamada.";
00085 parent::__construct($titulo,$texto,$solucionProgramador);
00086 }
00087 }
00088
00089 return true;
00090 ?>