Skip to content
Snippets Groups Projects
class.topic.php 6.81 KiB
Newer Older
Jared Hancock's avatar
Jared Hancock committed
<?php
/*********************************************************************
    class.topic.php

    Help topic helper

    Peter Rotich <peter@osticket.com>
    Copyright (c)  2006-2013 osTicket
Jared Hancock's avatar
Jared Hancock committed
    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:
**********************************************************************/

class Topic {
    var $id;
Jared Hancock's avatar
Jared Hancock committed
    var $ht;
    var $parent;
    function Topic($id) {
Jared Hancock's avatar
Jared Hancock committed
        $this->id=0;
        $this->load($id);
    }

    function load($id=0) {

        if(!$id && !($id=$this->getId()))
            return false;

        $sql='SELECT ht.* '
            .', IF(ht.topic_pid IS NULL, ht.topic, CONCAT_WS(" / ", ht2.topic, ht.topic)) as name '
            .' FROM '.TOPIC_TABLE.' ht '
            .' LEFT JOIN '.TOPIC_TABLE.' ht2 ON(ht2.topic_id=ht.topic_pid) '
            .' WHERE ht.topic_id='.db_input($id);

Jared Hancock's avatar
Jared Hancock committed
        if(!($res=db_query($sql)) || !db_num_rows($res))
            return false;

        $this->ht = db_fetch_array($res);
        $this->id = $this->ht['topic_id'];

        $this->page = null;


Jared Hancock's avatar
Jared Hancock committed
        return true;
    }
Jared Hancock's avatar
Jared Hancock committed
    function reload() {
        return $this->load();
    }

    function asVar() {
        return $this->getName();
    }
    function getId() {
Jared Hancock's avatar
Jared Hancock committed
        return $this->id;
    }

    function getPid() {
        return $this->ht['topic_pid'];
    }

    function getParent() {
        if(!$this->parent && $this->getPid())
            $this->parent = self::lookup($this->getPid());

        return $this->parent;
    }

    function getName() {
        return $this->ht['name'];
    function getDeptId() {
Jared Hancock's avatar
Jared Hancock committed
        return $this->ht['dept_id'];
    }

    function getSLAId() {
Jared Hancock's avatar
Jared Hancock committed
        return $this->ht['sla_id'];
    }

    function getPriorityId() {
Jared Hancock's avatar
Jared Hancock committed
        return $this->ht['priority_id'];
    }

    function getStaffId() {
Jared Hancock's avatar
Jared Hancock committed
        return $this->ht['staff_id'];
    }

    function getTeamId() {
Jared Hancock's avatar
Jared Hancock committed
        return $this->ht['team_id'];
    }

    function getPageId() {
        return $this->ht['page_id'];
    }

    function getPage() {
        if(!$this->page && $this->getPageId())
            $this->page = Page::lookup($this->getPageId());

        return $this->page;
    }

Jared Hancock's avatar
Jared Hancock committed
    function autoRespond() {
        return (!$this->ht['noautoresp']);
    }

    function isEnabled() {
         return ($this->ht['isactive']);
    }

    function isActive() {
Jared Hancock's avatar
Jared Hancock committed
        return $this->isEnabled();
    }

    function isPublic() {
Jared Hancock's avatar
Jared Hancock committed
        return ($this->ht['ispublic']);
    }

    function getHashtable() {
        return $this->ht;
    }

    function getInfo() {
        return $this->getHashtable();
    }

    function update($vars, &$errors) {
        if(!$this->save($this->getId(), $vars, $errors))
            return false;

        $this->reload();
        return true;
    function delete() {

Jared Hancock's avatar
Jared Hancock committed
        $sql='DELETE FROM '.TOPIC_TABLE.' WHERE topic_id='.db_input($this->getId()).' LIMIT 1';
        if(db_query($sql) && ($num=db_affected_rows())) {
            db_query('UPDATE '.TOPIC_TABLE.' SET topic_pid=0 WHERE topic_pid='.db_input($this->getId()));
Jared Hancock's avatar
Jared Hancock committed
            db_query('UPDATE '.TICKET_TABLE.' SET topic_id=0 WHERE topic_id='.db_input($this->getId()));
            db_query('DELETE FROM '.FAQ_TOPIC_TABLE.' WHERE topic_id='.db_input($this->getId()));
        }

        return $num;
    }
    /*** Static functions ***/
    function create($vars, &$errors) {
        return self::save(0, $vars, $errors);
Jared Hancock's avatar
Jared Hancock committed
    }

    function getHelpTopics($publicOnly=false) {

        $topics=array();
        $sql='SELECT ht.topic_id, CONCAT_WS(" / ", ht2.topic, ht.topic) as name '
            .' FROM '.TOPIC_TABLE. ' ht '
            .' LEFT JOIN '.TOPIC_TABLE.' ht2 ON(ht2.topic_id=ht.topic_pid) '
            .' WHERE ht.isactive=1';

Jared Hancock's avatar
Jared Hancock committed
        if($publicOnly)
            $sql.=' AND ht.ispublic=1';

        $sql.=' ORDER BY name';
Jared Hancock's avatar
Jared Hancock committed
        if(($res=db_query($sql)) && db_num_rows($res))
            while(list($id, $name)=db_fetch_row($res))
Jared Hancock's avatar
Jared Hancock committed
                $topics[$id]=$name;

        return $topics;
    }

    function getPublicHelpTopics() {
        return self::getHelpTopics(true);
    }

    function getIdByName($name, $pid=0) {

        $sql='SELECT topic_id FROM '.TOPIC_TABLE
            .' WHERE topic='.db_input($name)
            .' AND topic_pid='.db_input($pid);
Jared Hancock's avatar
Jared Hancock committed
        if(($res=db_query($sql)) && db_num_rows($res))
            list($id) = db_fetch_row($res);
    function lookup($id) {
Jared Hancock's avatar
Jared Hancock committed
        return ($id && is_numeric($id) && ($t= new Topic($id)) && $t->getId()==$id)?$t:null;
    }

    function save($id, $vars, &$errors) {
Jared Hancock's avatar
Jared Hancock committed

        $vars['topic']=Format::striptags(trim($vars['topic']));

        if($id && $id!=$vars['id'])
            $errors['err']='Internal error. Try again';

        if(!$vars['topic'])
            $errors['topic']='Help topic required';
        elseif(strlen($vars['topic'])<5)
            $errors['topic']='Topic is too short. 5 chars minimum';
        elseif(($tid=self::getIdByName($vars['topic'], $vars['pid'])) && $tid!=$id)
Jared Hancock's avatar
Jared Hancock committed
            $errors['topic']='Topic already exists';

        if(!$vars['dept_id'])
            $errors['dept_id']='You must select a department';
Jared Hancock's avatar
Jared Hancock committed
        if(!$vars['priority_id'])
            $errors['priority_id']='You must select a priority';
Jared Hancock's avatar
Jared Hancock committed
        if($errors) return false;

        $sql=' updated=NOW() '
            .',topic='.db_input($vars['topic'])
            .',topic_pid='.db_input($vars['pid'])
            .',dept_id='.db_input($vars['dept_id'])
            .',priority_id='.db_input($vars['priority_id'])
            .',sla_id='.db_input($vars['sla_id'])
            .',page_id='.db_input($vars['page_id'])
            .',isactive='.db_input($vars['isactive'])
            .',ispublic='.db_input($vars['ispublic'])
            .',noautoresp='.db_input(isset($vars['noautoresp'])?1:0)
            .',notes='.db_input($vars['notes']);
Jared Hancock's avatar
Jared Hancock committed

        //Auto assign ID is overloaded...
        if($vars['assign'] && $vars['assign'][0]=='s')
             $sql.=',team_id=0, staff_id='.db_input(preg_replace("/[^0-9]/", "", $vars['assign']));
Jared Hancock's avatar
Jared Hancock committed
        elseif($vars['assign'] && $vars['assign'][0]=='t')
            $sql.=',staff_id=0, team_id='.db_input(preg_replace("/[^0-9]/", "", $vars['assign']));
Jared Hancock's avatar
Jared Hancock committed
        else
            $sql.=',staff_id=0, team_id=0 '; //no auto-assignment!
Jared Hancock's avatar
Jared Hancock committed
        if($id) {
            $sql='UPDATE '.TOPIC_TABLE.' SET '.$sql.' WHERE topic_id='.db_input($id);
            if(db_query($sql))
                return true;

            $errors['err']='Unable to update topic. Internal error occurred';
        } else {
Jared Hancock's avatar
Jared Hancock committed
            $sql='INSERT INTO '.TOPIC_TABLE.' SET '.$sql.',created=NOW()';
            if(db_query($sql) && ($id=db_insert_id()))
                return $id;
Jared Hancock's avatar
Jared Hancock committed
            $errors['err']='Unable to create the topic. Internal error';
        }
Jared Hancock's avatar
Jared Hancock committed
        return false;
    }
}
?>