From 45e009dcdc2f95ecb4dbfb634e4f3c0978c0ed96 Mon Sep 17 00:00:00 2001 From: Peter Rotich <peter@osticket.com> Date: Thu, 14 Aug 2014 21:32:28 +0000 Subject: [PATCH] Support criteria based lookup for statuses Only cache results for ALL items --- include/class.list.php | 48 +++++++++++++++----------- include/staff/filter.inc.php | 2 +- include/staff/helptopic.inc.php | 2 +- include/staff/settings-tickets.inc.php | 3 +- include/staff/ticket-view.inc.php | 6 ++-- 5 files changed, 35 insertions(+), 26 deletions(-) diff --git a/include/class.list.php b/include/class.list.php index 6f322d35e..326afa828 100644 --- a/include/class.list.php +++ b/include/class.list.php @@ -649,30 +649,36 @@ class TicketStatusList extends CustomListHandler { return TicketStatus::objects()->count(); } - function getAllItems($states=array()) { - if ($states) - $items = TicketStatus::objects()->filter( - array('state__in' => $states)) - ->order_by($this->getListOrderBy()); - else - $items = TicketStatus::objects()->order_by($this->getListOrderBy()); + function getAllItems() { + if (!$this->_items) + $this->_items = TicketStatus::objects()->order_by($this->getListOrderBy()); - return $items; + return $this->_items; } - function getItems($criteria) { + function getItems($criteria = array()) { - if (!$this->_items) { - $this->_items = TicketStatus::objects()->filter( - array('flags__hasbit' => TicketStatus::ENABLED)) - ->order_by($this->getListOrderBy()); - if ($criteria['limit']) - $this->_items->limit($criteria['limit']); - if ($criteria['offset']) - $this->_items->offset($criteria['offset']); - } + // Default to only enabled items + if (!isset($criteria['enabled'])) + $criteria['enabled'] = true; - return $this->_items; + $filters = array(); + if ($criteria['enabled']) + $filters['mode__hasbit'] = TicketStatus::ENABLED; + if ($criteria['states'] && is_array($criteria['states'])) + $filters['state__in'] = $criteria['states']; + + $items = TicketStatus::objects(); + if ($filters) + $items->filter($filters); + if ($criteria['limit']) + $items->limit($criteria['limit']); + if ($criteria['offset']) + $items->offset($criteria['offset']); + + $items->order_by($this->getListOrderBy()); + + return $items; } function getItem($val) { @@ -697,12 +703,12 @@ class TicketStatusList extends CustomListHandler { return $item; } - static function getAll($states=array()) { + static function getStatuses($criteria=array()) { $statuses = array(); if (($list = DynamicList::lookup( array('type' => 'ticket-status')))) - $statuses = $list->getAllItems($states); + $statuses = $list->getItems($criteria); return $statuses; } diff --git a/include/staff/filter.inc.php b/include/staff/filter.inc.php index e9a51705a..3bda64e04 100644 --- a/include/staff/filter.inc.php +++ b/include/staff/filter.inc.php @@ -258,7 +258,7 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info); <select name="status_id"> <option value="">— <?php echo __('Default'); ?> —</option> <?php - foreach (TicketStatusList::getAll() as $status) { + foreach (TicketStatusList::getStatuses() as $status) { $name = $status->getName(); if (!($isenabled = $status->isEnabled())) $name.=' '.__('(disabled)'); diff --git a/include/staff/helptopic.inc.php b/include/staff/helptopic.inc.php index 0742b32ae..c4190b76c 100644 --- a/include/staff/helptopic.inc.php +++ b/include/staff/helptopic.inc.php @@ -138,7 +138,7 @@ if ($info['form_id'] == Topic::FORM_USE_PARENT) echo 'selected="selected"'; <select name="status_id"> <option value="">— <?php echo __('System Default'); ?> —</option> <?php - foreach (TicketStatusList::getAll() as $status) { + foreach (TicketStatusList::getStatuses() as $status) { $name = $status->getName(); if (!($isenabled = $status->isEnabled())) $name.=' '.__('(disabled)'); diff --git a/include/staff/settings-tickets.inc.php b/include/staff/settings-tickets.inc.php index e2a46f467..b8526ed0c 100644 --- a/include/staff/settings-tickets.inc.php +++ b/include/staff/settings-tickets.inc.php @@ -61,7 +61,8 @@ if(!($maxfileuploads=ini_get('max_file_uploads'))) <span> <select name="default_ticket_status_id"> <?php - foreach (TicketStatusList::getAll(array('open')) as $status) { + $criteria = array('states' => array('open')); + foreach (TicketStatusList::getStatuses($criteria) as $status) { $name = $status->getName(); if (!($isenabled = $status->isEnabled())) $name.=' '.__('(disabled)'); diff --git a/include/staff/ticket-view.inc.php b/include/staff/ticket-view.inc.php index c1e157038..07c57c267 100644 --- a/include/staff/ticket-view.inc.php +++ b/include/staff/ticket-view.inc.php @@ -623,7 +623,8 @@ $tcount+= $ticket->getNumNotes(); $states = array_merge($states, array('closed', 'archived')); - foreach (TicketStatusList::getAll($states) as $s) { + foreach (TicketStatusList::getStatuses( + array('states' => $states)) as $s) { if (!$s->isEnabled()) continue; echo sprintf('<option value="%d" %s>%s</option>', $s->getId(), @@ -713,7 +714,8 @@ $tcount+= $ticket->getNumNotes(); if ($thisstaff->canCloseTickets()) $states = array_merge($states, array('closed', 'archived')); - foreach (TicketStatusList::getAll($states) as $s) { + foreach (TicketStatusList::getStatuses( + array('states' => $states)) as $s) { if (!$s->isEnabled()) continue; $selected = $statusId == $s->getID(); echo sprintf('<option value="%d" %s>%s%s</option>', -- GitLab