Korjaa automaattisäännöt ja viestien duplikaattiesto

- Sääntöjen kenttänimet: DB käyttää type_set/status_set mutta
  API lähetti set_type/set_status → nyt dbSaveTicketRule hyväksyy
  molemmat ja matching lukee oikeat DB-kenttänimet
- Migraatio: täytä fetched_message_ids olemassaolevien tikettien
  message_id:illä niin poistetut viestit eivät tule takaisin

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 14:52:22 +02:00
parent 386194659e
commit df2d6d2d83
2 changed files with 29 additions and 4 deletions

View File

@@ -3040,8 +3040,8 @@ switch ($action) {
}
}
if ($match) {
if (!empty($rule['set_status'])) $ticket['status'] = $rule['set_status'];
if (!empty($rule['set_type'])) $ticket['type'] = $rule['set_type'];
if (!empty($rule['status_set'])) $ticket['status'] = $rule['status_set'];
if (!empty($rule['type_set'])) $ticket['type'] = $rule['type_set'];
if (!empty($rule['set_priority'])) $ticket['priority'] = $rule['set_priority'];
if (!empty($rule['set_tags'])) {
$ruleTags = array_map('trim', explode(',', $rule['set_tags']));

29
db.php
View File

@@ -704,6 +704,31 @@ function initDatabase(): void {
}
}
} catch (\Throwable $e) { /* ohitetaan */ }
// Migraatio: täytä fetched_message_ids olemassaolevien tikettien message_id:illä
// (ajetaan vain kerran — kun taulu on tyhjä)
try {
$cnt = $db->query("SELECT COUNT(*) AS cnt FROM fetched_message_ids")->fetch_assoc();
if ((int)($cnt['cnt'] ?? 0) === 0) {
// Tikettien omat message_id:t
$db->query("INSERT IGNORE INTO fetched_message_ids (company_id, message_id)
SELECT company_id, message_id FROM tickets WHERE message_id IS NOT NULL AND message_id != ''");
// Tikettien viestien message_id:t (JSON messages-kentästä)
$rows = $db->query("SELECT company_id, messages FROM tickets WHERE messages IS NOT NULL AND messages != ''");
while ($row = $rows->fetch_assoc()) {
$msgs = json_decode($row['messages'], true);
if (is_array($msgs)) {
foreach ($msgs as $m) {
if (!empty($m['message_id'])) {
$cid = $db->real_escape_string($row['company_id']);
$mid = $db->real_escape_string($m['message_id']);
$db->query("INSERT IGNORE INTO fetched_message_ids (company_id, message_id) VALUES ('$cid', '$mid')");
}
}
}
}
}
} catch (\Throwable $e) { /* ohitetaan */ }
}
// ==================== YRITYKSET ====================
@@ -1591,8 +1616,8 @@ function dbSaveTicketRule(string $companyId, array $rule): void {
'priority' => $rule['priority'] ?? 0,
'tag' => $rule['tag'] ?? '',
'assign_to' => $rule['assign_to'] ?? '',
'status_set' => $rule['status_set'] ?? '',
'type_set' => $rule['type_set'] ?? '',
'status_set' => $rule['set_status'] ?? $rule['status_set'] ?? '',
'type_set' => $rule['set_type'] ?? $rule['type_set'] ?? '',
'set_priority' => $rule['set_priority'] ?? '',
'set_tags' => $rule['set_tags'] ?? '',
'auto_close_days' => $rule['auto_close_days'] ?? 0,