diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php index bcb2d5eccd82c0e7402fdd02af881bfc2af138d6..84e939550b93de56efea6f194a7ef2a3a07e2c7c 100644 --- a/include/ajax.tickets.php +++ b/include/ajax.tickets.php @@ -711,24 +711,20 @@ class TicketsAjaxAPI extends AjaxController { case 'open': case 'reopen': $state = 'open'; - $info['title'] = __('Reopen'); break; case 'resolve': $state = 'resolved'; - $info['title'] = __('Resolve'); break; case 'close': if (!$thisstaff->canCloseTickets()) Http::response(403, 'Access denied'); $state = 'closed'; - $info['title'] = __('Close'); break; case 'delete': if (!$thisstaff->canDeleteTickets()) Http::response(403, 'Access denied'); $state = 'deleted'; $info = array( - 'title' => __('Delete'), 'warn' => sprintf(__('Are you sure you want to DELETE %s?'), __('this ticket')), //TODO: remove message below once we ship data retention plug @@ -741,8 +737,12 @@ class TicketsAjaxAPI extends AjaxController { __('Unknown or invalid'), __('status')); } + $verb = TicketStateField::getVerb($state); + $info['action'] = sprintf('#tickets/%d/status/%s', $ticket->getId(), $status); - $info['title'] .= sprintf(' %s #%s', __('Ticket'), $ticket->getNumber()); + $info['title'] = sprintf('%s %s #%s', + $verb ?: $status, + __('Ticket'), $ticket->getNumber()); $info['status_id'] = $_REQUEST['status_id'] ?: $ticket->getStatusId(); return self::_setStatus($state, $info); @@ -802,6 +802,7 @@ class TicketsAjaxAPI extends AjaxController { $info['errors'] = $errors; return self::_setStatus($state, $info); } + function changeTicketsStatus($status, $id=0) { global $thisstaff, $cfg; @@ -814,26 +815,14 @@ class TicketsAjaxAPI extends AjaxController { case 'open': case 'reopen': $state = 'open'; - $info = array( - 'title' => sprintf('%s %s', - __('Reopen'), __('Tickets')) - ); break; case 'resolve': $state = 'resolved'; - $info = array( - 'title' => sprintf('%s %s', - __('Resolve'), __('Tickets')) - ); break; case 'close': if (!$thisstaff->canCloseTickets()) Http::response(403, 'Access denied'); $state = 'closed'; - $info = array( - 'title' => sprintf('%s %s', - __('Close'), __('Tickets')) - ); break; case 'delete': if (!$thisstaff->canDeleteTickets()) @@ -841,8 +830,6 @@ class TicketsAjaxAPI extends AjaxController { $state = 'deleted'; $info = array( - 'title' => sprintf('%s %s', - __('Delete'), __('Tickets')), 'warn' => sprintf(__('Are you sure you want to DELETE %s?'), _N('selected ticket', 'selected tickets', $_REQUEST['count'])), //TODO: remove message below once we ship data retention plug @@ -855,8 +842,13 @@ class TicketsAjaxAPI extends AjaxController { __('Unknown or invalid'), __('status')); } + $info['title'] = sprintf('%s %s', + TicketStateField::getVerb($state), + __('Tickets')); + if ($_REQUEST['count']) - $info['title'] .= sprintf(' — %d selected', $_REQUEST['count']); + $info['title'] .= sprintf(' — %d %s', + $_REQUEST['count'], __('selected')); $info['status_id'] = $id; diff --git a/include/class.forms.php b/include/class.forms.php index 4cc88c1a6b29fa7e6dffa4bdba982273edb00b82..c5c93866e9fa35b9404de09a3cf54dc2fe095628 100644 --- a/include/class.forms.php +++ b/include/class.forms.php @@ -1026,13 +1026,29 @@ FormField::addFieldTypes(/*trans*/ 'Dynamic Fields', function() { class TicketStateField extends ChoiceField { static $_states = array( - 'open' => /* trans */ 'Open', - 'resolved' => /* trans */ 'Resolved', - 'closed' => /* trans */ 'Closed'); + 'open' => array( + 'name' => /* trans */ 'Open', + 'verb' => /* trans */ 'Open' + ), + 'resolved' => array( + 'name' => /* trans */ 'Resolved', + 'verb' => /* trans */ 'Resolve' + ), + 'closed' => array( + 'name' => /* trans */ 'Closed', + 'verb' => /* trans */ 'Close' + ) + ); // Private states static $_privatestates = array( - 'archived' => /* trans */ 'Archived', - 'deleted' => /* trans */ 'Deleted' + 'archived' => array( + 'name' => /* trans */ 'Archived', + 'verb' => /* trans */ 'Archive' + ), + 'deleted' => array( + 'name' => /* trans */ 'Deleted', + 'verb' => /* trans */ 'Delete' + ) ); function hasIdValue() { @@ -1048,7 +1064,9 @@ class TicketStateField extends ChoiceField { if (!isset($_choices)) { // Translate and cache the choices - $_choices = array_map('__', static::$_states); + foreach (static::$_states as $k => $v) + $_choices[$k] = __($v['name']); + $this->ht['default'] = ''; } @@ -1061,10 +1079,10 @@ class TicketStateField extends ChoiceField { $state = key($state); if (isset(static::$_states[$state])) - return __(static::$_states[$state]); + return __(static::$_states[$state]['name']); if (isset(static::$_privatestates[$state])) - return __(static::$_privatestates[$state]); + return __(static::$_privatestates[$state]['name']); return $state; } @@ -1078,6 +1096,15 @@ class TicketStateField extends ChoiceField { )), ); } + + static function getVerb($state) { + + if (isset(static::$_states[$state])) + return __(static::$_states[$state]['verb']); + + if (isset(static::$_privatestates[$state])) + return __(static::$_privatestates[$state]['verb']); + } } FormField::addFieldTypes('Dynamic Fields', function() { return array( diff --git a/include/class.list.php b/include/class.list.php index a88040d8b57fd1ce770bf4e63bdab432338d1447..31a3dd51938e8f56fd841021b7021d72a1ec3291 100644 --- a/include/class.list.php +++ b/include/class.list.php @@ -759,6 +759,7 @@ class TicketStatus extends VerySimpleModel implements CustomListItem { var $_form; var $_config; var $_settings; + var $_properties; const ENABLED = 0x0001; const INTERNAL = 0x0002; // Forbid deletion or name and status change. @@ -875,14 +876,25 @@ class TicketStatus extends VerySimpleModel implements CustomListItem { return $this->get('sort'); } + private function getProperties() { + + if (!isset($this->_properties)) { + $this->_properties = $this->_config->get('properties'); + if (is_string($this->_properties)) + $this->_properties = JsonDataParser::parse($this->_properties); + elseif (!$this->_properties) + $this->_properties = array(); + } + + return $this->_properties; + } + function getConfiguration() { if (!$this->_settings) { - $this->_settings = $this->_config->get('properties'); - if (is_string($this->_settings)) - $this->_settings = JsonDataParser::parse($this->_settings); - elseif (!$this->_settings) - $this->_settings = array(); + $this->_settings = $this->getProperties(); + if (!$this->_settings) + $this->_settings = array(); if ($this->getConfigurationForm()) { foreach ($this->getConfigurationForm()->getFields() as $f) { diff --git a/include/staff/templates/ticket-status.tmpl.php b/include/staff/templates/ticket-status.tmpl.php index 96c60d1d86d54ea11d6090086936d2d99802b556..8646a05cf439b1f550b6b992fdeef8d72d4df1ee 100644 --- a/include/staff/templates/ticket-status.tmpl.php +++ b/include/staff/templates/ticket-status.tmpl.php @@ -37,8 +37,12 @@ $action = $info['action'] ?: ('#tickets/status/'. $state); </tbody> <?php } - if ($state) + + $verb = ''; + if ($state) { $statuses = TicketStatusList::getStatuses(array('states'=>array($state)))->all(); + $verb = TicketStateField::getVerb($state); + } if ($statuses) { ?> @@ -95,7 +99,8 @@ $action = $info['action'] ?: ('#tickets/status/'. $state); value="<?php echo __('Cancel'); ?>"> </span> <span class="buttons" style="float:right"> - <input type="submit" value="<?php echo __('Submit'); ?>"> + <input type="submit" value="<?php + echo $verb ?: __('Submit'); ?>"> </span> </p> </form>