<?php

/**
 * This file defines the MessagePersistActor class.
 *
 * @package CGClientTickets
 * @category Application
 * @author  calguy1000 <calguy1000@cmsmadesimple.org>
 * @copyright Copyright 2014 by Robert Campbell
 */

namespace CGClientTickets\Actor;

/**
 * This class allows saving messages to and from the CMSMS mysql database.
 */
class MessagePersistActor extends PersistActor
{
    /**
     * @ignore
     */
    private $_insert_id;

    /**
     * @ignore
     */
    protected function _update(\CGClientTickets\message $obj)
    {
        $db = \cge_utils::get_db();
        $query = 'UPDATE '.CGST_MSGS_TABLE.' SET ticket_id = ?, sender = ?, dest = ?, subject = ?, body = ?, extra = ?, sent = ?,
                    viewed = ?, viewed_by = ?, admin_viewed = ?
                  WHERE id = ?';
        $dbr = $db->Execute($query,array($obj->ticket_id,$obj->sender,$obj->dest,$obj->subject,$obj->body,$obj->extra,$obj->sent,
                                         $obj->viewed,$obj->viewed_by,$obj->admin_viewed,$obj->id));
        $this->_insert_id = $obj->id;
    }

    /**
     * @ignore
     */
    protected function _insert(\CGClientTickets\message $obj)
    {
        $db = \cge_utils::get_db();
        $query = 'INSERT INTO '.CGST_MSGS_TABLE.' (ticket_id,sender,dest,subject,body,extra,sent,viewed,viewed_by,admin_viewed,created,modified)
                  VALUES (?,?,?,?,?,?,?,?,?,?,UNIX_TIMESTAMP(),UNIX_TIMESTAMP())';
        $dbr = $db->Execute($query,array($obj->ticket_id,$obj->sender,$obj->dest,$obj->subject,$obj->body,$obj->extra,$obj->sent,
                                         $obj->viewed,$obj->viewed_by,$obj->admin_viewed));
        $this->_insert_id = $db->Insert_ID();
    }

    /**
     * Get the id of the message last saved.
     *
     * @return int
     */
    public function get_saved_id()
    {
        return $this->_insert_id;
    }

    /**
     * Save this message.
     *
     * @param \CGClientTickets\DataObject $object The Message (must be a message object) to be saved.
     */
    public function save(\CGClientTickets\DataObject $obj)
    {
        if( $obj->id ) {
            $this->_update($obj);
        }
        else {
            $this->_insert($obj);
        }
    }

    /**
     * Delete the specified message.
     *
     * @param \CGClientTickets\DataObject $object The Message (must be a message object) to be saved.
     */
    public function delete(\CGClientTickets\DataObject $obj)
    {
        $db = \cge_utils::get_db();
        if( $obj->id < 1 ) return;

        $query = 'DELETE FROM '.CGST_MSGS_TABLE.' WHERE id = ?';
        $db->Execute($query,array($obj->id));
    }

    /**
     * Load the specified message by id.
     *
     * @param int $id
     * @return \CGClientTickets\message
     */
    public function load_by_id($id)
    {
        $id = (int) $id;
        $db = \cge_utils::get_db();
        $query = 'SELECT id,ticket_id,sender,dest,subject,body,extra,viewed,viewed_by,admin_viewed,sent,created,modified FROM '.CGST_MSGS_TABLE.' WHERE id = ?';
        $row = $db->GetRow($query,array($id));

        $obj = new \CGClientTickets\message;
        $obj->private_fill($row);
        return $obj;
    }
} // end of class

?>
