Your IP : 216.73.216.224


Current Path : /var/www/html/administrator/components/com_jssupportticket/models/
Upload File :
Current File : /var/www/html/administrator/components/com_jssupportticket/models/staff.php

<?php

/**
 * @Copyright Copyright (C) 2012 ... Ahmad Bilal
 * @license GNU/GPL http://www.gnu.org/copyleft/gpl.html
 * Company:		Buruj Solutions
  + Contact:		www.burujsolutions.com , info@burujsolutions.com
 * Created on:	May 03, 2012
  ^
  + Project: 	JS Tickets
  ^
 */
defined('_JEXEC') or die('Not Allowed');

jimport('joomla.application.component.model');
jimport('joomla.html.html');

class JSSupportticketModelStaff extends JSSupportTicketModel {

    function __construct() {
        parent::__construct();
    }

    function getAllStaffMembers($username, $roleid, $statusid, $limitstart, $limit) {
        $db = $this->getDBO();
        $result = array();
        $status [] = array('value' => null, 'text' => JText::_('Select Status'));
        $status [] = array('value' => 1, 'text' => JText::_('Active'));
        $status [] = array('value' => -1, 'text' => JText::_('Disabled'));

        $lists['roles'] = JHTML::_('select.genericList', $this->getJSModel('roles')->getRoles(JText::_('Select Role')), 'filter_sm_roleid', 'class="inputbox js-ticket-select-field" ' . '', 'value', 'text', $roleid);
        $lists['status'] = JHTML::_('select.genericList', $status, 'filter_sm_statusid', 'class="inputbox js-ticket-select-field" ' . '', 'value', 'text', $statusid);
        $query = "SELECT COUNT(id) FROM #__js_ticket_staff AS staff WHERE staff.status <> 0";

        if ($username){
            $username = trim($username);
            $query .= " AND staff.username LIKE " . $db->quote('%'.$username.'%');
        }
        if ($roleid) {
            if (!is_numeric($roleid))
                return false;
            $query .= " AND staff.roleid = " . $roleid;
        }
        if ($statusid) {
            if (!is_numeric($statusid))
                return false;
            $query .=" AND staff.status = " . $statusid;
        }
        $db->setQuery($query);
        $total = $db->loadResult();
        if ($total <= $limitstart)
            $limitstart = 0;
        $query = "SELECT staff.*,role.name AS groupname,user.lastvisitDate AS lastvisit
					FROM `#__js_ticket_staff` AS staff
					LEFT JOIN `#__js_ticket_acl_roles` AS role ON role.id = staff.roleid
					LEFT JOIN `#__users` AS user ON user.id = staff.uid
					WHERE staff.status <> 0";
        if ($username)
            $query .= " AND staff.username LIKE " . $db->quote('%'.$username.'%');
        if ($roleid) {
            if (!is_numeric($roleid))
                return false;
            $query .= " AND staff.roleid= " . $roleid;
        }
        if ($statusid) {
            if (!is_numeric($statusid))
                return false;
            $query .=" AND staff.status = " . $statusid;
        }
        $db->setQuery($query, $limitstart, $limit);
        if ($username)
            $lists['username'] = $username;
        $result[0] = $db->loadObjectList();
        $result[1] = $total;
        $result[2] = $lists;
        return $result;
    }

    function getAllUsers($searchname, $searchusername, $searchrole , $limitstart, $limit) {
        $db = JFactory::getDBO();
        $result = array();
        $version = new JVersion;
        $joomla = $version->getShortVersion();
        $jversion = substr($joomla, 0, 3);

        if ($jversion == '1.5') {
            $query = 'SELECT COUNT(a.id)'
                    . ' FROM #__user AS a';
        } else {
            $query = 'SELECT COUNT(a.id)'
                    . ' FROM #__users AS a';
        }
        $clause = ' WHERE ';
        if ($searchname) {
            $searchname = trim($searchname);
            $query .= $clause . ' LOWER(a.name) LIKE ' . $db->Quote('%' . $db->getEscaped($searchname, true) . '%', false);
            $clause = 'AND';
        }
        if ($searchusername) {
            $searchusername = trim($searchusername);
            $query .= $clause . ' LOWER(a.username) LIKE ' . $db->Quote('%' . $db->getEscaped($searchusername, true) . '%', false);
        }
        $db->setQuery($query);
        $total = $db->loadResult();
        if ($total <= $limitstart)
            $limitstart = 0;

        if ($jversion == '1.5') {
            $query = 'SELECT a.*'
                    . ' FROM #__users AS a';
        } else {
            $query = 'SELECT a.*'
                    . ' FROM #__users AS a';
        }
        $clause = ' WHERE ';
        if ($searchname) {
            $searchname = trim($searchname);
            $query .= $clause . ' LOWER(a.name) LIKE ' . $db->Quote('%' . $db->getEscaped($searchname, true) . '%', false);
            $clause = 'AND';
        }
        if ($searchusername) {
            $searchusername = trim($searchusername);
            $query .= $clause . ' LOWER(a.username) LIKE ' . $db->Quote('%' . $db->getEscaped($searchusername, true) . '%', false);
            $clause = 'AND';
        }
        if ($searchrole){
            $searchrole = trim($searchrole);
            $query .= $clause . ' LOWER( role.title) LIKE ' . $db->Quote('%' . $db->getEscaped($searchrole, true) . '%', false);
        }

        $query .= ' GROUP BY a.id';
        $db->setQuery($query, $limitstart, $limit);
        $result[0] = $db->loadObjectList();

        $lists = array();
        if ($searchname)
            $lists['searchname'] = $searchname;
        if ($searchusername)
            $lists['searchusername'] = $searchusername;
        if ($searchrole)
            $lists['searchrole'] = $searchrole;
        $result[1] = $total;
        $result[2] = $lists;
        return $result;
    }

    function getStaffMemberSignature($uid) {
        if (!is_numeric($uid))
            return false;
        $db = JFactory::getDBO();
        $query = "SELECT user.signature
                    FROM `#__js_ticket_staff` AS user
                    WHERE user.uid = " . $uid;
        $db->setQuery($query);
        $usersignature = $db->loadResult();
        $usersignature = str_replace(Chr(13), '<br>', $usersignature);
        return $usersignature;
    }

    function getStaffforForm($id ) {
        $roles= $this->getJSModel('roles');
                $permission_by_task=array();

        $db = $this->getDBO();
        if($id){
            if (is_numeric($id) == false) return false;
            $query = "SELECT staff.*
            FROM `#__js_ticket_staff` AS staff
            WHERE staff.id = ".$id;
            $db->setQuery($query);
            $staff = $db->loadObject();
            if($staff->uid != '' && $staff->uid != 0){
                            $version = new JVersion;
                            $joomla = $version->getShortVersion();
                            $jversion = substr($joomla,0,3);
                            if($jversion == '1.5'){
                                    $query = 'SELECT a.*'
                                                    . ' FROM #__users AS a WHERE a.id='.$staff->uid;
                            }else{
                                    $query = 'SELECT a.*'
                                                    . ' FROM #__users AS a WHERE a.id='.$staff->uid;
                            }
                            $db->setQuery($query);
                            $user = $db->loadObject();
            }
            $query = "SELECT u_per.permissionid AS userpermissionid,per.id,per.permission,per.permissiongroup AS pgroup
                        FROM `#__js_ticket_acl_permissions` AS per
                        LEFT JOIN `#__js_ticket_acl_user_permissions` AS u_per ON (u_per.staffid=".$staff->id." AND u_per.permissionid=per.id )
                        ORDER BY per.permissiongroup,per.id";
            $db->setQuery($query);
            $permission_user = $db->loadObjectList();

            $query = "SELECT u_da.departmentid AS userdepartmentid,dep.id,dep.departmentname AS name
                        FROM `#__js_ticket_departments` AS dep
                        LEFT JOIN `#__js_ticket_acl_user_access_departments` AS u_da ON (u_da.staffid=".$staff->id." AND u_da.departmentid=dep.id )
                        ORDER BY dep.id";
            $db->setQuery($query);
            $department_user = $db->loadObjectList();
            foreach($permission_user AS $userper){
                $userpermissionid="";if(isset($userper->userpermissionid)){$userpermissionid=$userper->userpermissionid; }
                switch($userper->pgroup){
                    case 1:
                        $permission_by_task['ticket_section'][]=(object) array('id'=>$userper->id,'permission'=>$userper->permission,'pgroup'=>$userper->pgroup,'userpermissionid'=>$userpermissionid);
                    break;
                    case 2:
                        $permission_by_task['staff_section'][]=(object) array('id'=>$userper->id,'permission'=>$userper->permission,'pgroup'=>$userper->pgroup,'userpermissionid'=>$userpermissionid);
                    break;
                    case 3:
                        $permission_by_task['kb_section'][]=(object) array('id'=>$userper->id,'permission'=>$userper->permission,'pgroup'=>$userper->pgroup,'userpermissionid'=>$userpermissionid);
                    break;
                    case 4:
                        $permission_by_task['faq_section'][]=(object) array('id'=>$userper->id,'permission'=>$userper->permission,'pgroup'=>$userper->pgroup,'userpermissionid'=>$userpermissionid);
                    break;
                    case 5:
                        $permission_by_task['download_section'][]=(object) array('id'=>$userper->id,'permission'=>$userper->permission,'pgroup'=>$userper->pgroup,'userpermissionid'=>$userpermissionid);
                    break;
                    case 6:
                        $permission_by_task['announcement_section'][]=(object) array('id'=>$userper->id,'permission'=>$userper->permission,'pgroup'=>$userper->pgroup,'userpermissionid'=>$userpermissionid);
                    break;
                    case 7:
                        $permission_by_task['mail_section'][]=(object) array('id'=>$userper->id,'permission'=>$userper->permission,'pgroup'=>$userper->pgroup,'userpermissionid'=>$userpermissionid);
                    break;
                }
            }
        }

        $title = "";
        if(isset($staff) ){
            $lists['roles'] = JHTML::_('select.genericList', $roles->getRoles(JText::_('Select Role')), 'roleid', 'class="inputbox  js-ticket-select-field required" '. 'onChange="getrolepermission(this.value)"', 'value', 'text', $staff->roleid);
        }else{
            $lists['roles'] = JHTML::_('select.genericList', $roles->getRoles(JText::_('Select Role')), 'roleid', 'class="inputbox js-ticket-select-field required" '. 'onChange="getrolepermission(this.value)"', 'value', 'text', '');
        }
        if(isset($staff)){
            $result[0] = $staff;
            $result[1] = $user;
            $result[3] = $permission_user;
            $result[4] = $department_user;
                        $result[5] = $permission_by_task;
        }
        $result[2] = $lists;
        return $result;
    }
    function storeStaffMember($data){
        $user = JSSupportticketCurrentUser::getInstance();
        if(!$user->getIsAdmin()){
            $permission = ($data['id'] == '') ? 'Add User' : 'Edit User';
            $per = $user->checkUserPermission($permission);
            if ($per == false)
                return PERMISSION_ERROR;
        }
        if(!isset($data['appendsignature'])) $data['appendsignature'] = 0;
        if(!isset($data['photo'])) $data['photo'] = '';
        $row = $this->getTable('staff');
        if($data['id'] == ''){
            $isexist = $this->checkUserExist($data['uid']);
            if($isexist <> 0){
                return ALREADY_EXIST;
            }
        }
        if (!$row->bind($data)) {
            $this->setError($row->getError());
            return SAVE_ERROR;
        }
        if (!$row->check()) {
            $this->setError($row->getError());
            return SAVE_ERROR;
        }
	try{
            $row->store();
        }
        catch (RuntimeException $e){
            $this->getJSModel('systemerrors')->updateSystemErrors($e);
            $this->setError($e);
            return SAVE_ERROR;
        }

        $roledepdataArray = array();
        if(!empty($data['roledepdata'])){
            $roledepdataArray = $data['roledepdata'];
        }
        $store_user_departments=$this->getJSModel('useraccessdepartments')->storeUserAccessDepartments($roledepdataArray,$row->uid,$row->roleid,$row->id);
        if($store_user_departments==false){
            $row->delete($row->id);
            return SAVE_ERROR;
        }
        $roleperdataArray = array();
        if(!empty($data['roleperdata'])){
            $roleperdataArray = $data['roleperdata'];
        }
        $store_user_permissons = $this->getJSModel('userpermissions')->storeUserPermissions($roleperdataArray,$row->uid,$row->roleid,$row->id);
        if($store_user_permissons==false){
            $row->delete($row->id);
            return SAVE_ERROR;
        }

        JSSupportticketMessage::$recordid = $row->id;
        return SAVED;
    }

     function staffMemberCanDelete($staffid) {
        if (!is_numeric($staffid)) return false;
        $db = $this->getDBO();
        $query = "SELECT (SELECT COUNT(id) AS total FROM `#__js_ticket_tickets` WHERE staffid = ".$staffid.") +
                    (SELECT COUNT(id) AS total FROM `#__js_ticket_staff_mail` AS mail WHERE mail.from = ".$staffid.") +
                    (SELECT COUNT(id) AS total FROM `#__js_ticket_staff_mail` AS mail WHERE mail.to = ".$staffid.") +
                    (SELECT COUNT(id) AS total FROM `#__js_ticket_replies` WHERE staffid = ".$staffid.")
                     AS total ";
        $db->setQuery($query);
        $total = $db->loadResult();
        if ($total > 0)
            return false;
        else
            return true;
    }

    function deleteStaffMember($id){
        if(!is_numeric($id)) return false;
        $user = JSSupportticketCurrentUser::getInstance();
        if(!$user->getIsAdmin()){
            $per = $user->checkUserPermission('Delete User');
            if ($per == false)
                return PERMISSION_ERROR;
        }
        $row = $this->getTable('staff');
        if($this->staffMemberCanDelete($id) == true){
            if (!$row->delete($id)){
                $this->getJSModel('systemerrors')->updateSystemErrors($row->getErrorMsg());
                $this->setError($row->getErrorMsg());
                return DELETE_ERROR;
            }
            $d_u_p = $this->getJSModel('userpermissions')->deleteUserPermissions($id);
            if($d_u_p==false)
                return DELETE_ERROR;
            return DELETED;
        }else return IN_USE;
    }

    function deleteStaffMemberAdmin() {
        $cids = JFactory::getApplication()->input->get('cid', array(0), '', 'array');
        $row = $this->getTable('staff');
        $deleteall = 1;
        foreach ($cids as $cid) {
            if(is_numeric($cid)){
                if ($this->staffMemberCanDelete($cid) == true) {
                    if (!$row->delete($cid)) {
                        $this->setError($row->getErrorMsg());
                        return DELETE_ERROR;
                    }
                    $d_u_p = $this->getJSModel('userpermissions')->deleteUserPermissions($cid);
                    if ($d_u_p == false)
                        return DELETE_ERROR;
                }else
                    $deleteall++;
            }else{
                return false;
            }
        }
        if($deleteall == 1){
            return DELETED;
        }else{
            $deleteall = $deleteall-1;
            JSSupportticketMessage::$recordid = $deleteall;
            return DELETE_ERROR;
        }
    }

    function isStaffMember($uid){
        if(!is_numeric($uid)) return false;
        $db = $this->getDBO();
        $query = "SELECT id FROM `#__js_ticket_staff` WHERE uid =".$uid;
        $db->setQuery($query);
        $id = $db->loadResult();
        if($id) return $id;
        else return false;
    }

    function isCurrentUserStaff(){
    	$db = $this->getDBO();
 		$uid = JFactory::getUser()->id;
        $query = "SELECT id FROM `#__js_ticket_staff` WHERE uid =".$uid;
        $db->setQuery($query);
        $result = $db->loadResult();
        if($result) return $result;
        else return false;
    }

        function getStaff($title){
        $db= $this->getDbo();
        $query="SELECT uid,firstname,lastname FROM `#__js_ticket_staff`";
        try{
            $db->setQuery($query);
            $rows=$db->loadObjectList();
            $staff=array();
            if($title)
                $staff[]=array('value'=>'','text'=>$title);
            foreach ($rows as $row) {
                $staff[]=array('value'=>$row->uid,'text'=>$row->firstname.' '.$row->lastname);
            }
            return $staff;
        }
        catch (RuntimeException $e){
            echo $db->stderr();
            return false;
        }
        
    }



    function getStaffid($uid){
        if(!is_numeric($uid)) return false;
        $db = $this->getDbo();

        $query = "SELECT id FROM `#__js_ticket_staff` WHERE uid = ".$uid;
        $db->setQuery($query);
        $staffid=$db->loadResult();

        return $staffid;
    }

    function getStaffMembers(){
        $db = $this->getDBO();
        $query = "SELECT * FROM `#__js_ticket_staff` WHERE status = 1";
        $db->setQuery($query);
        $rows = $db->loadObjectList();
        $staffmember = array();
        $staffmember[] =  array('value' => null,  'text' => JText::_('Select Staff'));
        foreach($rows as $row){
            $staffmember[] =  array('value' => $row->id,'text' => $row->firstname . ' ' .$row->lastname);
        }
        return $staffmember;
    }

    function isCurrentStaffDisabled(){
        $db = $this->getDBO();
        $uid = JFactory::getUser()->id;
        $query = "SELECT status FROM `#__js_ticket_staff` WHERE uid =".$uid;
        $db->setQuery($query);
        $status = $db->loadResult();
        if($status == 1) return false;
        else return true;
    }

    function storeStaffSetting(){
        $row = $this->getTable('staff');
        $data = JFactory::getApplication()->input->post->getArray();
        if (!$row->bind($data)){
            $this->setError($row->getError());
            return false;
        }
        if (!$row->check()){
            $this->setError($row->getError());
            return 2;
        }
        if (!$row->store()){
            $this->setError($row->getError());
            $this->updateSystemErrors($row->getError());
            echo $row->getError();
            return false;
        }
        $return = true;
        return $return;
    }

    function getStaffSettings($uid){
        if($uid){
            if(!is_numeric($uid)) return false;
            $db = $this->getDbo();
            $query = "SELECT staff.*,role.name AS rolename ,user.username
                    FROM `#__js_ticket_staff` AS staff
                    JOIN `#__js_ticket_acl_roles` AS role ON role.id = staff.roleid
                    JOIN `#__users` AS user ON user.id = staff.uid
                    WHERE uid = $uid";
            $db->setQuery($query);
            $result = $db->loadObject();
            return $result;
        }
    }

    function getStaffChangeProfile($name,$emailaddress) {
        $db = $this->getDBO();
        $query = "SELECT DISTINCT user.ID AS userid, user.username, user.email AS useremail, user.name AS userdisplayname
                    FROM `#__users` AS user
                    WHERE NOT EXISTS( SELECT staff.id FROM `#__js_ticket_staff` AS staff WHERE user.ID = staff.uid)";
        if (strlen($name) > 1) {
            $name = trim($name);
            $query .= " AND user.username LIKE ".$db->quote('%'.$name.'%');
        }
        if (strlen($emailaddress) > 1) {
            $emailaddress = trim($emailaddress);
            $query .= " AND user.email LIKE ".$db->quote('%'.$emailaddress.'%');
        }
        $db->setQuery($query);
        $users = $db->loadObjectList();
        $result = '';
        foreach ($users AS $user) {
            $result .= '<div class="js-col-md-1">' . $user->userid . '</div>
                        <div class="js-col-md-3"><a href="#" class="js-userpopup-link" data-id="' . $user->userid . '">' . $user->username . '</a></div>
                        <div class="js-col-md-4">' . $user->useremail . '</div>
                        <div class="js-col-md-4">' . $user->userdisplayname . '</div>';
        }
        return $result;
    }

    function saveStaffProfileAjax($value,$datafor) {
        $user = JSSupportticketCurrentUser::getInstance();
        $uid = $user->getId();
        $db = $this->getDBO();
        $query = "UPDATE `#__js_ticket_staff` SET $datafor = " . $db->quote($value) . " WHERE uid = $uid";
        $db->setQuery($query);
        if(!$db->execute()){
            return false;
        }else{
            return true;
        }
    }

    function uploadStaffImage($id) {
        $id = JFactory::getApplication()->input->get('id');
        if(!is_numeric($id)) return false;
        if(!isset($_FILES['filename'])) return false;
        //image upload
        $_FILES['filename']['name']     = $_FILES['filename']['name'][0];
        $_FILES['filename']['type']     = $_FILES['filename']['type'][0];
        $_FILES['filename']['tmp_name'] = $_FILES['filename']['tmp_name'][0];
        $_FILES['filename']['error']    = $_FILES['filename']['error'][0];
        $_FILES['filename']['size']     = $_FILES['filename']['size'][0];
        
        if ($_FILES['filename']['size'] > 0) {
            $datadirectory = $this->getJSModel('config')->getConfigs();
            $datadirectory = $datadirectory['data_directory'];
            $base = JPATH_BASE;
            if(JFactory::getApplication()->isClient('administrator')){
                $base = substr($base, 0, strlen($base) - 14); //remove administrator
            }
            $path = $base . '/' . $datadirectory;
            $imagepath = JURI::root() . '/' . $datadirectory;
            if (!file_exists($path)) { // create user directory
                $this->getJSModel('attachments')->makeDir($path);
            }
            $path = $path . '/staffdata';
            $imagepath = $imagepath . '/staffdata';
            if (!file_exists($path)) { // create user directory
                $this->getJSModel('attachments')->makeDir($path);
            }
            $path = $path . '/staff_' . $id;
            $imagepath = $imagepath . '/staff_' . $id;
            if (!file_exists($path)) { // create user directory
                $this->getJSModel('attachments')->makeDir($path);
            }

            require_once JPATH_COMPONENT_ADMINISTRATOR . '/include/lib/class.upload.php';
            $handle = new upload($_FILES['filename']);
            if ($handle->uploaded) {
                $handle->file_new_name_body = 'staff_' . $id;
                $handle->image_resize = true;
                $handle->image_x = 200;
                $handle->image_y = 200;
                $handle->image_ratio_fill = true;
                $handle->process($path);
                if ($handle->processed) {
                    $handle->clean();
                    $result = $handle->file_dst_name;
                } else {
                    $result = false;
                }
            }
            if ($result != false) {
                $array['errorcode'] = true;
                $db = JFactory::getDbo();
                $db->setQuery("UPDATE `#__js_ticket_staff` SET photo = '" . $result . "' WHERE id = $id");
                $db->execute();
            } else {
                $array['errorcode'] = false;
            }
        }
        $imagepath .= '/' . $result;
        $array['imagepath'] = $imagepath;
        return $array;
    }



    function getStaffAccessDepartments($uid){
        if(!is_numeric($uid)) return false;
        $db = $this->getDBO();
        $query = "SELECT dep.id ,dep.departmentname FROM `#__js_ticket_departments` AS  dep";
        $checkisstaffmember=$this->isStaffMember($uid);
        $clause = ' WHERE ';
        if($checkisstaffmember){
            $clause = " AND ";
            $query.=" JOIN `#__js_ticket_acl_user_access_departments` AS uad ON uad.departmentid=dep.id WHERE uad.uid=".$uid;
        }
        $query .= $clause .' dep.status = 1  ';//AND dep.ispublic = 1
        $db->setQuery($query);
        $rows = $db->loadObjectList();
        $departments = array();
        $departments[] =  array('value' => null,  'text' => JText::_('Select Department'));
        foreach($rows as $row){
                $departments[] =  array('value' => $row->id,'text' => $row->departmentname);
        }
        return $departments;

    }
    function getStaffAccessDepartmentPremade($uid,$id){
        if(!is_numeric($uid)) return false;
        if(!is_numeric($id)) return false;
        $db = $this->getDBO();
        $query = "SELECT d_m_p.id,d_m_p.title FROM `#__js_ticket_department_message_premade` AS d_m_p ";
        $checkisstaffmember=$this->isStaffMember($uid);

        $wherequery=" WHERE d_m_p.isenabled = 1";
        if($checkisstaffmember){
            $query.=" JOIN `#__js_ticket_acl_user_access_departments` AS uad ON d_m_p.departmentid=uad.departmentid";
            $wherequery.=" AND uad.uid=".$uid;
        }

        if($id!=0){
            if(is_numeric($id)==false) return false;
            $wherequery.=" AND d_m_p.departmentid=".$id;
        }
        $query.=$wherequery;
        $db->setQuery($query);
        $rows = $db->loadObjectList();
        $premade = array();
        if(!empty($rows)){
            $premade[] =  array('value' => null,  'text' => JText::_('Select Premade'));
            foreach($rows as $row){
                $premade[] =  array('value' => $row->id,'text' => JText::_($row->title));
            }
        }else $premade[] =  array('value' => null,    'text' => JText::_('Select Premade'));
        return $premade;

    }

    function checkUserExist($val) {
        if (is_numeric($val) == false) return false;
        $db = $this->getDBO();
        $query  = "SELECT COUNT(id) FROM `#__js_ticket_staff` WHERE uid = ".$val;
        $db->setQuery($query);
        $result = $db->loadResult();
        return $result;
    }

    function getMyName($id) {
        if (!is_numeric($id))
            return false;
        $db = $this->getDBO();
        $query = "SELECT CONCAT(firstname,' ',lastname) AS name FROM `#__js_ticket_staff` WHERE id = $id";
        $db->setQuery($query);
        $result = $db->loadResult();
        return $result;
    }

    function getAllStaffMemberByDepId($id) {
        if (!is_numeric($id))
            return false;
        $db = $this->getDBO();
        $query = "SELECT staff.email ,staff.firstname,staff.lastname,
                    (SELECT usr_perm.grant
                        FROM `#__js_ticket_acl_permissions` AS p
                        JOIN `#__js_ticket_acl_user_permissions` AS usr_perm ON usr_perm.permissionid = p.id
                        WHERE p.permission = 'New Ticket Notification' AND usr_perm.staffid = staff.id ) AS canemail
                    FROM `#__js_ticket_acl_user_access_departments` AS dep
                    JOIN `#__js_ticket_staff` AS staff ON staff.id = dep.staffid
                    WHERE dep.departmentid = $id";
        $db->setQuery($query);
        $result = $db->loadObjectList();
        return $result;
    }

    function getStaffEmailByStaffId($id){
        if (!is_numeric($id))
            return false;
        $db = $this->getDBO();
        $query = "SELECT staff.email FROM `#__js_ticket_staff` AS staff WHERE staff.id =".$id;
        $db->setQuery($query);
        $email = $db->loadResult();
        return $email;
    }

    function getStaffInfoByStaffId($id){
        if (!is_numeric($id))
            return false;
        $db = $this->getDBO();
        $query = "SELECT staff.email,                    (SELECT usr_perm.grant
                        FROM `#__js_ticket_acl_permissions` AS p
                        JOIN `#__js_ticket_acl_user_permissions` AS usr_perm ON usr_perm.permissionid = p.id
                        WHERE p.permission = 'New Ticket Notification' AND usr_perm.staffid = staff.id ) AS canemail,staff.firstname,staff.lastname FROM `#__js_ticket_staff` AS staff WHERE staff.id =".$id;
        $db->setQuery($query);
        $data = $db->loadObjectList();
        return $data;
    }

    function getStaffListForReports() {
        $db = JFactory::getDbo();
        $query = "SELECT DISTINCT EXISTS( SELECT staff.id FROM `#__js_ticket_staff` AS staff WHERE user.ID = staff.uid) AS alreadyuser,user.ID AS userid, user.name AS username, user.email AS useremail, user.name AS userdisplayname
                    FROM `#__users` AS user ORDER BY alreadyuser";
        $db->setQuery($query);
        $users = $db->loadObjectList();
        return $users;
    }
    function getUserNameById($id){
        if (!is_numeric($id))
            return false;
        $db = JFactory::getDbo();
        //$query = "SELECT user_nicename AS name FROM `#__users` WHERE id = $id";
        $query = "SELECT name FROM `#__users` WHERE id = $id";
        $db->setQuery($query);
        $username = $db->loadResult();
        return $username;
    }


    function getusersearchstaffreportajax() {
        $userlimit = JFactory::getApplication()->input->get('userlimit',0);
        $maxrecorded = 4;
        $username = JFactory::getApplication()->input->getString('username');
        $name = JFactory::getApplication()->input->getString('name');
        $emailaddress = JFactory::getApplication()->input->getString('emailaddress');
        $db = JFactory::getDbo();
        $wherequery = '';
        if (strlen($name) > 1) {
            $name = trim($name);
            $wherequery .= " AND user.name LIKE ".$db->quote('%'.$name.'%');
        }
        if (strlen($username) > 1) {
            $username = trim($username);
            $wherequery .= " AND user.username LIKE ".$db->quote('%'.$username.'%');
        }
        if (strlen($emailaddress) > 1) {
            $emailaddress = trim($emailaddress);
            $wherequery .= " AND user.email LIKE ".$db->quote('%'.$emailaddress.'%');
        }
        $query = "SELECT DISTINCT COUNT(user.id)
                    FROM `#__users` AS user
                    WHERE EXISTS( SELECT staff.id FROM `#__js_ticket_staff` AS staff WHERE user.id = staff.uid)";
        $query .= $wherequery;
        $db->setQuery($query);
        $total = $db->loadResult();
        $limit = $userlimit * $maxrecorded;
        if($limit >= $total){
          $limit = 0;
        }
        $query = "SELECT DISTINCT user.id AS userid, user.username AS username, user.email AS useremail, user.name AS displayname
                    FROM `#__users` AS user
                    WHERE EXISTS( SELECT staff.id FROM `#__js_ticket_staff` AS staff WHERE user.id = staff.uid)";
        $query .= $wherequery;
        $query .= " LIMIT $limit, $maxrecorded";
        $db->setQuery($query);
        $users = $db->loadObjectList();
        $html = $this->makeUserList($users,$total,$maxrecorded,$userlimit);
        return $html;
    }

    function getUserListForRegistration() {
        $db = JFactory::getDbo();
        $query = "SELECT DISTINCT EXISTS( SELECT staff.id FROM `#__js_ticket_staff` AS staff WHERE user.ID = staff.uid) AS alreadyuser,user.ID AS userid, user.name AS username, user.email AS useremail, user.name AS userdisplayname
                    FROM `#__users` AS user ORDER BY alreadyuser";
        $db->setQuery($query);
        $users = $db->loadObjectList();
        return $users;
    }

    function getusersearchajax() {
        $userlimit = JFactory::getApplication()->input->get('userlimit',0);
        $maxrecorded = 4;
        $db = JFactory::getDbo();
        $name = JFactory::getApplication()->input->getString('name','');
        $username = JFactory::getApplication()->input->getString('username','');
        $emailaddress = JFactory::getApplication()->input->getString('emailaddress','');
        $wherequery = '';
        if($name!=''){
            $name = trim($name);
            $wherequery .= " AND user.name LIKE ".$db->quote('%'.$name.'%');
        }
        if($username!=''){
            $username = trim($username);
            $wherequery .= " AND user.username LIKE ".$db->quote('%'.$username.'%');
        }
        if($emailaddress!=''){
            $emailaddress = trim($emailaddress);
            $wherequery .= " AND user.email LIKE ".$db->quote('%'.$emailaddress.'%');
        }

        $query = "SELECT DISTINCT COUNT(user.id) FROM `#__users` AS user WHERE NOT EXISTS(SELECT id FROM `#__js_ticket_staff` WHERE uid = user.id) ";
        $query .= $wherequery;
        $db->setQuery($query);
        $total = $db->loadResult();
        $limit = $userlimit * $maxrecorded;
        if($limit >= $total){
            $limit = 0;
        }
        $query = "SELECT DISTINCT user.id AS userid, user.username AS username, user.email AS useremail,user.name AS displayname
                FROM `#__users` AS user WHERE NOT EXISTS(SELECT id FROM `#__js_ticket_staff` WHERE uid = user.id) ";
        $query .= $wherequery;
        $query .= " LIMIT $limit, $maxrecorded";
        $db->setQuery($query);
        $users = $db->loadObjectList();
        $html = $this->makeUserList($users,$total,$maxrecorded,$userlimit);
        return $html;
    }
    function getstaffusersearchajax() {
      $userlimit = JFactory::getApplication()->input->get('userlimit',0);
      $maxrecorded = 4;
      $db = JFactory::getDbo();
      $name = JFactory::getApplication()->input->getString('name','');
      $username = JFactory::getApplication()->input->getString('username','');
      $emailaddress = JFactory::getApplication()->input->getString('emailaddress','');
      $wherequery = '';
      if($name!=''){
        $name = trim($name);
        $wherequery = " AND user.name LIKE ".$db->quote('%'.$name.'%');
      }
      if($username!=''){
        $username = trim($username);
        $wherequery = " AND user.username LIKE ".$db->quote('%'.$username.'%');
      }
      if($emailaddress!=''){
        $emailaddress = trim($emailaddress);
        $wherequery = " AND user.email LIKE ".$db->quote('%'.$emailaddress.'%');
      }
      $query = "SELECT DISTINCT COUNT(user.id)
              FROM `#__users` AS user
              JOIN `#__js_ticket_staff` AS staff ON staff.uid = user.id
              WHERE 1 = 1 ";
      $query .= $wherequery;
      $db->setQuery($query);
      $total = $db->loadResult();
      $limit = $userlimit * $maxrecorded;
      if($limit >= $total){
          $limit = 0;
      }
      $query = "SELECT DISTINCT user.id AS userid, user.name AS displayname, user.email AS useremail, user.username AS username
              FROM `#__users` AS user
              JOIN `#__js_ticket_staff` AS staff ON staff.uid = user.id
              WHERE 1 = 1 ";
      $query .= $wherequery;
      $query .= " LIMIT $limit, $maxrecorded ";
      $db->setQuery($query);
      $users = $db->loadObjectList();
      $html = $this->makeUserList($users,$total,$maxrecorded,$userlimit);
      return $html;
    }

    function makeUserList($users,$total,$maxrecorded,$userlimit){
        $html = '';
        if(!empty($users)){
            if(is_array($users)){
                $html ='
                <div class="js-ticket-table-wrp js-col-md-12">
                    <div class="js-ticket-table-header">
                        <div class="js-ticket-table-header-col js-col-md-2 js-col-xs-2">'.JText::_('User ID').'</div>
                        <div class="js-ticket-table-header-col js-col-md-3 js-col-xs-3">'.JText::_('Username').'</div>
                        <div class="js-ticket-table-header-col js-col-md-4 js-col-xs-4">'.JText::_('Email Address').'</div>
                        <div class="js-ticket-table-header-col js-col-md-3 js-col-xs-3">'.JText::_('Name').'</div>
                    </div>
                    <div class="js-ticket-table-body">';
                foreach($users AS $user){
                    $html .='
                        <div class="js-ticket-data-row">
                                <div class="js-ticket-table-body-col js-col-md-2 js-col-xs-2">
                                    <span class="js-ticket-display-block">'.JText::_('User ID').'</span>'.$user->userid.'
                                </div>
                                <div class="js-ticket-table-body-col js-col-md-3 js-col-xs-3">
                                    <span class="js-ticket-display-block">'.JText::_('Username:').'</span>
                                    <span class="js-ticket-title"><a href="#" class="js-userpopup-link" data-id="'.$user->userid.'" data-email="'.$user->useremail.'" data-name="'.$user->username.'">'.$user->username.'</a></span>
                                </div>
                                <div class="js-ticket-table-body-col js-col-md-4 js-col-xs-4">
                                    <span class="js-ticket-display-block">'.JText::_('Email:').'</span>
                                    '.$user->useremail.'
                                </div>
                                <div class="js-ticket-table-body-col js-col-md-3 js-col-xs-3">
                                    <span class="js-ticket-display-block">'.JText::_('Name:').'</span>
                                    '.$user->displayname.'
                                </div>
                            </div>';
                }
                $html .='</div>';
            }
                $num_of_pages = ceil($total / $maxrecorded);
                $num_of_pages = ($num_of_pages > 0) ? ceil($num_of_pages) : floor($num_of_pages);
                if($num_of_pages > 0){
                    $page_html = '';
                    $prev = $userlimit;
                    if($prev > 0){
                        $page_html .= '<a class="jsst_userlink" href="#" onclick="updateuserlist('.($prev - 1).');">'.JText::_('Previous').'</a>';
                    }
                    for($i = 0; $i < $num_of_pages; $i++){
                        if($i == $userlimit)
                            $page_html .= '<span class="jsst_userlink selected" >'.($i + 1).'</span>';
                        else
                            $page_html .= '<a class="jsst_userlink" href="#" onclick="updateuserlist('.$i.');">'.($i + 1).'</a>';

                    }
                    $next = $userlimit + 1;
                    if($next < $num_of_pages){
                        $page_html .= '<a class="jsst_userlink" href="#" onclick="updateuserlist('.$next.');">'.JText::_('Next').'</a>';
                    }
                    if($page_html != ''){
                        $html .= '<div class="jsst_userpages">'.$page_html.'</div>';
                    }
                }
            
        }else{
            $html = messagesLayout::getRecordNotFound();
        }
        return $html;
    }

    function isUserStaff($uid = null) {
        $db = JFactory::getDbo();
        $user = JFactory::getUser();
        if ($uid == null)
            $uid = $user->id;
        if ($uid == 0) {
            return false;
        } else {
            $query = "SELECT id FROM `#__js_ticket_staff` WHERE uid = " . $uid;
            $db->setQuery($query);
            $staffid = $db->loadResult();
            if ($staffid) {
                $query = "SELECT id FROM `#__js_ticket_staff` WHERE uid = " . $uid . " AND status = 1";
                $db->setQuery($query);
                $staffenabled = $db->loadResult();
                if ($staffenabled) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        }
    }


    function storeTimeTaken($data,$ref_no,$ref_for){
        $user = JSSupportticketCurrentUser::getInstance();
        if($user->getIsAdmin()){
            return false;
        }
        $created = date('Y-m-d H:i:s');
        $conflict = 0;
        if(!isset($_SESSION['ticket_time_start'][$data['ticketid']])){
            return;
        }
        if(!isset($data['timer_time_in_seconds']) || $data['timer_time_in_seconds'] == ''){
            return;
        }
        $session_time_start = $_SESSION['ticket_time_start'][$data['ticketid']];
        
        $time1 = new DateTime($session_time_start);
        $time2 = new DateTime($created);
        $interval = $time1->diff($time2);
        $systemtime = $interval->format('%s');
        if($data['timer_time_in_seconds'] > $systemtime){
            $conflict = 1;
        }
        $row = $this->getTable('stafftime');
        $data2['ticketid'] =  $data['ticketid'];
        $data2['staffid'] =  $data['staffid'];
        $data2['referencefor'] =  $ref_for;
        $data2['referenceid'] =  $ref_no;
        $data2['usertime'] =  $data['timer_time_in_seconds'];
        $data2['systemtime'] =  $systemtime;
        $data2['conflict'] =  $conflict;
        $data2['description'] =  $data['timer_edit_desc'];
        $data2['status'] =  1;
        $data2['created'] =  $created;
        if (!$row->bind($data2)) {
            $this->setError($row->getError());
            $return_value = false;
        }
        if (!$row->check()) {
            $this->setError($row->getError());
            $return_value = false;
        }
        if (!$row->store()) {
            $this->updateSystemErrors($row->getError());
            $this->setError($row->getError());
            $return_value = false;
        }
    return;
    }
    
    function getTimeTakenByTicketId($id){
        $db = JFactory::getDbo();
        if(!is_numeric($id)) return false;
        $query = "SELECT SUM(usertime) 
                    FROM `#__js_ticket_staff_time`
                    WHERE ticketid = ".$id;
        $db->setQuery($query);
        $total = $db->loadResult();
        return $total;
    }
    function getTimeTakenByTicketIdAndStaffId($id,$staffid){
        $db = JFactory::getDbo();
        if(!is_numeric($id)) return false;
        $query = "SELECT SUM(usertime) 
                    FROM `#__js_ticket_staff_time`
                    WHERE ticketid = ".$id ." AND staffid = ".$staffid;
        $db->setQuery($query);
        $total = $db->loadResult();
        return $total;
    }

    function getAverageTimeByStaffId($id){
        $db = JFactory::getDbo();
        if(!is_numeric($id)) return false;
        $query = "SELECT COUNT(DISTINCT(ticketid)) AS tickets , SUM(usertime) AS usertime , SUM(systemtime) AS systemtime,SUM(conflict) as conflict
                    FROM `#__js_ticket_staff_time`
                    WHERE staffid = ".$id;
        $db->setQuery($query);
        $total = $db->loadObject();
        $result[0] = 0;
        $result[1] = 0;
        if(!empty($total) && $total->tickets > 0){
            $result[0] = $total->usertime / $total->tickets;
            if($total->conflict > 0){
                $result[1] = 1;
            }
        }
        return $result;
    }

    function getTimeTakenByReferenceId($id,$referencefor){
        if(!is_numeric($id)) return false;
        $query = "SELECT usertime 
                    FROM `#__js_ticket_staff_time`
                    WHERE referencefor = ".$referencefor." AND  referenceid = ".$id;
        $db->setQuery($query);
        $time = $db->loadResult();
        return $time;
    }

}
?>