0 ? substr($_SERVER["REQUEST_URI"], $start, $pos - $start) : substr($_SERVER["REQUEST_URI"], $start); $dirs = explode("/", $ruta); $_app = $dirs[1]; $_vista = substr($ruta, strlen($_app) + 2); // permite tener un app por defecto sin explicitarlo en la url if(!$_vista) { // si termina con .php es una vista if(str_endswith($ruta, array('.php', '.phps', '.html'))) { $_vista = $_app; $_app = ConfBase::DefaultApp(); } else { if($ruta == "/" || !$ruta) $_vista = 'index.php'; else $_vista = 'error.php'; } } // soporta urls con subdirectorios que no especifican un archivo // ejp: /aplicacion/subdir1/subdir2/ // TODO: cambiar este array por una variable configurable ejp: Conf::VistasPermitidas() que retorne array('.ext1', '.ext2', '.ext3') // estas mismas extensiones deben estar en el htaccess elseif(!str_endswith($ruta, array('.php', '.phps', '.html'))) { $_vista .= str_endswith($_vista, '/') ? '' : '/'; $_vista .= 'index.php'; } if(!$_app) $_app = ConfBase::DefaultApp(); if(!$_vista) $_vista = 'index.php'; $conf = ConfBase::AppDir().'/'.$_app.'/conf.php'; if(!file_exists($conf)) Pagina::redirect404($_app.' requiere un archivo de configuración.'); require_once $conf; $sesion = new Sesion(); $app = new PrmApp($sesion); $app->LoadByGlosa($_app); $vista = new Vista($sesion); $vista->LoadByAppVista($_app, $_vista); $campos_html = explode(',', $vista->fields['campos_html']); $no_filtrar = explode(',', $vista->fields['no_filtrar']); // ignorar variables de servidor $no_filtrar[] = 'PHPSESSID'; $no_filtrar[] = '__utma'; $no_filtrar[] = '__utmc'; $no_filtrar[] = '__utmz'; /* La configuracion no se puede modificar, por lo que es necesario crear una nueva cada vez */ /* foreach($_REQUEST as $clave => $valor) { if(in_array($clave, $no_filtrar)) { continue; } $valor = recursivePurify($clave, $valor, in_array($clave, $campos_html)); if(isset($_GET[$clave])) $_GET[$clave] = $valor; if(isset($_POST[$clave])) $_POST[$clave] = $valor; if(isset($_REQUEST[$clave])) $_REQUEST[$clave] = $valor; } */ // extract($_GET, EXTR_OVERWRITE); // extract($_POST, EXTR_OVERWRITE); foreach($_GET as $clave => $valor) { ${$clave} = $valor; } foreach($_POST as $clave => $valor){ ${$clave} = $valor; } $pagina = new Pagina($sesion, $vista); $archivo_vista = getVistaPath($_vista); $pagina->setLayout(Conf::DefaultLayout()); if(!is_file($archivo_vista)) { $pagina->redirect404($_vista.' no es una vista válida.'); } $psy_contenido = ''; ob_start(); ob_implicit_flush(0); try { require($archivo_vista); } catch (Exception $e) { ob_end_clean(); throw $e; } $psy_contenido = ob_get_clean(); $pagina->setContenido($psy_contenido); $ruta_layout = $pagina->getRutaLayout(); if(file_exists($ruta_layout) && $pagina->useLayout) include $ruta_layout; else $pagina->PrintContenido(); ?>