<?php

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

namespace CGClientTickets\Actor;

/**
 * This class allows saving tickets to and from the CMSMS mysql database.
 */
class TicketPersistActor extends PersistActor
{
    /**
     * @ignore
     */
    private $_loaded = array();

    /**
     * @ignore
     */
    private $_insert_id;

    /**
     * @ignore
     */
    protected function _update(\CGClientTickets\ticket $obj)
    {
        $db = \cge_utils::get_db();
        $query = 'UPDATE '.CGST_TICKETS_TABLE.' SET owner = ?, alert_group = ?, status = ?, priority = ?,
                  e_key1 = ?, e_key2 = ?, e_key3 = ?, extra = ?, modified = UNIX_TIMESTAMP()
                  WHERE id = ?';
        $dbr = $db->Execute($query,array($obj->owner,$obj->alert_group,$obj->status,$obj->priority,
                                         $obj->e_key1,$obj->e_key2,$obj->e_key3,$obj->extra, $obj->id));
        $this->_insert_id = $obj->id;
    }

    /**
     * @ignore
     */
    protected function _insert(\CGClientTickets\ticket $obj)
    {
        $db = \cge_utils::get_db();
        $query = 'INSERT INTO '.CGST_TICKETS_TABLE.' (owner,alert_group,status,priority,e_key1,e_key2,e_key3,extra,created,modified)
                  VALUES (?,?,?,?,?,?,?,?,UNIX_TIMESTAMP(),UNIX_TIMESTAMP())';
        $dbr = $db->Execute($query,array($obj->owner,$obj->alert_group,$obj->status,$obj->priority,
                                         $obj->e_key1,$obj->e_key2,$obj->e_key3,$obj->extra ));
        $this->_insert_id = $db->Insert_ID();
    }

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

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

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

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

    /**
     * Load the specified ticket by id.
     *
     * @param int $id
     * @return \CGClientTickets\ticket
     */
    public function load_by_id($id)
    {
        $id = (int) $id;
        if( !isset($this->_loaded[$id]) ) {
            $db = \cge_utils::get_db();
            $query = 'SELECT id,owner,alert_group,status,priority,e_key1,e_key2,e_key3,extra,created,modified FROM '.CGST_TICKETS_TABLE.' WHERE id = ?';
            $row = $db->GetRow($query,array($id));
            if( !is_array($row) || count($row) == 0 ) throw new \RuntimeException('Unable to find a ticket with the specified id');
            $this->_loaded[$id] = $row;
        }
        $obj = new \CGClientTickets\ticket;
        $obj->private_fill($this->_loaded[$id]);
        return $obj;
    }
} // end of class

?>

