From fe7e9ee2e602272361d389113952a74803a69b7f Mon Sep 17 00:00:00 2001 From: Jordan Diaz Date: Wed, 22 Jul 2026 09:40:13 +0000 Subject: [PATCH] fix: no inyectar campos de auditoria en tablas raw (ignoreSchema) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit buildSetClause añadia siempre updatedDate/updatedByUserNum (y en inserts createdDate/createdByUserNum), pero las tablas raw que se escriben con ignoreSchema (aux_plg_config, uploads, traducciones...) no tienen esas columnas y el INSERT/UPDATE moria con Unknown column — p.ej. guardar la config de un plugin desde el dashboard fallaba con 'No se pudo guardar la configuracion en la base de datos'. Se replica la semantica del CocoDB legacy: prepareBaseSQL solo añadia auditoria y defaults cuando habia schema cargado. --- cms/lib/classes/AcaiAPI.php | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/cms/lib/classes/AcaiAPI.php b/cms/lib/classes/AcaiAPI.php index 5251654..f96bea2 100644 --- a/cms/lib/classes/AcaiAPI.php +++ b/cms/lib/classes/AcaiAPI.php @@ -1337,9 +1337,15 @@ class AcaiAPI $params = []; $uploadFields = []; - // ── Audit fields — always written, not overridable by the caller ── - $setParts[] = '`updatedDate` = ?'; $params[] = $now; - $setParts[] = '`updatedByUserNum` = ?'; $params[] = $user; + // ── Audit fields — not overridable by the caller ───────────────── + // Solo con esquema: las tablas raw (ignoreSchema — uploads, + // traducciones, aux_*...) no tienen columnas de auditoria y el + // INSERT/UPDATE reventaria con "Unknown column". Misma semantica que + // CocoDB legacy (prepareBaseSQL solo añadia estos campos con schema). + if (!$ignoreSchema) { + $setParts[] = '`updatedDate` = ?'; $params[] = $now; + $setParts[] = '`updatedByUserNum` = ?'; $params[] = $user; + } // ── INSERT-only defaults ────────────────────────────────────────── if ($isInsert) { @@ -1351,11 +1357,11 @@ class AcaiAPI $setParts[] = '`num` = NULL'; } - if (!isset($record['createdDate'])) { + if (!$ignoreSchema && !isset($record['createdDate'])) { $setParts[] = '`createdDate` = ?'; $params[] = $now; } - if (!isset($record['createdByUserNum'])) { + if (!$ignoreSchema && !isset($record['createdByUserNum'])) { $setParts[] = '`createdByUserNum` = ?'; $params[] = $user; }