<?php /********************************************************************* class.thread.php Ticket thread TODO: move thread related logic here from class.ticket.php Peter Rotich <peter@osticket.com> Copyright (c) 2006-2012 osTicket http://www.osticket.com Released under the GNU General Public License WITHOUT ANY WARRANTY. See LICENSE.TXT for details. vim: expandtab sw=4 ts=4 sts=4: **********************************************************************/ include_once(INCLUDE_DIR.'class.ticket.php'); Class ThreadEntry { var $id; var $ht; var $staff; var $ticket; function ThreadEntry($id, $type='', $ticketId=0) { $this->load($id, $type, $ticketId); } function load($id=0, $type='', $ticketId=0) { if(!$id && !($id=$this->getId())) return false; $sql='SELECT thread.* ' .' ,count(DISTINCT attach.attach_id) as attachments ' .' FROM '.TICKET_THREAD_TABLE.' thread ' .' LEFT JOIN '.TICKET_ATTACHMENT_TABLE.' attach ON (thread.ticket_id=attach.ticket_id AND thread.id=attach.ref_id AND thread.thread_type=attach.ref_type) ' .' WHERE thread.id='.db_input($id); if($type) $sql.=' AND thread.thread_type='.db_input($type); if($ticketId) $sql.=' AND thread.ticket_id='.db_input($ticketId); $sql.=' GROUP BY thread.id '; if(!($res=db_query($sql)) || !db_num_rows($res)) return false; $this->ht = db_fetch_array($res); $this->id = $this->ht['id']; $this->staff = $this->ticket = null; return true; } function reload() { return $this->load(); } function getId() { return $this->id; } function getPid() { return $this->ht['pid']; } function getType() { return $this->ht['thread_type']; } function getSource() { return $this->ht['source']; } function getPoster() { return $this->ht['poster']; } function getTitle() { return $this->ht['title']; } function getBody() { return $this->ht['body']; } function getCreateDate() { return $this->ht['created']; } function getUpdateDate() { return $this->ht['updated']; } function getNumAttachments() { return $this->ht['attachments']; } function getTicketId() { return $this->ht['ticket_id']; } function getTicket() { if(!$this->ticket && $this->getTicketId()) $this->ticket = Ticket::lookup($this->getTicketId()); return $this->ticket; } function getStaffId() { return $this->ht['staff_id']; } function getStaff() { if(!$this->staff && $this->getStaffId()) $this->staff = Staff::lookup($this->getStaffId()); return $this->staff; } /* variables */ function asVar() { return $this->getBody(); } function getVar($tag) { global $cfg; if($tag && is_callable(array($this, 'get'.ucfirst($tag)))) return call_user_func(array($this, 'get'.ucfirst($tag))); switch(strtolower($tag)) { case 'create_date': return Format::date( $cfg->getDateTimeFormat(), Misc::db2gmtime($this->getCreateDate()), $cfg->getTZOffset(), $cfg->observeDaylightSaving()); break; case 'update_date': return Format::date( $cfg->getDateTimeFormat(), Misc::db2gmtime($this->getUpdateDate()), $cfg->getTZOffset(), $cfg->observeDaylightSaving()); break; } return false; } /* static calls */ function _lookup($id, $type='', $tid=0) { return ($id && is_numeric($id) && ($e = new ThreadEntry($id, $type, $tid)) && $e->getId()==$id)?$e:null; } } /* Message - Ticket thread entry of type message */ class Message extends ThreadEntry { function Message($id, $ticketId=0) { parent::ThreadEntry($id, 'M', $ticketId); } function getSubject() { return $this->getTitle(); } function lookup($id, $tid) { return parent::_lookup($id, 'M', $tid); } } /* Response - Ticket thread entry of type response */ class Response extends ThreadEntry { function Response($id, $ticketId=0) { parent::ThreadEntry($id, 'R', $ticketId); } function getSubject() { return $this->getTitle(); } function getRespondent() { return $this->getStaff(); } function lookup($id, $tid) { return parent::_lookup($id, 'R', $tid); } } /* Note - Ticket thread entry of type note (Internal Note) */ class Note extends ThreadEntry { function Note($id, $ticketId=0) { parent::ThreadEntry($id, 'N', $ticketId); } function getMessage() { return $this->getBody(); } function lookup($id, $tid) { return parent::_lookup($id, 'N', $tid); } }