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) <noreply@anthropic.com>
This commit is contained in:
Jordan Diaz
2026-09-03 19:39:36 +00:00
co-authored by Claude Opus 5
parent f81c5a26e1
commit ec203bc1e6
3 changed files with 44 additions and 7 deletions
+14 -5
View File
@@ -1,6 +1,9 @@
<?php <?php
require_once __DIR__ . '/CocoDB_alias.php'; if(file_exists(__DIR__ . '/CocoDB_alias.php')) {
class CocoDB_old require_once __DIR__ . '/CocoDB_alias.php';
} else {
class CocoDB
{ {
public static $tableCache = []; public static $tableCache = [];
public static $uploadColumns = []; public static $uploadColumns = [];
@@ -305,7 +308,8 @@ class CocoDB_old
$user = @Api::$user["num"] ?: 1; $user = @Api::$user["num"] ?: 1;
} }
$keysBase = ["createdDate" => $d, "createdByUserNum" => $user]; // Anael - Cambio 14/08/2026: Claves base añadidas aquí
$keysBase = ["createdDate" => $d, "createdByUserNum" => $user, "updatedDate" => $d, "updatedByUserNum" => $user];
$keys = [ $keys = [
@@ -313,10 +317,13 @@ class CocoDB_old
"multi" => ["dragSortOrder" => $t] "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) { 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) { foreach ($keysBase as $keyBase => $valueBase) {
if (isset($record[$keyBase])) continue; if (isset($record[$keyBase])) continue;
@@ -1414,3 +1421,5 @@ class CocoDB_old
return 0; return 0;
} }
} }
}
+3
View File
@@ -24,6 +24,7 @@
* $result = CocoDB_alias::get('productos', 'visible=1', 'num ASC', 10); * $result = CocoDB_alias::get('productos', 'visible=1', 'num ASC', 10);
*/ */
if(file_exists(__DIR__ . '/AcaiAPI.php')) {
require_once __DIR__ . '/AcaiAPI.php'; require_once __DIR__ . '/AcaiAPI.php';
class CocoDB { class CocoDB {
@@ -376,3 +377,5 @@ class CocoDB {
trigger_error('CocoDB_alias::getUploadsResultsFromRecord() es un método interno.', E_USER_WARNING); trigger_error('CocoDB_alias::getUploadsResultsFromRecord() es un método interno.', E_USER_WARNING);
} }
} }
}
+25
View File
@@ -163,10 +163,35 @@ class CocoEmail {
if (!$subject && $record) $subject = t($record, self::$field_subject); 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 = []; $result = [];
foreach ($to as $destinatario) { foreach ($to as $destinatario) {
if ($esEntornoLocal) {
$resultString = self::send_email_coco_proxy($destinatario, $subject, $content); $resultString = self::send_email_coco_proxy($destinatario, $subject, $content);
$result[] = @json_decode($resultString,true) ?: ["success" => false, "message" => "Error decoding response", "raw_response" => $resultString]; $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 = []; self::$attach_files = [];
return $result; return $result;