Skip to content
Snippets Groups Projects
  • Jared Hancock's avatar
    Add lint test for (calls to) undefined functions · cd4b4faa
    Jared Hancock authored
    And correct several undefined function errors from several source files. So
    while function names in PHP are considered case-insensitive, it still makes
    sense to use consistent camel casing for both defining and calling methods.
    The lint test searches the code base for method calls, and then searches the
    code base again looking for a function definition matching the name of the
    function invoked. It's not failsafe, because it doesn't detect the class
    from which the method should belong, so it's likely to have false negatives.
    Furthermore, it won't work well for PHP 5 where several classes are built
    into PHP (and aren't searchable in the osTicket code base).
    
    Remove the include/staff/api.inc.php as it no longer appears to be used (and
    contains references to undefined methods).
    cd4b4faa
class.dept.php 9.46 KiB
<?php
/*********************************************************************
    class.dept.php
    
    Department class

    Peter Rotich <peter@osticket.com>
    Copyright (c)  2006-2012 osTicket
    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 Dept {
    var $id;

    var $email;
    var $sla;
    var $manager; 
    var $ht;
  
    function Dept($id){
        $this->id=0;
        $this->load($id);
    }
    
    function load($id=0) {
        global $cfg;

        if(!$id && !($id=$this->getId()))
            return false;
   
        $sql='SELECT dept.*,dept.dept_id as id,dept.dept_name as name, dept.dept_signature as signature, count(staff.staff_id) as users '
            .' FROM '.DEPT_TABLE.' dept '
            .' LEFT JOIN '.STAFF_TABLE.' staff ON (dept.dept_id=staff.dept_id) '
            .' WHERE dept.dept_id='.db_input($id)
            .' GROUP BY dept.dept_id';

        if(!($res=db_query($sql)) || !db_num_rows($res))
            return false;



        $this->ht=db_fetch_array($res);
        $this->id=$this->ht['dept_id'];
        $this->email=$this->sla=$this->manager=null;
        $this->getEmail(); //Auto load email struct.
        $this->members=array();

        return true;
    }

    function reload(){
        return $this->load();
    }

    function getId(){
        return $this->id;
    }
    
    function getName(){
        return $this->ht['name'];
    }

        
    function getEmailId(){
        return $this->ht['email_id'];
    }

    function getEmail(){
        
        if(!$this->email && $this->getEmailId())
            $this->email=Email::lookup($this->getEmailId());
            
        return $this->email;
    }

    function getNumStaff(){
        return $this->ht['users'];
    }

    function getNumMembers(){
        return $this->getNumStaff();
    }

    function getNumUsers(){
        return $this->getNumStaff();
    }

    function getAvailableMembers(){

        if(!$this->members && $this->getNumStaff()){
            $sql='SELECT m.staff_id FROM '.STAFF_TABLE.' m '
                .'WHERE m.dept_id='.db_input($this->getId())
                .' AND s.staff_id IS NOT NULL '
                .'ORDER BY s.lastname, s.firstname';
            if(($res=db_query($sql)) && db_num_rows($res)){
                while(list($id)=db_fetch_row($res))
                    if($staff= Staff::lookup($id) && $staff->isAvailable())
                        $this->members[]= $staff;
            }
        }
        return $this->members;
    }

    function getSLAId(){
        return $this->ht['sla_id'];
    }

    function getSLA(){

        if(!$this->sla && $this->getSLAId())
            $this->sla=SLA::lookup($this->getSLAId());

        return $this->sla;
    }

    function getTemplateId() {
         return $this->ht['tpl_id'];
    }

    function getTemplate() {

        if(!$this->template && $this->getTemplateId())
            $this->template = Template::lookup($this->getTemplateId());

        return $this->template;
    }
   
    function getAutoRespEmail() {

        if(!$this->autorespEmail && $this->ht['autoresp_email_id'] && ($email=Email::lookup($this->ht['autoresp_email_id'])))
            $this->autorespEmail=$email;
        else // Defualt to dept email if autoresp is not specified or deleted.
            $this->autorespEmail=$this->getEmail();

        return $this->autorespEmail;
    }
 
    function getEmailAddress() {
        if(($email=$this->getEmail()))
            return $email->getAddress();
    }
    
    function getSignature() {
        return $this->ht['signature'];
    }

    function canAppendSignature() {
        return ($this->getSignature() && $this->isPublic());
    }
    
    function getManagerId(){
        return $this->ht['manager_id'];
    }

    function getManager(){
     
        if(!$this->manager && $this->getManagerId())
            $this->manager=Staff::lookup($this->getManagerId());

        return $this->manager;
    }

    function isPublic(){
         return ($this->ht['ispublic']);
    }
    
    function autoRespONNewTicket(){
        return ($this->ht['ticket_auto_response']);
    }
        
    function autoRespONNewMessage(){
        return ($this->ht['message_auto_response']);
    }

    function noreplyAutoResp(){
         return ($this->ht['noreply_autoresp']);
    }
   
    function getHashtable() {
        return $this->ht;
    }

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

    function update($vars,&$errors){

        if($this->save($this->getId(),$vars,$errors)) {
            $this->reload();
            return true;
        }

        return false;
    }

    function delete() {
        global $cfg;
        
        if(!$cfg || $this->getId()==$cfg->getDefaultDeptId() || $this->getNumUsers())
            return 0;

        $id=$this->getId();
        $sql='DELETE FROM '.DEPT_TABLE.' WHERE dept_id='.db_input($id).' LIMIT 1';
        if(db_query($sql) && ($num=db_affected_rows())){
            // DO SOME HOUSE CLEANING
            //Move tickets to default Dept. TODO: Move one ticket at a time and send alerts + log notes.
            db_query('UPDATE '.TICKET_TABLE.' SET dept_id='.db_input($cfg->getDefaultDeptId()).' WHERE dept_id='.db_input($id));
            //Move Dept members: This should never happen..since delete should be issued only to empty Depts...but check it anyways
            db_query('UPDATE '.STAFF_TABLE.' SET dept_id='.db_input($cfg->getDefaultDeptId()).' WHERE dept_id='.db_input($id));
            //make help topic using the dept default to default-dept.
            db_query('UPDATE '.TOPIC_TABLE.' SET dept_id='.db_input($cfg->getDefaultDeptId()).' WHERE dept_id='.db_input($id));
            
        }

        return $num;
    }

    /*----Static functions-------*/
	function getIdByName($name) {
        $id=0;
        $sql ='SELECT dept_id FROM '.DEPT_TABLE.' WHERE dept_name='.db_input($name);
        if(($res=db_query($sql)) && db_num_rows($res))
            list($id)=db_fetch_row($res);

        return $id;
    }

    function lookup($id){
        return ($id && is_numeric($id) && ($dept = new Dept($id)) && $dept->getId()==$id)?$dept:null;
    }

    function getNameById($id) {

        if($id && ($dept=Dept::lookup($id)))
            $name= $dept->getName();

        return $name;
    }

    function getDefaultDeptName() {
        global $cfg;
        return ($cfg && $cfg->getDefaultDeptId() && ($name=Dept::getNameById($cfg->getDefaultDeptId())))?$name:null;
    }

    function getDepartments( $publiconly=false) {
        
        $depts=array();
        $sql ='SELECT dept_id, dept_name FROM '.DEPT_TABLE;
        if($publiconly)
            $sql.=' WHERE ispublic=1';

        if(($res=db_query($sql)) && db_num_rows($res)) {
            while(list($id, $name)=db_fetch_row($res))
                $depts[$id] = $name;
        }

        return $depts;
    }

    function getPublicDepartments() {
        return self::getDepartments(true);
    }

    function create($vars,&$errors) {
        return Dept::save(0,$vars,$errors);
    }

    function save($id,$vars,&$errors) {
        global $cfg;
                
        if($id && $id!=$vars['id'])
            $errors['err']='Missing or invalid Dept ID (internal error).';
            
        if(!$vars['email_id'] || !is_numeric($vars['email_id']))
            $errors['email_id']='Email selection required';
            
        if(!is_numeric($vars['tpl_id']))
            $errors['tpl_id']='Template selection required';

        if(!$vars['name']){
            $errors['name']='Name required';
        }elseif(strlen($vars['name'])<4) {
            $errors['name']='Name is too short.';
        }elseif(($did=Dept::getIdByName($vars['name'])) && $did!=$id){
            $errors['name']='Department already exist';
        }
        
        if(!$vars['ispublic'] && ($vars['id']==$cfg->getDefaultDeptId()))
            $errors['ispublic']='System default department can not be private';

        if($errors) return false;

            
        $sql='SET updated=NOW() '
            .' ,ispublic='.db_input($vars['ispublic'])
            .' ,email_id='.db_input($vars['email_id'])
            .' ,tpl_id='.db_input($vars['tpl_id'])
            .' ,sla_id='.db_input($vars['sla_id'])
            .' ,autoresp_email_id='.db_input($vars['autoresp_email_id'])
            .' ,manager_id='.db_input($vars['manager_id']?$vars['manager_id']:0)
            .' ,dept_name='.db_input(Format::striptags($vars['name']))
            .' ,dept_signature='.db_input(Format::striptags($vars['signature']))
            .' ,ticket_auto_response='.db_input(isset($vars['ticket_auto_response'])?$vars['ticket_auto_response']:1)
            .' ,message_auto_response='.db_input(isset($vars['message_auto_response'])?$vars['message_auto_response']:1);

            
        if($id) {
            $sql='UPDATE '.DEPT_TABLE.' '.$sql.' WHERE dept_id='.db_input($id);
            if(db_query($sql) && db_affected_rows())
                return true;
            
            $errors['err']='Unable to update '.Format::htmlchars($vars['name']).' Dept. Error occurred';
           
        }else{
            $sql='INSERT INTO '.DEPT_TABLE.' '.$sql.',created=NOW()';
            if(db_query($sql) && ($id=db_insert_id()))
                return $id;

            
            $errors['err']='Unable to create department. Internal error';
            
        }

        
        return false;
    }

}
?>