ok, thx. I upload here a plugin anyway if someone want it. Note that it is just a simple one, you have to change the names of the new entries manually before install the plugin (and after create the forms)
plugin.php
<?php
return array(
'id' => 'fixdeptcdata',
'name' => 'Fix Dept Cdata Plugin',
'description' => 'Fixes the synchronization of Department-type custom fields (procedencia, destinatario) in ost_ticket__cdata on ticket creation.',
'version' => '1.0',
'author' => 'Carlos Gonz lez',
'plugin' => 'fix_dept_cdata.php:FixDeptCdataPlugin'
);
fix_dept_cdata.php
<?php
// /include/plugins/fix_dept_cdata/fix_dept_cdata.php
require_once(INCLUDE_DIR . "class.plugin.php");
require_once(INCLUDE_DIR . "class.signal.php");
require_once(INCLUDE_DIR . "class.dept.php");
error_log("FixDeptCdataPlugin: Archivo cargado");
Signal::connect('ticket.created', function($ticket) {
error_log("FixDeptCdataPlugin: onTicketCreated ejecutado para ticket #" . $ticket->getId());
$fields_to_fix = ['procedencia', 'destinatario'];
$form_id = 2; // "Ticket Details", ajusta si es diferente
foreach ($fields_to_fix as $field_name) {
$sql = "SELECT v.value, v.value_id
FROM " . TABLE_PREFIX . "form_entry e
JOIN " . TABLE_PREFIX . "form_entry_values v ON e.id = v.entry_id
JOIN " . TABLE_PREFIX . "form_field f ON v.field_id = f.id
WHERE e.object_id = " . db_input($ticket->getId()) . "
AND e.object_type = 'T'
AND e.form_id = " . db_input($form_id) . "
AND f.name = " . db_input($field_name);
$result = db_query($sql);
$row = db_fetch_array($result);
// Manejar la inconsistencia: revisar value y value_id
$dept_id = null;
if ($row) {
if ($row['value_id'] && is_numeric($row['value_id'])) {
$dept_id = $row['value_id'];
error_log("FixDeptCdataPlugin: Usando value_id para " . $field_name . ": " . $dept_id);
} elseif ($row['value'] && is_numeric($row['value'])) {
$dept_id = $row['value'];
error_log("FixDeptCdataPlugin: Usando value para " . $field_name . ": " . $dept_id);
} else {
error_log("FixDeptCdataPlugin: Valor no numérico para " . $field_name . ": value=" . $row['value'] . ", value_id=" . $row['value_id']);
continue;
}
} else {
error_log("FixDeptCdataPlugin: No se encontró el campo " . $field_name . " para ticket #" . $ticket->getId());
continue;
}
if ($dept_id) {
$dept = Dept::lookup($dept_id); // Cambiado de Department a Dept
if ($dept) {
$dept_name = $dept->getName();
$cdata_sql = "UPDATE " . TABLE_PREFIX . "ticket__cdata
SET " . $field_name . " = " . db_input($dept_name) . "
WHERE ticket_id = " . db_input($ticket->getId());
if (db_query($cdata_sql)) {
error_log("FixDeptCdataPlugin: Actualizado ost_ticket__cdata para ticket #" . $ticket->getId() . " con " . $field_name . " = " . $dept_name);
} else {
error_log("FixDeptCdataPlugin: Error al actualizar ost_ticket__cdata para " . $field_name . ": " . db_error());
}
} else {
error_log("FixDeptCdataPlugin: Departamento no encontrado para ID " . $dept_id . " en campo " . $field_name);
}
}
}
});
class FixDeptCdataPlugin extends Plugin {
function bootstrap() {
error_log("FixDeptCdataPlugin: bootstrap() ejecutado");
}
}
error_log("FixDeptCdataPlugin: Fin del archivo");