diff --git a/include/class.cron.php b/include/class.cron.php index 257926e253fe1662b0630548b62e483bffe20e48..3aa0357c198ce61e25a22dae6bc9ea982954877e 100644 --- a/include/class.cron.php +++ b/include/class.cron.php @@ -35,6 +35,11 @@ class Cron { if($ost) $ost->purgeLogs(); } + function PurgeDrafts() { + require_once(INCLUDE_DIR.'class.draft.php'); + Draft::cleanup(); + } + function CleanOrphanedFiles() { require_once(INCLUDE_DIR.'class.file.php'); AttachmentFile::deleteOrphans(); @@ -49,6 +54,7 @@ class Cron { self::TicketMonitor(); self::PurgeLogs(); self::CleanOrphanedFiles(); + self::PurgeDrafts(); } } ?> diff --git a/include/class.draft.php b/include/class.draft.php index 6796428b6d0a51ea0c5777331190c2e942e987b8..a4942ecb4bc5611fd9fa4572a3c0e1d022f893b0 100644 --- a/include/class.draft.php +++ b/include/class.draft.php @@ -149,6 +149,14 @@ class Draft { $sql .= ' AND staff_id='.db_input($staff_id); return (!db_query($sql) || !db_affected_rows()); } + + static function cleanup() { + // Keep client drafts for two weeks (14 days) + $sql = 'DELETE FROM '.DRAFT_TABLE + ." WHERE `namespace` LIKE 'ticket.client.%' + AND datediff(now(), updated) > 14"; + return db_query($sql); + } } ?> diff --git a/include/class.ticket.php b/include/class.ticket.php index c652f8f3fed5a8fde306ce5b2e5a6e37c83e517b..692c6e53ee0315691871461b499020baa1d1636c 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -728,6 +728,7 @@ class Ticket { $this->reload(); $this->logEvent('closed'); + $this->deleteDrafts(); return true; } @@ -1676,9 +1677,15 @@ class Ticket { foreach (DynamicFormEntry::forTicket($this->getId()) as $form) $form->delete(); + $this->deleteDrafts(); + return true; } + function deleteDrafts() { + Draft::deleteForNamespace('ticket.%.' . $this->getId()); + } + function update($vars, &$errors) { global $cfg, $thisstaff; diff --git a/scp/tickets.php b/scp/tickets.php index 1058b80d95f67fed03e39c191292f76e5c8b2774..c55c4f27f8fe97709b61997277a5a65de7e5d5d8 100644 --- a/scp/tickets.php +++ b/scp/tickets.php @@ -70,13 +70,13 @@ if($_POST && !$errors): $msg='Reply posted successfully'; $ticket->reload(); - // Cleanup drafts for the ticket. If not closed, only clean - // for this staff. Else clean all drafts for the ticket. - Draft::deleteForNamespace('ticket.%.' . $ticket->getId(), - $ticket->isClosed() ? false : $thisstaff->getId()); - if($ticket->isClosed() && $wasOpen) $ticket=null; + else + // Still open -- cleanup response draft for this user + Draft::deleteForNamespace( + 'ticket.response.' . $ticket->getId(), + $thisstaff->getId()); } elseif(!$errors['err']) { $errors['err']='Unable to post the reply. Correct the errors below and try again!'; @@ -174,17 +174,13 @@ if($_POST && !$errors): $wasOpen = ($ticket->isOpen()); if(($note=$ticket->postNote($vars, $errors, $thisstaff))) { - // Cleanup drafts for the ticket. If not closed, only clean - // note drafts for this staff. Else clean all drafts for the ticket. - Draft::deleteForNamespace( - sprintf('ticket.%s.%d', - $ticket->isClosed() ? '%' : 'note', - $ticket->getId()), - $ticket->isOpen() ? $thisstaff->getId() : false); - $msg='Internal note posted successfully'; if($wasOpen && $ticket->isClosed()) $ticket = null; //Going back to main listing. + else + // Ticket is still open -- clear draft for the note + Draft::deleteForNamespace('ticket.note.'.$ticket->getId(), + $thisstaff->getId()); } else {