Skip to content
Snippets Groups Projects
class.thread.php 5.19 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?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);
        }
    }