diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php index 9c13bd5e4affb8cb17d6e5e7c42cc428509f1d4f..bcb2d5eccd82c0e7402fdd02af881bfc2af138d6 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 03ac2a2d1fde3fb20b2ee7e55548da1614bd5ae3..d1eae41603555072de0559069d384a39e4615a4f 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 328fe98987713954ebc003d4264fba82366ef2e0..26f3312dbb40eab39f7753ff19c544b84fd43cc4 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 5b383e31d46a4ecf97b91e46ff7fd9990deb2035..5d056a659e62de3f91448db78b3c54970a01d513 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 cd0099386886315d69f03eff4c5ef922cf19effe..04e064c6b44fb60c16f275db4f35fad1f239240c 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 dd739c2c0c2cb0b1d16845528024e84d028f8c91..cd95f6fe880343daed46a7e09a0ac93bd835aba0 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();