From f81c5a26e13284dddb6b1e70f2d0534904f123d2 Mon Sep 17 00:00:00 2001 From: Jordan Diaz Date: Tue, 1 Sep 2026 19:47:20 +0000 Subject: [PATCH] fix(header): el entorno se detecta en linea, sin depender de otro fichero MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Segundo intento. El primero (92f092d, revertido en 9a4906e) metia una funcion `esEntornoLocal()` en `funciones.php` y la llamaba desde `header.php`. Tumbo villagrancanaria.com con un Fatal error nada mas desplegarse. POR QUE FALLO, QUE ES LO QUE HAY QUE RECORDAR **Cada web puede tener PERSONALIZADO cualquier fichero del core, y el sync lo respeta.** villagrancanaria tenia su propio `funciones.php` (38 KB frente a los 17 KB del nucleo: carga de modulos por AJAX, `dame_registros` en vez de `CocoDB::get`, globales propias). Al sincronizar recibio el `header.php` nuevo —que no estaba personalizado— y conservo su `funciones.php` viejo. Resultado: `Call to undefined function esEntornoLocal()`, fatal, pagina entera caida. Y lo hizo por el camino que no probe: las paginas de builder van por `slug.php` -> `builder_saas/controlador.php` -> `header.php`, que NO pasa por `funciones.php`. Yo verifique solo el camino de `index.php`. Conclusion de diseño: **no se puede añadir una funcion a un fichero del core y llamarla desde otro**. No hay garantia de que los dos lleguen a la misma web, y cuando no llegan el fallo es FATAL, no degradado. Una linea duplicada es preferible a una dependencia que el sync puede no entregar. QUE HACE AHORA `$esEntornoLocal = is_file(dirname(__FILE__) . "/.acai")`, en linea, sin funcion compartida ni includes. La señal es la presencia del `.acai`: Forge lo escribe en cada copia local y NUNCA viaja a produccion (esta en el `exclude` del manifest de push-core y fuera de la allowlist del sync per-web). Se detecta LOCAL explicitamente y todo lo demas es produccion: si la señal fallara, lo seguro es respetar `pagina_publicada`. local -> siempre se ve prod + publicada -> se ve prod + sin publicar + ?pruebas -> se ve, con el cartel rojo prod + sin publicar + visitante -> mantenimiento Sustituye a un `if (1)` hardcodeado que desactivaba la comprobacion entera, y al `header.php.prod` que se habia empezado a mantener y que ADEMAS estaba MAL: al comentar el `if(1){...}else{`, el cuerpo del else pasaba a ejecutarse siempre y un visitante de una web PUBLICADA recibia `die(mantenimiento)`. Nadie lo vio porque un `.prod` solo corre en produccion. VERIFICADO sobre webs reales y por LOS DOS CAMINOS, incluido el del builder: builder + local -> 403238 bytes, la web builder + prod publicada -> 403238 bytes, la web index.php + local -> 78104 bytes, la web index.php + prod sin publicar-> 1943 bytes, mantenimiento Cero fatal errors. Sintaxis con el PHP 8.3 de Plesk, el del hosting. OJO AL DESPLEGAR: esto hace que la pagina de mantenimiento empiece a funcionar de verdad. Hoy el `if (1)` la desactiva en todas las webs, produccion incluida, asi que cualquier web con `pagina_publicada = 0` se esta viendo entera y pasara a mostrar mantenimiento. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_019gLX53DZJXGPFCf6DJTPWQ --- header.php | 49 ++++++++++++++++++++----------- header.php.prod | 78 ------------------------------------------------- 2 files changed, 32 insertions(+), 95 deletions(-) delete mode 100755 header.php.prod diff --git a/header.php b/header.php index de3f6d9..e33370e 100755 --- a/header.php +++ b/header.php @@ -56,23 +56,38 @@ $config_header = array( 'alternate' => @$alternate ); -if (1){ - - if (@$customCode) echo modulo('custom-header',$config_header); else echo tpl('cabecera',$config_header); -}else{ - if (!isset($_SESSION["pruebas"])){ - die(tpl('mantenimiento',$config_header)); - - }else{ - if (@$customCode) echo modulo('custom-header',$config_header); else echo tpl('cabecera',$config_header); - if (isset($_SESSION["pruebas"])){ - if ($configuracionRecord["pagina_publicada"]==0){ - ?> -
SITIO EN PRUEBAS
- siempre se ve (ahi no existe "publicada" +// ni ?pruebas: son conceptos de produccion) +// prod + publicada -> se ve +// prod + sin publicar + ?pruebas -> se ve, con el cartel rojo +// prod + sin publicar + visitante -> mantenimiento +$esEntornoLocal = is_file(dirname(__FILE__) . "/.acai"); + +if ($esEntornoLocal || @$configuracionRecord["pagina_publicada"] || isset($_SESSION["pruebas"])) { + if (@$customCode) echo modulo('custom-header',$config_header); else echo tpl('cabecera',$config_header); + if (!$esEntornoLocal && isset($_SESSION["pruebas"]) && @$configuracionRecord["pagina_publicada"] == 0) { + ?> +
SITIO EN PRUEBAS
+ diff --git a/header.php.prod b/header.php.prod deleted file mode 100755 index ddd7050..0000000 --- a/header.php.prod +++ /dev/null @@ -1,78 +0,0 @@ - true]); -} - -$idiomas = dame_idiomas(); - -$idiomaSeleccionado = "Español"; - -foreach ($idiomas as $idioma): - - if ($idioma["valor"]=="/".@$_REQUEST["idioma"]) $idiomaSeleccionado=$idioma["idioma"]; -endforeach; - -$apartadoCesta = CocoDB::get("apartados", "controlador='cesta.php'", null, 1, ["ignoreSchema" => true]); -$apartadoCesta = @$apartadoCesta[0]; - -$apartadoFavoritos = CocoDB::get("apartados", "controlador='favoritos.php'", null, 1, ["ignoreSchema" => true]); -$apartadoFavoritos = @$apartadoFavoritos[0]; - -$apartadoLogin = CocoDB::get("apartados", "controlador='login.php'", null, 1, ["ignoreSchema" => true]); -$apartadoLogin = @$apartadoLogin[0]; - -$apartadoRegistro = CocoDB::get("apartados", "controlador='registro.php'", null, 1, ["ignoreSchema" => true]); -$apartadoRegistro = @$apartadoRegistro[0]; - -$alternate = dame_alternates($_SERVER["REQUEST_URI"]); - -$config_header = array( - 'titulo_de_pagina' => $configuracionRecord["titulo_de_pagina"], - 'categorias' => @$categorias, - 'pagina_publicada' => $configuracionRecord["pagina_publicada"], - 'current' => $current, - 'portada' => @$portada, - 'index' => @$index, - 'configuracionRecord' => $configuracionRecord, - 'configuracionTienda' => $configuracionTienda, - 'meta_descripcion' => $configuracionRecord["metatag_descripcion"], - 'meta_palabras' => @$configuracionRecord["metatag_palabras"], - 'otros_metas' => @$otros_metas, - 'color_base' => @$color_base, - 'categorias' => @$categorias, - 'idiomas' => @$idiomas, - 'idiomaSeleccionado'=> @$idiomaSeleccionado, - 'apartadoCesta' => @$apartadoCesta, - 'apartadoFavoritos' => @$apartadoFavoritos, - 'apartadoLogin' => @$apartadoLogin, - 'apartadoRegistro' => @$apartadoRegistro, - 'sitebuilder' => @$apartado["plantilla_sitebuilder"], - 'alternate' => @$alternate - ); - -#if (1){ - -# if (@$customCode) echo modulo('custom-header',$config_header); else echo tpl('cabecera',$config_header); -#}else{ - if (!isset($_SESSION["pruebas"])){ - die(tpl('mantenimiento',$config_header)); - - }else{ - if (@$customCode) echo modulo('custom-header',$config_header); else echo tpl('cabecera',$config_header); - if (isset($_SESSION["pruebas"])){ - if ($configuracionRecord["pagina_publicada"]==0){ - ?> -
SITIO EN PRUEBAS
-