Skip to content
Snippets Groups Projects
class.sla.php 5.64 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jared Hancock's avatar
    Jared Hancock committed
    <?php
    /*********************************************************************
        class.sla.php
    
        SLA
    
        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 SLA {
    
        var $id;
    
        var $info;
    
    Jared Hancock's avatar
    Jared Hancock committed
        var $config;
    
    Peter Rotich's avatar
    Peter Rotich committed
        function SLA($id) {
    
    Jared Hancock's avatar
    Jared Hancock committed
            $this->id=0;
            $this->load($id);
        }
    
    
    Peter Rotich's avatar
    Peter Rotich committed
        function load($id=0) {
    
            if(!$id && !($id=$this->getId()))
                return false;
    
    Jared Hancock's avatar
    Jared Hancock committed
    
            $sql='SELECT * FROM '.SLA_TABLE.' WHERE id='.db_input($id);
    
    Peter Rotich's avatar
    Peter Rotich committed
            if(!($res=db_query($sql)) || !db_num_rows($res))
                return false;
    
            $this->ht=db_fetch_array($res);
            $this->id=$this->ht['id'];
            return true;
    
    Jared Hancock's avatar
    Jared Hancock committed
        }
    
        function reload() {
    
    Peter Rotich's avatar
    Peter Rotich committed
            return $this->load();
    
    Peter Rotich's avatar
    Peter Rotich committed
        function getId() {
    
    Jared Hancock's avatar
    Jared Hancock committed
            return $this->id;
        }
    
    
    Peter Rotich's avatar
    Peter Rotich committed
        function getName() {
            return $this->ht['name'];
    
    Peter Rotich's avatar
    Peter Rotich committed
        function getGracePeriod() {
            return $this->ht['grace_period'];
    
    Peter Rotich's avatar
    Peter Rotich committed
        function getNotes() {
            return $this->ht['notes'];
    
    Peter Rotich's avatar
    Peter Rotich committed
        function getHashtable() {
    
    Jared Hancock's avatar
    Jared Hancock committed
            return array_merge($this->getConfig()->getInfo(), $this->ht);
    
    Peter Rotich's avatar
    Peter Rotich committed
        function getInfo() {
            return $this->getHashtable();
    
    Jared Hancock's avatar
    Jared Hancock committed
        function getConfig() {
            if (!isset($this->config))
                $this->config = new SlaConfig($this->getId());
            return $this->config;
        }
    
    
    Peter Rotich's avatar
    Peter Rotich committed
        function isActive() {
            return ($this->ht['isactive']);
    
    Jared Hancock's avatar
    Jared Hancock committed
        function isTransient() {
            return $this->getConfig()->get('transient', false);
        }
    
    
    Peter Rotich's avatar
    Peter Rotich committed
        function sendAlerts() {
            return (!$this->ht['disable_overdue_alerts']);
    
        function alertOnOverdue() {
            return $this->sendAlerts();
        }
    
    
    Peter Rotich's avatar
    Peter Rotich committed
        function priorityEscalation() {
            return ($this->ht['enable_priority_escalation']);
        }
    
        function update($vars,&$errors) {
    
    Peter Rotich's avatar
    Peter Rotich committed
            if(!SLA::save($this->getId(),$vars,$errors))
                return false;
    
            $this->reload();
    
    Jared Hancock's avatar
    Jared Hancock committed
            $this->getConfig()->set('transient', isset($vars['transient']) ? 1 : 0);
    
    Peter Rotich's avatar
    Peter Rotich committed
    
            return true;
    
    Peter Rotich's avatar
    Peter Rotich committed
        function delete() {
    
    Jared Hancock's avatar
    Jared Hancock committed
            global $cfg;
    
    
    Peter Rotich's avatar
    Peter Rotich committed
            if(!$cfg || $cfg->getDefaultSLAId()==$this->getId())
    
    Jared Hancock's avatar
    Jared Hancock committed
                return false;
    
            $id=$this->getId();
            $sql='DELETE FROM '.SLA_TABLE.' WHERE id='.db_input($id).' LIMIT 1';
    
    Peter Rotich's avatar
    Peter Rotich committed
            if(db_query($sql) && ($num=db_affected_rows())) {
    
    Jared Hancock's avatar
    Jared Hancock committed
                db_query('UPDATE '.DEPT_TABLE.' SET sla_id=0 WHERE sla_id='.db_input($id));
                db_query('UPDATE '.TOPIC_TABLE.' SET sla_id=0 WHERE sla_id='.db_input($id));
    
    Peter Rotich's avatar
    Peter Rotich committed
                db_query('UPDATE '.TICKET_TABLE.' SET sla_id='.db_input($cfg->getDefaultSLAId()).' WHERE sla_id='.db_input($id));
    
    Jared Hancock's avatar
    Jared Hancock committed
            }
    
            return $num;
        }
    
        /** static functions **/
    
    Peter Rotich's avatar
    Peter Rotich committed
        function create($vars,&$errors) {
    
    Jared Hancock's avatar
    Jared Hancock committed
            if (($id = SLA::save(0,$vars,$errors)) && ($sla = self::lookup($id)))
                $sla->getConfig()->set('transient',
                    isset($vars['transient']) ? 1 : 0);
            return $id;
    
    Peter Rotich's avatar
    Peter Rotich committed
        function getSLAs() {
    
            $slas=array();
    
    Peter Rotich's avatar
    Peter Rotich committed
            $sql='SELECT id, name, isactive, grace_period FROM '.SLA_TABLE.' ORDER BY name';
    
    Peter Rotich's avatar
    Peter Rotich committed
            if(($res=db_query($sql)) && db_num_rows($res)) {
    
    Peter Rotich's avatar
    Peter Rotich committed
                while($row=db_fetch_array($res))
                    $slas[$row['id']] = sprintf('%s (%d hrs - %s)',
    
    Jared Hancock's avatar
    Jared Hancock committed
                            $row['name'],
                            $row['grace_period'],
    
    Peter Rotich's avatar
    Peter Rotich committed
                            $row['isactive']?'Active':'Disabled');
    
    Peter Rotich's avatar
    Peter Rotich committed
            }
    
            return $slas;
        }
    
    
        function getIdByName($name) {
    
    Jared Hancock's avatar
    Jared Hancock committed
    
            $sql='SELECT id FROM '.SLA_TABLE.' WHERE name='.db_input($name);
            if(($res=db_query($sql)) && db_num_rows($res))
                list($id)=db_fetch_row($res);
    
            return $id;
        }
    
    
    Peter Rotich's avatar
    Peter Rotich committed
        function lookup($id) {
    
    Jared Hancock's avatar
    Jared Hancock committed
            return ($id && is_numeric($id) && ($sla= new SLA($id)) && $sla->getId()==$id)?$sla:null;
        }
    
    
    Peter Rotich's avatar
    Peter Rotich committed
        function save($id,$vars,&$errors) {
    
    Jared Hancock's avatar
    Jared Hancock committed
    
    
            if(!$vars['grace_period'])
                $errors['grace_period']='Grace period required';
            elseif(!is_numeric($vars['grace_period']))
                $errors['grace_period']='Numeric value required (in hours)';
    
    Jared Hancock's avatar
    Jared Hancock committed
            if(!$vars['name'])
                $errors['name']='Name required';
            elseif(($sid=SLA::getIdByName($vars['name'])) && $sid!=$id)
                $errors['name']='Name already exists';
    
            if($errors) return false;
    
            $sql=' updated=NOW() '.
                 ',isactive='.db_input($vars['isactive']).
                 ',name='.db_input($vars['name']).
                 ',grace_period='.db_input($vars['grace_period']).
                 ',disable_overdue_alerts='.db_input(isset($vars['disable_overdue_alerts'])?1:0).
                 ',enable_priority_escalation='.db_input(isset($vars['enable_priority_escalation'])?1:0).
    
                 ',notes='.db_input(Format::sanitize($vars['notes']));
    
    Jared Hancock's avatar
    Jared Hancock committed
    
            if($id) {
                $sql='UPDATE '.SLA_TABLE.' SET '.$sql.' WHERE id='.db_input($id);
                if(db_query($sql))
                    return true;
    
                $errors['err']='Unable to update SLA. Internal error occurred';
            }else{
    
                if (isset($vars['id']))
                    $sql .= ', id='.db_input($vars['id']);
    
    
    Jared Hancock's avatar
    Jared Hancock committed
                $sql='INSERT INTO '.SLA_TABLE.' SET '.$sql.',created=NOW() ';
                if(db_query($sql) && ($id=db_insert_id()))
                    return $id;
    
                $errors['err']='Unable to add SLA. Internal error';
            }
    
            return false;
        }
    }
    
    Jared Hancock's avatar
    Jared Hancock committed
    
    require_once(INCLUDE_DIR.'class.config.php');
    class SlaConfig extends Config {
        var $table = CONFIG_TABLE;
    
        function SlaConfig($id) {
            parent::Config("sla.$id");
        }
    }