diff --git a/include/class.thread.php b/include/class.thread.php index 30d8e7799e0ee30ff146a8cc067fb9666f82aade..9b7be1bf9a0ef0d1feeccb77de144e5df84e34ba 100644 --- a/include/class.thread.php +++ b/include/class.thread.php @@ -84,8 +84,8 @@ class Thread { function getEntries($criteria) { - if (!$order || !in_array($order, array('DESC','ASC'))) - $order='ASC'; + if (!$criteria['order'] || !in_array($criteria['order'], array('DESC','ASC'))) + $criteria['order'] = 'ASC'; $sql='SELECT entry.* , COALESCE(user.name, @@ -102,13 +102,17 @@ class Thread { ON (attach.object_id = entry.id AND attach.`type`="H") ' .' WHERE entry.thread_id='.db_input($this->getId()); - if($type && is_array($type)) - $sql.=' AND entry.`type` IN ('.implode(',', db_input($type)).')'; - elseif($type) - $sql.=' AND entry.`type` = '.db_input($type); + if ($criteria['type'] && is_array($criteria['type'])) + $sql.=' AND entry.`type` IN (' + .implode(',', db_input($criteria['type'])).')'; + elseif ($criteria['type']) + $sql.=' AND entry.`type` = '.db_input($criteria['type']); $sql.=' GROUP BY entry.id ' - .' ORDER BY entry.created '.$order; + .' ORDER BY entry.created '.$criteria['order']; + + if ($criteria['limit']) + $sql.=' LIMIT '.$criteria['limit']; $entries = array(); if(($res=db_query($sql)) && db_num_rows($res)) { @@ -167,19 +171,6 @@ class Thread { return true; } - function getVar($name) { - switch ($name) { - case 'original': - return Message::firstByTicketId($this->ticket->getId()) - ->getBody(); - break; - case 'last_message': - case 'lastmessage': - return $this->ticket->getLastMessage()->getBody(); - break; - } - } - static function create($vars) { if (!$vars || !$vars['object_id'] || !$vars['object_type']) @@ -1285,30 +1276,8 @@ class MessageThreadEntry extends ThreadEntry { )?$m:null; } - //TODO: redo shit below. - - function lastByTicketId($ticketId) { - return self::byTicketId($ticketId); - } - - function firstByTicketId($ticketId) { - return self::byTicketId($ticketId, false); - } - - function byTicketId($ticketId, $last=true) { - - $sql=' SELECT thread.id FROM '.TICKET_THREAD_TABLE.' thread ' - .' WHERE thread_type=\'M\' AND thread.ticket_id = '.db_input($ticketId) - .sprintf(' ORDER BY thread.id %s LIMIT 1', $last ? 'DESC' : 'ASC'); - - if (($res = db_query($sql)) && ($id = db_result($res))) - return Message::lookup($id); - - return null; - } } - /* thread entry of type response */ class ResponseThreadEntry extends ThreadEntry { @@ -1440,15 +1409,42 @@ class TicketThread extends Thread { } function getMessages() { - return $this->getEntries(MessageThreadEntry::ENTRY_TYPE); + return $this->getEntries(array( + 'type' => MessageThreadEntry::ENTRY_TYPE)); + } + + function getLastMessage() { + + $criteria = array( + 'type' => MessageThreadEntry::ENTRY_TYPE, + 'order' => 'DESC', + 'limit' => 1); + + return $this->getEntry($criteria); + } + + function getEntry($var) { + + if (is_numeric($var)) + $id = $var; + else { + $criteria = array_merge($var, array('limit' => 1)); + $entries = $this->getEntries($criteria); + if ($entries && $entries[0]) + $id = $entries[0]['id']; + } + + return $id ? parent::getEntry($id) : null; } function getResponses() { - return $this->getEntries(ResponseThreadEntry::ENTRY_TYPE); + return $this->getEntries(array( + 'type' => ResponseThreadEntry::ENTRY_TYPE)); } function getNotes() { - return $this->getEntries(NoteThreadEntry::ENTRY_TYPE); + return $this->getEntries(array( + 'type' => NoteThreadEntry::ENTRY_TYPE)); } function addNote($vars, &$errors) { @@ -1474,15 +1470,26 @@ class TicketThread extends Thread { return ResponseThreadEntry::create($vars, $errors); } - //TODO: revisit function getVar($name) { switch ($name) { - case 'original': - return MessageThreadEntry::first($this->getId())->getBody(); + case 'original': + $entries = $this->getEntries(array( + 'type' => MessageThreadEntry::ENTRY_TYPE, + 'order' => 'ASC', + 'limit' => 1)); + if ($entries && $entries[0]) + return (string) $entries[0]['body']; + break; case 'last_message': case 'lastmessage': - return $this->ticket->getLastMessage()->getBody(); + $entries = $this->getEntries(array( + 'type' => MessageThreadEntry::ENTRY_TYPE, + 'order' => 'DESC', + 'limit' => 1)); + if ($entries && $entries[0]) + return (string) $entries[0]['body']; + break; } }