From ec203bc1e6d9c90f4584f371c3de62f7f0327c36 Mon Sep 17 00:00:00 2001 From: Jordan Diaz Date: Thu, 3 Sep 2026 19:39:36 +0000 Subject: [PATCH] fix(core): converger las clases con core_client, que llevaban meses derivando El core viaja por dos canales que deberian ser iguales y no lo eran: core_client -> webs legacy via el CMS, y web-base -> webs de Forge. Nadie los sincroniza, asi que el mismo arreglo se hacia dos veces, por separado y con implementaciones distintas. Medida la deriva: 5 ficheros de classes/ (el resto eran plugins/, que actualizacion.php se salta a proposito). CocoDB.php, CocoDB_alias.php <- de core_client Traen los guards `if (file_exists(...))`: si falta el alias o AcaiAPI, CocoDB se declara igual con la implementacion legacy. Es degradacion real para webs viejas y aqui no la teniamos. Se pierde la declaracion de CocoDB_old, que no referencia NADIE en ninguno de los cuatro arboles. AcaiAPI.php, CocoParser.php -> ya iban a core_client desde aqui AcaiAPI resulto ser el MISMO codigo: 9252 tokens en ambos y 0 diferencias al ordenarlos. El bloque de auditoria de updatedDate estaba colocado antes o despues del if($isInsert), y como ese bloque no escribe en $record, las dos posiciones son equivalentes. CocoEmail.php <- fusion, y la unica divergencia REAL web-base mandaba SIEMPRE por el proxy y core_client SIEMPRE directo, asi que el fichero no se podia unificar sin cambiarle el comportamiento a media plataforma. Ahora el camino se elige por entorno con el mismo criterio que header.php:81 (un .acai en la raiz = local), en linea y sin depender de otro fichero. Para las webs de Forge NO cambia nada: las 131 tienen .acai salvo dos directorios abandonados de abril sin index.php ni cms/lib/classes, que no llegan a ser webs. Verificado en villagrancanaria: home, listado y ficha en 200 sin un solo error PHP, listado renderizando y hook en 54 ms. Con los dos arboles ya identicos, el paso siguiente es que el CMS legacy se nutra de web-base y dejar de mantener dos copias a mano. Co-Authored-By: Claude Opus 5 (1M context) --- cms/lib/classes/CocoDB.php | 19 ++++++++++++++----- cms/lib/classes/CocoDB_alias.php | 3 +++ cms/lib/classes/CocoEmail.php | 29 +++++++++++++++++++++++++++-- 3 files changed, 44 insertions(+), 7 deletions(-) diff --git a/cms/lib/classes/CocoDB.php b/cms/lib/classes/CocoDB.php index 551132d..bd1fe1d 100755 --- a/cms/lib/classes/CocoDB.php +++ b/cms/lib/classes/CocoDB.php @@ -1,6 +1,9 @@ $d, "createdByUserNum" => $user]; + // Anael - Cambio 14/08/2026: Claves base añadidas aquí + $keysBase = ["createdDate" => $d, "createdByUserNum" => $user, "updatedDate" => $d, "updatedByUserNum" => $user]; $keys = [ @@ -313,10 +317,13 @@ class CocoDB_old "multi" => ["dragSortOrder" => $t] ]; - $sqlBase = "$operation $prefix$table SET updatedDate='$d', updatedByUserNum='$user'"; + // Anael - Cambio 14/08/2026: Modificado SQL base, ahora solo setea num dependiendo del update. + $sqlBase = "$operation $prefix$table SET num=" . ($update ? "num" : "NULL"); + //$sqlBase = "$operation $prefix$table SET updatedDate='$d', updatedByUserNum='$user'"; if (!$update) { - $sqlBase .= ", num=NULL"; + // Anael - Cambio 14/08/2026: Ya está arriba, así que debería estar listo así. + //$sqlBase .= ", num=NULL"; foreach ($keysBase as $keyBase => $valueBase) { if (isset($record[$keyBase])) continue; @@ -1414,3 +1421,5 @@ class CocoDB_old return 0; } } + +} diff --git a/cms/lib/classes/CocoDB_alias.php b/cms/lib/classes/CocoDB_alias.php index 996bc6d..e1bc12a 100644 --- a/cms/lib/classes/CocoDB_alias.php +++ b/cms/lib/classes/CocoDB_alias.php @@ -24,6 +24,7 @@ * $result = CocoDB_alias::get('productos', 'visible=1', 'num ASC', 10); */ +if(file_exists(__DIR__ . '/AcaiAPI.php')) { require_once __DIR__ . '/AcaiAPI.php'; class CocoDB { @@ -376,3 +377,5 @@ class CocoDB { trigger_error('CocoDB_alias::getUploadsResultsFromRecord() es un método interno.', E_USER_WARNING); } } + +} diff --git a/cms/lib/classes/CocoEmail.php b/cms/lib/classes/CocoEmail.php index b872fda..a11f8f2 100755 --- a/cms/lib/classes/CocoEmail.php +++ b/cms/lib/classes/CocoEmail.php @@ -163,10 +163,35 @@ class CocoEmail { if (!$subject && $record) $subject = t($record, self::$field_subject); + // El correo sale por dos caminos segun el entorno, y esta era la unica + // divergencia real entre el core de Forge y el de las webs legacy: + // web-base mandaba SIEMPRE por el proxy y core_client SIEMPRE directo, + // asi que el fichero no se podia unificar sin cambiarle el + // comportamiento a media plataforma. Con la condicion delante, el mismo + // fichero vale para los dos canales. + // + // En local/test hace falta el proxy: el envio directo no sale de ahi. + // En produccion se mantiene el directo, que es lo que han hecho siempre + // esas webs. + // + // Mismo criterio de deteccion que header.php:81 — un `.acai` en la raiz + // de la web marca entorno local. Se comprueba en linea a proposito, sin + // depender de que otro fichero haya definido nada (ver el commit + // f81c5a2 de web-base, "el entorno se detecta en linea"). + // Desde cms/lib/classes/ la raiz esta tres niveles arriba. + $esEntornoLocal = is_file(dirname(__FILE__) . '/../../../.acai'); + + // Se devuelve array en los dos caminos. El directo no devolvia nada + // (core_client) y el del proxy si (web-base): unificar hacia el array es + // aditivo — quien ignoraba el retorno lo sigue ignorando. $result = []; foreach ($to as $destinatario) { - $resultString = self::send_email_coco_proxy($destinatario, $subject, $content); - $result[] = @json_decode($resultString,true) ?: ["success" => false, "message" => "Error decoding response", "raw_response" => $resultString]; + if ($esEntornoLocal) { + $resultString = self::send_email_coco_proxy($destinatario, $subject, $content); + $result[] = @json_decode($resultString,true) ?: ["success" => false, "message" => "Error decoding response", "raw_response" => $resultString]; + } else { + $result[] = self::send_email($destinatario, $subject, $content); + } } self::$attach_files = []; return $result;