From fafc884e7e923b1a969f13c4d6300dff31d4d8dc Mon Sep 17 00:00:00 2001 From: Peter Rotich <peter@osticket.com> Date: Tue, 19 Aug 2014 08:37:50 +0000 Subject: [PATCH] Remove internal ticket states from user space Reserve 'archived' state for automation --- include/ajax.tickets.php | 34 +++++++------------ include/class.list.php | 5 ++- include/class.ticket.php | 4 +++ .../staff/templates/status-options.tmpl.php | 10 ------ include/staff/ticket-view.inc.php | 29 +++++++--------- include/staff/tickets.inc.php | 3 ++ 6 files changed, 36 insertions(+), 49 deletions(-) diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php index 9c13bd5e4..bcb2d5ecc 100644 --- a/include/ajax.tickets.php +++ b/include/ajax.tickets.php @@ -723,13 +723,6 @@ class TicketsAjaxAPI extends AjaxController { $state = 'closed'; $info['title'] = __('Close'); break; - case 'archive': - if (!$thisstaff->canCloseTickets()) - Http::response(403, 'Access denied'); - - $state = 'archived'; - $info['title'] = __('Archive'); - break; case 'delete': if (!$thisstaff->canDeleteTickets()) Http::response(403, 'Access denied'); @@ -744,7 +737,8 @@ class TicketsAjaxAPI extends AjaxController { including any associated attachments.'))); break; default: - Http::response(404, 'Unknown status/action'); + $info['warn'] = sprintf('%s %s', + __('Unknown or invalid'), __('status')); } $info['action'] = sprintf('#tickets/%d/status/%s', $ticket->getId(), $status); @@ -764,6 +758,7 @@ class TicketsAjaxAPI extends AjaxController { || !$ticket->checkStaffAccess($thisstaff)) Http::response(404, 'Unknown ticket #'); + $errors = $info = array(); if (!($status= TicketStatus::lookup($_REQUEST['status_id']))) $errors['status_id'] = sprintf('%s %s', __('Unknown or invalid'), __('status')); @@ -784,13 +779,15 @@ class TicketsAjaxAPI extends AjaxController { permission to %s.'), __('resolve/close tickets')); break; - case 'archived': case 'deleted': if (!$thisstaff->canDeleteTickets()) $errors['err'] = sprintf(__('You do not have permission to %s.'), __('archive/delete tickets')); break; + default: + $errors['err'] = sprintf('%s %s', + __('Unknown or invalid'), __('status')); } } @@ -838,16 +835,6 @@ class TicketsAjaxAPI extends AjaxController { __('Close'), __('Tickets')) ); break; - case 'archive': - if (!$thisstaff->canCloseTickets()) - Http::response(403, 'Access denied'); - - $state = 'archived'; - $info = array( - 'title' => sprintf('%s %s', - __('Archive'), __('Tickets')), - ); - break; case 'delete': if (!$thisstaff->canDeleteTickets()) Http::response(403, 'Access denied'); @@ -864,7 +851,8 @@ class TicketsAjaxAPI extends AjaxController { including any associated attachments.'))); break; default: - Http::response(404, 'Unknown status/action'); + $info['warn'] = sprintf('%s %s', + __('Unknown or invalid'), __('status')); } if ($_REQUEST['count']) @@ -878,7 +866,7 @@ class TicketsAjaxAPI extends AjaxController { function setTicketsStatus($state) { global $thisstaff, $ost; - $errors = array(); + $errors = $info = array(); if (!$thisstaff || !$thisstaff->canManageTickets()) $errors['err']=__('You do not have permission to mass manage tickets. Contact admin for such access'); elseif (!$_REQUEST['tids'] || !count($_REQUEST['tids'])) @@ -904,13 +892,15 @@ class TicketsAjaxAPI extends AjaxController { permission to %s.'), __('resolve/close tickets')); break; - case 'archived': case 'deleted': if (!$thisstaff->canDeleteTickets()) $errors['err'] = sprintf(__('You do not have permission to %s.'), __('archive/delete tickets')); break; + default: + $errors['err'] = sprintf('%s %s', + __('Unknown or invalid'), __('status')); } } diff --git a/include/class.list.php b/include/class.list.php index 03ac2a2d1..d1eae4160 100644 --- a/include/class.list.php +++ b/include/class.list.php @@ -667,6 +667,8 @@ class TicketStatusList extends CustomListHandler { $filters['mode__hasbit'] = TicketStatus::ENABLED; if ($criteria['states'] && is_array($criteria['states'])) $filters['state__in'] = $criteria['states']; + else + $filters['state__isnull'] = false; $items = TicketStatus::objects(); if ($filters) @@ -692,6 +694,7 @@ class TicketStatusList extends CustomListHandler { function addItem($vars, &$errors) { $item = TicketStatus::create(array( + 'mode' => 1, 'flags' => 0, 'sort' => $vars['sort'], 'name' => $vars['value'], @@ -819,7 +822,7 @@ class TicketStatus extends VerySimpleModel implements CustomListItem { } function isEnableable() { - return $this->hasProperties(); + return ($this->getState()); } function isDisableable() { diff --git a/include/class.ticket.php b/include/class.ticket.php index 328fe9898..26f3312db 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -845,6 +845,7 @@ class Ticket { $ecb = null; switch($status->getState()) { + case 'resolved': case 'closed': $sql.=', closed=NOW(), duedate=NULL '; if ($thisstaff) @@ -866,6 +867,9 @@ class Ticket { }; } break; + default: + return false; + } $sql.=' WHERE ticket_id='.db_input($this->getId()); diff --git a/include/staff/templates/status-options.tmpl.php b/include/staff/templates/status-options.tmpl.php index 5b383e31d..5d056a659 100644 --- a/include/staff/templates/status-options.tmpl.php +++ b/include/staff/templates/status-options.tmpl.php @@ -1,15 +1,5 @@ <?php $actions= array( - 'delete' => array( - 'action' => __('Delete'), - 'icon' => 'icon-trash', - 'states' => array('deleted'), - ), - 'archive' => array( - 'action' => __('Archive'), - 'icon' => 'icon-archive', - 'states' => array('archived') - ), 'close' => array( 'action' => __('Close'), 'icon' => 'icon-repeat', diff --git a/include/staff/ticket-view.inc.php b/include/staff/ticket-view.inc.php index cd0099386..04e064c6b 100644 --- a/include/staff/ticket-view.inc.php +++ b/include/staff/ticket-view.inc.php @@ -104,14 +104,10 @@ if($ticket->isOverdue()) <?php } if($thisstaff->canDeleteTickets()) { - if (!$ticket->isArchived()) { ?> + ?> <li><a class="ticket-action" href="#tickets/<?php - echo $ticket->getId(); ?>/status/archive"><i class="icon-archive"></i> <?php - echo __('Archive Ticket'); ?></a></li> - <?php - } ?> - <li><a class="ticket-action" href="#tickets/<?php - echo $ticket->getId(); ?>/status/delete"><i class="icon-trash"></i> <?php + echo $ticket->getId(); ?>/status/delete" + data-href="tickets.php"><i class="icon-trash"></i> <?php echo __('Delete Ticket'); ?></a></li> <?php } @@ -632,17 +628,19 @@ $tcount+= $ticket->getNumNotes(); $statusId = $info['reply_status_id'] ?: $ticket->getStatusId(); $states = array('open', 'resolved'); if ($thisstaff->canCloseTickets()) - $states = array_merge($states, - array('closed', 'archived')); + $states = array_merge($states, array('closed')); foreach (TicketStatusList::getStatuses( array('states' => $states)) as $s) { if (!$s->isEnabled()) continue; - echo sprintf('<option value="%d" %s>%s</option>', + $selected = ($statusId == $s->getId()); + echo sprintf('<option value="%d" %s>%s%s</option>', $s->getId(), - ($statusId == $s->getId()) + $selected ? 'selected="selected"' : '', - $s->getName() + $s->getName(), + $selected + ? (' ('.__('current').')') : '' ); } ?> @@ -724,17 +722,16 @@ $tcount+= $ticket->getNumNotes(); $statusId = $info['note_status_id'] ?: $ticket->getStatusId(); $states = array('open', 'resolved'); if ($thisstaff->canCloseTickets()) - $states = array_merge($states, - array('closed', 'archived')); + $states = array_merge($states, array('closed')); foreach (TicketStatusList::getStatuses( array('states' => $states)) as $s) { if (!$s->isEnabled()) continue; - $selected = $statusId == $s->getID(); + $selected = $statusId == $s->getId(); echo sprintf('<option value="%d" %s>%s%s</option>', $s->getId(), $selected ? 'selected="selected"' : '', $s->getName(), - $selected ? ' '.__('(current)') : '' + $selected ? (' ('.__('current').')') : '' ); } ?> diff --git a/include/staff/tickets.inc.php b/include/staff/tickets.inc.php index dd739c2c0..cd95f6fe8 100644 --- a/include/staff/tickets.inc.php +++ b/include/staff/tickets.inc.php @@ -335,6 +335,9 @@ if ($results) { title="Reload"><i class="icon-refresh"></i></a></h2> </td> <td width="80%" class="right_align"> + <a id="tickets-delete" class="action-button tickets-action" + href="#tickets/status/delete"><i + class="icon-trash"></i> <?php echo __('Delete'); ?></a> <?php if ($res && $results && $thisstaff->canManageTickets()) { echo TicketStatus::options(); -- GitLab