fix(core): altas rellenan fechas que faltan y el error de insert/update trae el mensaje de MySQL
This commit is contained in:
@@ -102,7 +102,7 @@ class AcaiAPI
|
|||||||
|
|
||||||
$result = $db->execute($sql, $params ? $params : null);
|
$result = $db->execute($sql, $params ? $params : null);
|
||||||
if ($result === false) {
|
if ($result === false) {
|
||||||
self::error(['error' => "Error al insertar en `$table`"]);
|
self::error(['error' => "Error al insertar en `$table`" . self::dbErrorSuffix($db)]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,7 +214,7 @@ class AcaiAPI
|
|||||||
|
|
||||||
$result = $db->execute($sql, $allParams ? $allParams : null);
|
$result = $db->execute($sql, $allParams ? $allParams : null);
|
||||||
if ($result === false) {
|
if ($result === false) {
|
||||||
self::error(['error' => "Error al actualizar `$table`"]);
|
self::error(['error' => "Error al actualizar `$table`" . self::dbErrorSuffix($db)]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$count++;
|
$count++;
|
||||||
@@ -1438,6 +1438,20 @@ class AcaiAPI
|
|||||||
$setParts[] = '`dragSortOrder` = ?';
|
$setParts[] = '`dragSortOrder` = ?';
|
||||||
$params[] = time();
|
$params[] = time();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Campos `date` que NO vienen en el alta -> fecha actual, como el
|
||||||
|
// Admin clasico (save.php: "default date fields to current date").
|
||||||
|
// El bloque de campos de usuario, abajo, solo cubre la fecha que
|
||||||
|
// llega VACIA; si la clave falta, una columna `datetime NOT NULL`
|
||||||
|
// sin DEFAULT (cms_vacantes.fecha_publicacion) tumbaba el INSERT.
|
||||||
|
if (!$ignoreSchema && is_array($schema)) {
|
||||||
|
foreach ($schema as $field => $def) {
|
||||||
|
if (array_key_exists($field, $record)) continue;
|
||||||
|
if (!is_array($def) || ($def['type'] ?? '') !== 'date') continue;
|
||||||
|
$setParts[] = "`$field` = ?";
|
||||||
|
$params[] = $now;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── User-supplied fields ─────────────────────────────────────────
|
// ── User-supplied fields ─────────────────────────────────────────
|
||||||
@@ -1640,6 +1654,20 @@ class AcaiAPI
|
|||||||
// ERROR HANDLING
|
// ERROR HANDLING
|
||||||
// ═══════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ": <mensaje de MySQL>" del ultimo execute() fallido, o "" si no lo hay.
|
||||||
|
* Sin el, un alta que MySQL rechaza (p.ej. "Field 'x' doesn't have a
|
||||||
|
* default value") llegaba como "Error al insertar" a secas y el agente
|
||||||
|
* reintentaba a ciegas. isset(): una web con Db.php personalizado (sin
|
||||||
|
* lastError) sigue funcionando, solo que sin el detalle.
|
||||||
|
*/
|
||||||
|
private static function dbErrorSuffix($db)
|
||||||
|
{
|
||||||
|
return (is_object($db) && isset($db->lastError) && $db->lastError !== '')
|
||||||
|
? ': ' . $db->lastError
|
||||||
|
: '';
|
||||||
|
}
|
||||||
|
|
||||||
static function error(array $data = [])
|
static function error(array $data = [])
|
||||||
{
|
{
|
||||||
if (class_exists('API') && class_exists('ApiError')) {
|
if (class_exists('API') && class_exists('ApiError')) {
|
||||||
|
|||||||
@@ -8,6 +8,10 @@ class Db {
|
|||||||
|
|
||||||
private static $instance = false; // Db Class Instance
|
private static $instance = false; // Db Class Instance
|
||||||
|
|
||||||
|
/** Mensaje del ultimo execute() fallido (null si fue bien). AcaiAPI lo
|
||||||
|
* devuelve en su error para que el caller sepa POR QUE fallo. */
|
||||||
|
public $lastError = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param host: DB Host
|
* @param host: DB Host
|
||||||
* @param user: DB user
|
* @param user: DB user
|
||||||
@@ -69,12 +73,14 @@ class Db {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function execute($sql, $params = null) {
|
public function execute($sql, $params = null) {
|
||||||
|
$this->lastError = null;
|
||||||
if ($params) {
|
if ($params) {
|
||||||
$stmt = $this->link->prepare($sql);
|
$stmt = $this->link->prepare($sql);
|
||||||
try {
|
try {
|
||||||
$stmt->execute($params);
|
$stmt->execute($params);
|
||||||
}
|
}
|
||||||
catch(Exception $e) {
|
catch(Exception $e) {
|
||||||
|
$this->lastError = $e->getMessage();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user