Skip to content
Snippets Groups Projects
class.sla.php 5.54 KiB
Newer Older
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($vars['notes']);

        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{
            $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");
    }
}