Add timer/scheduler to ticket automation rules
Adds optional delay_days + delay_condition (no_activity) to ticket rules. When a ticket has no activity for X days, timed rules automatically apply actions (e.g., escalate priority to urgent). Checked on each ticket list load. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
13
db.php
13
db.php
@@ -680,6 +680,8 @@ function initDatabase(): void {
|
||||
"ALTER TABLE tickets ADD COLUMN to_email VARCHAR(255) DEFAULT '' AFTER from_name",
|
||||
"ALTER TABLE tickets ADD COLUMN bcc TEXT DEFAULT '' AFTER cc",
|
||||
"ALTER TABLE ticket_messages ADD COLUMN attachments TEXT DEFAULT '' AFTER zammad_article_id",
|
||||
"ALTER TABLE ticket_rules ADD COLUMN delay_days INT DEFAULT 0 AFTER auto_close_days",
|
||||
"ALTER TABLE ticket_rules ADD COLUMN delay_condition VARCHAR(50) DEFAULT '' AFTER delay_days",
|
||||
];
|
||||
foreach ($alters as $sql) {
|
||||
try { $db->query($sql); } catch (\Throwable $e) { /* sarake on jo olemassa / jo ajettu */ }
|
||||
@@ -1657,6 +1659,8 @@ function dbLoadTicketRules(string $companyId): array {
|
||||
foreach ($rules as &$r) {
|
||||
$r['priority'] = (int)$r['priority'];
|
||||
$r['auto_close_days'] = (int)$r['auto_close_days'];
|
||||
$r['delay_days'] = (int)($r['delay_days'] ?? 0);
|
||||
$r['delay_condition'] = $r['delay_condition'] ?? '';
|
||||
$r['enabled'] = !empty($r['enabled']);
|
||||
unset($r['company_id']);
|
||||
}
|
||||
@@ -1665,14 +1669,15 @@ function dbLoadTicketRules(string $companyId): array {
|
||||
|
||||
function dbSaveTicketRule(string $companyId, array $rule): void {
|
||||
_dbExecute("
|
||||
INSERT INTO ticket_rules (id, company_id, name, from_contains, subject_contains, to_contains, priority, tag, assign_to, status_set, type_set, set_priority, set_tags, auto_close_days, enabled)
|
||||
VALUES (:id, :company_id, :name, :from_contains, :subject_contains, :to_contains, :priority, :tag, :assign_to, :status_set, :type_set, :set_priority, :set_tags, :auto_close_days, :enabled)
|
||||
INSERT INTO ticket_rules (id, company_id, name, from_contains, subject_contains, to_contains, priority, tag, assign_to, status_set, type_set, set_priority, set_tags, auto_close_days, delay_days, delay_condition, enabled)
|
||||
VALUES (:id, :company_id, :name, :from_contains, :subject_contains, :to_contains, :priority, :tag, :assign_to, :status_set, :type_set, :set_priority, :set_tags, :auto_close_days, :delay_days, :delay_condition, :enabled)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
name = VALUES(name), from_contains = VALUES(from_contains), subject_contains = VALUES(subject_contains),
|
||||
to_contains = VALUES(to_contains), priority = VALUES(priority),
|
||||
tag = VALUES(tag), assign_to = VALUES(assign_to), status_set = VALUES(status_set),
|
||||
type_set = VALUES(type_set), set_priority = VALUES(set_priority), set_tags = VALUES(set_tags),
|
||||
auto_close_days = VALUES(auto_close_days), enabled = VALUES(enabled)
|
||||
auto_close_days = VALUES(auto_close_days), delay_days = VALUES(delay_days),
|
||||
delay_condition = VALUES(delay_condition), enabled = VALUES(enabled)
|
||||
", [
|
||||
'id' => $rule['id'],
|
||||
'company_id' => $companyId,
|
||||
@@ -1688,6 +1693,8 @@ function dbSaveTicketRule(string $companyId, array $rule): void {
|
||||
'set_priority' => $rule['set_priority'] ?? '',
|
||||
'set_tags' => $rule['set_tags'] ?? '',
|
||||
'auto_close_days' => $rule['auto_close_days'] ?? 0,
|
||||
'delay_days' => $rule['delay_days'] ?? 0,
|
||||
'delay_condition' => $rule['delay_condition'] ?? '',
|
||||
'enabled' => !empty($rule['enabled']) ? 1 : 0,
|
||||
]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user