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/jssupportticket.php

<?php

/**
 * @Copyright Copyright (C) 2015 ... 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 22, 2015
  ^
  + Project: 	JS Tickets
  ^
 */
defined('_JEXEC') or die('Not Allowed');

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

class JSSupportticketModelJSSupportticket extends JSSupportTicketModel{
    function __construct() {
        parent::__construct();
    }

    function getTicketsSummaryForAdminModule($month_back = 1){
        if(!is_numeric($month_back)){
            $month_back = 1;
        }

        $db = JFactory::getDbo();
        $result = array();
        $curdate = date('Y-m-d');
        $fromdate = date('Y-m-d', strtotime("now -".$month_back." month"));

        $query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= ".$db->quote($fromdate)." AND date(created) <= ".$db->quote($curdate);
        $db->setQuery($query);
        $openticket = $db->loadResult();

        $query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= ".$db->quote($fromdate)." AND date(created) <= ".$db->quote($curdate);
        $db->setQuery($query);
        $answeredticket = $db->loadResult();

        $query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= ".$db->quote($fromdate)." AND date(created) <= ".$db->quote($curdate);
        $db->setQuery($query);
        $overdueticket = $db->loadResult();

        $query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= ".$db->quote($fromdate)." AND date(created) <= ".$db->quote($curdate);
        $db->setQuery($query);
        $pendingticket = $db->loadResult();

        $result = array();
        $result['new'] = $openticket;
        $result['answered'] = $answeredticket;
        $result['overdue'] = $overdueticket;
        $result['pending'] = $pendingticket;

        return $result;
    }

    function getLatestTicketsAdminModule(){
        $db = JFactory::getDbo();
        $query = "SELECT ticket.id,ticket.ticketid,ticket.subject,ticket.name,ticket.created,priority.priority,priority.prioritycolour,ticket.status
            FROM `#__js_ticket_tickets` AS ticket
            JOIN `#__js_ticket_priorities` AS priority ON priority.id = ticket.priorityid
            ORDER BY ticket.status ASC, ticket.created DESC LIMIT 0, 5";
        $db->setQuery($query);
        $result['tickets'] = $db->loadObjectList();
        $result['date_format'] = $this->getJSModelForAdminMP('config')->getConfigurationByName('date_format');
        return $result;
    }

    function getControlPanelData(){
    	$db = JFactory::getDbo();
    	$result = array();
        $curdate = date('Y-m-d');
        $fromdate = date('Y-m-d', strtotime("now -1 month"));

        $query = "SELECT priority.priority,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE priorityid = priority.id AND status = 0 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= ".$db->quote($fromdate)." AND date(created) <= ".$db->quote($curdate)." ) AS totalticket
                    FROM `#__js_ticket_priorities` AS priority ORDER BY priority.priority";
        $db->setQuery($query);
        $openticket_pr = $db->loadObjectList();
        $query = "SELECT priority.priority,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE priorityid = priority.id AND isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= ".$db->quote($fromdate)." AND date(created) <= ".$db->quote($curdate).") AS totalticket
                    FROM `#__js_ticket_priorities` AS priority ORDER BY priority.priority";
        $db->setQuery($query);
        $answeredticket_pr = $db->loadObjectList();
        $query = "SELECT priority.priority,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE priorityid = priority.id AND isoverdue = 1 AND status != 4 AND date(created) >= ".$db->quote($fromdate)." AND date(created) <= ".$db->quote($curdate).") AS totalticket
                    FROM `#__js_ticket_priorities` AS priority ORDER BY priority.priority";
        $db->setQuery($query);
        $overdueticket_pr = $db->loadObjectList();
        $query = "SELECT priority.priority,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE priorityid = priority.id  AND isanswered != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= ".$db->quote($fromdate)." AND date(created) <= ".$db->quote($curdate).") AS totalticket
                    FROM `#__js_ticket_priorities` AS priority ORDER BY priority.priority";
        $db->setQuery($query);
        $pendingticket_pr = $db->loadObjectList();

        $query = "SELECT priority.priority,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE priorityid = priority.id  AND date(created) >= ".$db->quote($fromdate)." AND date(created) <= ".$db->quote($curdate).") AS totalticket
                    FROM `#__js_ticket_priorities` AS priority ORDER BY priority.priority";
        $db->setQuery($query);
        $totalticket_pr = $db->loadObjectList();


        $result['stack_chart_horizontal']['title'] = "['".JText::_("Tickets")."',";
        $result['stack_chart_horizontal']['data'] = "['".JText::_("Overdue")."',";
        foreach($overdueticket_pr AS $pr){
            $result['stack_chart_horizontal']['title'] .= "'".JText::_($pr->priority)."',";
            $result['stack_chart_horizontal']['data'] .= $pr->totalticket.",";
        }
        $result['stack_chart_horizontal']['title'] .= "]";
        $result['stack_chart_horizontal']['data'] .= "],['".JText::_("Pending")."',";

        foreach($pendingticket_pr AS $pr){
            $result['stack_chart_horizontal']['data'] .= $pr->totalticket.",";
        }

        $result['stack_chart_horizontal']['data'] .= "],['".JText::_("Answered")."',";

        foreach($answeredticket_pr AS $pr){
            $result['stack_chart_horizontal']['data'] .= $pr->totalticket.",";
        }

        $result['stack_chart_horizontal']['data'] .= "],['".JText::_("New")."',";

        foreach($openticket_pr AS $pr){
            $result['stack_chart_horizontal']['data'] .= $pr->totalticket.",";
        }

        $result['stack_chart_horizontal']['data'] .= "]";

        //To show priority colors on chart
        $jsonColorList = "[";

        $query = "SELECT prioritycolour FROM `#__js_ticket_priorities` ORDER BY priority ";
        $db->setQuery($query);
        foreach($db->loadObjectList() as $priority){
            $jsonColorList.= "'".$priority->prioritycolour."',";
        }
        $jsonColorList .= "]";
        $result['stack_chart_horizontal']['colors'] = $jsonColorList;
        //end priority colors

        $result['ticket_total']['openticket'] = 0;
        $result['ticket_total']['overdueticket'] = 0;
        $result['ticket_total']['pendingticket'] = 0;
        $result['ticket_total']['answeredticket'] = 0;
        $result['ticket_total']['totalticket'] = 0;

        $count = count($openticket_pr);
        for($i = 0;$i < $count; $i++){
            $result['ticket_total']['openticket'] += $openticket_pr[$i]->totalticket;
            $result['ticket_total']['overdueticket'] += $overdueticket_pr[$i]->totalticket;
            $result['ticket_total']['pendingticket'] += $pendingticket_pr[$i]->totalticket;
            $result['ticket_total']['answeredticket'] += $answeredticket_pr[$i]->totalticket;
            $result['ticket_total']['totalticket'] += $totalticket_pr[$i]->totalticket;
        }

        //today tickets for chart
        $query = "SELECT priority.priority,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE priorityid = priority.id AND date(created) = '".$curdate."')  AS totalticket
                    FROM `#__js_ticket_priorities` AS priority ORDER BY priority.priority";
        $db->setQuery($query);
        $priorities = $db->loadObjectList();
        $result['today_ticket_chart']['title'] = "['".JText::_('Priority')."',";
        $result['today_ticket_chart']['data'] = "['',";
        foreach($priorities AS $pr){
            $result['today_ticket_chart']['title'] .= "'".JText::_($pr->priority)."',";
            $result['today_ticket_chart']['data'] .= $pr->totalticket.",";
        }
        $result['today_ticket_chart']['title'] .= "]";
        $result['today_ticket_chart']['data'] .= "]";

        $query = "SELECT ticket.id,ticket.ticketid,ticket.subject,ticket.name,ticket.created,priority.priority,priority.prioritycolour,ticket.status
        		FROM `#__js_ticket_tickets` AS ticket
        		JOIN `#__js_ticket_priorities` AS priority ON priority.id = ticket.priorityid
        		ORDER BY ticket.status ASC, ticket.created DESC LIMIT 0, 5";
        $db->setQuery($query);
        $result['tickets'] = $db->loadObjectList();
        return $result;
    }
    function getStaffLatestTickets() {
        $db = JFactory::getDbo();
        $result = array();
        $user = JSSupportticketCurrentUser::getInstance();
        if($user->getIsGuest()){
            return false;
        }
        $staffid = $user->getStaffid();

        $query = "SELECT ticket.id,ticket.ticketid,ticket.subject,ticket.name,ticket.created,priority.priority,priority.prioritycolour,ticket.status,department.departmentname,CONCAT(staff.firstname ,'  ' ,staff.lastname) AS staffname,staff.id AS staffid, staff.photo AS staffphoto
                    FROM `#__js_ticket_tickets` AS ticket
                    JOIN `#__js_ticket_priorities` AS priority ON priority.id = ticket.priorityid
                    LEFT JOIN `#__js_ticket_departments` AS department ON ticket.departmentid = department.id
                    LEFT JOIN `#__js_ticket_staff` AS staff ON ticket.staffid = staff.id
                    WHERE ticket.departmentid IN (SELECT dept.departmentid FROM `#__js_ticket_acl_user_access_departments` AS dept WHERE dept.staffid = $staffid)
                    ORDER BY ticket.status ASC, ticket.created DESC LIMIT 0, 5";
        $db->setQuery($query);
        $result = $db->loadObjectList();
        return $result;
    }

    function getStaffControlPanelData() {
        $db = JFactory::getDbo();
        $result = array();

        $query = "SELECT COUNT(id) FROM `#__js_ticket_tickets`";
        $db->setQuery($query);
        $total_ticket = $db->loadResult();

        $query = "SELECT COUNT(id) FROM `#__js_ticket_departments`";
        $db->setQuery($query);
        $total_department = $db->loadResult();

        $query = "SELECT COUNT(id) FROM `#__js_ticket_staff`";
        $db->setQuery($query);
        $total_staff = $db->loadResult();

        $query = "SELECT COUNT(id) FROM `#__js_ticket_feedbacks`";
        $db->setQuery($query);
        $total_feedback = $db->loadResult();

        $result = array();
        $result['totalticket'] = $total_ticket;
        $result['totaldepartment'] = $total_department;
        $result['totalstaff'] = $total_staff;
        $result['totalfeedback'] = $total_feedback;
        return $result;
    }

    function storeTheme($data) {
        $base = substr(JPATH_BASE,0,(strlen(JPATH_BASE)-14));
        $filepath = $base.'/components/com_jssupportticket/include/css/color.php';
        $filestring = file_get_contents($filepath);
        $this->replaceString($filestring, 1, $data);
        $this->replaceString($filestring, 2, $data);
        $this->replaceString($filestring, 3, $data);
        $this->replaceString($filestring, 4, $data);
        $this->replaceString($filestring, 5, $data);
        $this->replaceString($filestring, 6, $data);
        $this->replaceString($filestring, 7, $data);
        if (file_put_contents($filepath, $filestring)) {
            return true;
        } else {
            return false;
        }
    }

    function replaceString(&$filestring, $colorNo, $data) {
        if (strstr($filestring, '$color' . $colorNo)) {
            $path1 = strpos($filestring, '$color' . $colorNo);
            $path2 = strpos($filestring, ';', $path1);
            $filestring = substr_replace($filestring, '$color' . $colorNo . ' = "' . $data['color' . $colorNo] . '";', $path1, $path2 - $path1 + 1);
        }
    }

    function getColorCode($filestring, $colorNo) {
        if (strstr($filestring, '$color' . $colorNo)) {
            $path1 = strpos($filestring, '$color' . $colorNo);
            $path1 = strpos($filestring, '#', $path1);
            $path2 = strpos($filestring, ';', $path1);
            $colorcode = substr($filestring, $path1, $path2 - $path1 - 1);
            return $colorcode;
        }
    }

    function getCurrentTheme() {
        $filepath = '../components/com_jssupportticket/include/css/color.php';
        $filestring = file_get_contents($filepath);
        $theme['color1'] = $this->getColorCode($filestring, 1);
        $theme['color2'] = $this->getColorCode($filestring, 2);
        $theme['color3'] = $this->getColorCode($filestring, 3);
        $theme['color4'] = $this->getColorCode($filestring, 4);
        $theme['color5'] = $this->getColorCode($filestring, 5);
        $theme['color6'] = $this->getColorCode($filestring, 6);
        $theme['color7'] = $this->getColorCode($filestring, 7);
        $result[0] = $theme;
        return $result;
    }

    function getListTranslations() {

        $result = array();
        $result['error'] = false;

        $path = JPATH_ADMINISTRATOR.'/language';

        if( ! is_writeable($path)){
            $result['error'] = JText::_('Dir is not writeable').' '.$path;

        }else{

            if($this->isConnected()){

                $version = $this->getJSModel('config')->getConfigByFor('version');
                if(!isset($version['versiontype'])){
                    $version['versiontype'] = $this->getJSModel('config')->getConfigurationByName('versiontype');
                }

                $url = "https://www.joomsky.com/translations/api/1.0/index.php";
                $post_data['product'] ='js-support-ticket-joomla';
                $post_data['domain'] = JURI::root();
                $post_data['producttype'] = $version['versiontype'];
                $post_data['productcode'] = 'jssupportticket';
                if(isset($version['version'])) $productversion = $version['version']; else $productversion = "";
                $post_data['productversion'] = $productversion;
                $post_data['JVERSION'] = JVERSION;
                $post_data['method'] = 'getTranslations';

                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
                $response = curl_exec($ch);
                curl_close($ch);

                $result['data'] = $response;
            }else{
                $result['error'] = JText::_('Unable to connect to server');
            }
        }

        $result = json_encode($result);

        return $result;
    }

    function makeLanguageCode($lang_name , $path){

        if( strpos($lang_name, '_') !== false ) {
            $lang_name = str_replace('_', '-', $lang_name);
        }else{
            if($lang_name == 'en'){
                $lang_name = $lang_name.'-'.strtoupper('gb');
            }elseif($lang_name == 'sv'){
                $lang_name = $lang_name.'-'.strtoupper('se');
            }elseif($lang_name == 'ar'){
                $lang_folders = scandir($path);
                $n = count($lang_folders);
                for ($i = 0; $i < $n; $i++) {
                    if($lang_folders[$i] == 'ar-SA'){
                        $lang_name = $lang_folders[$i];
                        $i = $n;
                    }elseif ($lang_folders[$i] == 'ar-EG'){
                        $lang_name = $lang_folders[$i];
                        $i = $n;
                    }elseif ($lang_folders[$i] == 'ar-AA'){
                        $lang_name = $lang_folders[$i];
                        $i = $n;
                    }
                }
            }else{
                $lang_name = $lang_name.'-'.strtoupper($lang_name);
            }
        }
        return $lang_name;
    }

    function validateAndShowDownloadFileName( $lang_name ){

        if($lang_name == '')
            return '';
        $result = array();
        $path = JPATH_ADMINISTRATOR.'/language';

        $final_name = $this->makeLanguageCode($lang_name , $path);

        $result['error'] = false;
        if(!file_exists($path)){
            $result['error'] = JText::_('Dir not exist').': '.$path;
        }elseif(!is_writeable($path)){
            $result['error'] = JText::_('Dir is not writeable').': '.$path;
        }else{
            $result['input'] = '<input id="languagecode" class="text_area" type="text" value="'.$final_name.'" name="languagecode">';
            $result['path'] = $path;
        }
        $result = json_encode($result);
        return $result;
    }

    function getLanguageTranslation($lang_name , $language_code){

        $result = array();
        $result['error'] = false;
        $path = JPATH_ADMINISTRATOR.'/language';

        if($lang_name == '' || $language_code == ''){
            $result['error'] = JText::_('Empty values are not allowed');
            return json_encode($result);
        }

        $path = $path.'/'.$language_code;
        $final_path = $path.'/'.$language_code.'.com_jssupportticket.ini';

        if(!file_exists($path)){
            $result['error'] = JText::_('Required language is not installed').': '.$language_code;
            return json_encode($result);
        }

        if(!is_writeable($path)){
            $result['error'] = JText::_('Dir is not writeable').': '.$path;
            return json_encode($result);
        }

        if(!file_exists($final_path)){
            touch($final_path);
        }

        if(!is_writeable($final_path)){
            $result['error'] = JText::_('File is not writeable').': '.$final_path;
        }else{

            if($this->isConnected()){

                $version = $this->getJSModel('config')->getConfigByFor('version');
                if(isset($version['versiontype'])) $versiontype = $version['versiontype']; else $versiontype = "";

                if(isset($version['version'])) $productversion = $version['version']; else $productversion = "";

                $url = "https://www.joomsky.com/translations/api/1.0/index.php";
                $post_data['product'] ='js-support-ticket-joomla';
                $post_data['domain'] = JURI::root();
                $post_data['versiontype'] = $versiontype;
                $post_data['productcode'] = 'jssupportticket';
                $post_data['productversion'] = $productversion;
                $post_data['JVERSION'] = JVERSION;
                $post_data['translationcode'] = $lang_name;
                $post_data['method'] = 'getTranslationFile';
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
                $response = curl_exec($ch);
                curl_close($ch);
                $array = json_decode($response, true);

                $ret = $this->writeLanguageFile( $final_path , $array['file']);

                if($ret != false){
                    $url = "https://www.joomsky.com/translations/api/1.0/index.php";
                    $post_data['product'] ='js-support-ticket-joomla';
                    $post_data['domain'] = JURI::root();
                $post_data['versiontype'] = $versiontype;
                    $post_data['productcode'] = 'jssupportticket';
                $post_data['productversion'] = $productversion;
                    $post_data['JVERSION'] = JVERSION;
                    $post_data['folder'] = $array['foldername'];
                    $ch = curl_init();
                    curl_setopt($ch, CURLOPT_URL, $url);
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
                    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
                    $response = curl_exec($ch);
                    curl_close($ch);
                }
                $result['data'] = JText::_('File Downloaded Successfully');
            }else{
                $result['error'] = JText::_('Unable to connect to server');
            }
        }

        $result = json_encode($result);

        return $result;

    }

    function writeLanguageFile( $path , $url ){
        $result = file_put_contents($path, fopen($url, 'r'));
        return $result;
    }

    function isConnected(){

        $connected = @fsockopen("www.google.com", 80);
        if ($connected){
            $is_conn = true; //action when connected
            fclose($connected);
        }else{
            $is_conn = false; //action in connection failure
        }
        return $is_conn;
    }

    function stripslashesFull($input){// testing this function/.
        if (is_array($input)) {
            $input = array_map(array($this,'stripslashesFull'), $input);
        } elseif (is_object($input)) {
            $vars = get_object_vars($input);
            foreach ($vars as $k=>$v) {
                $input->{$k} = stripslashesFull($v);
            }
        } else {
            $input = stripslashes($input);
        }
        return $input;
    }

    function getUserTicketStatsForCP(){
        $db = JFactory::getDbo();

        $user = JSSupportticketCurrentUser::getInstance();
        if($user->getIsGuest())
            return false;

        $staffid = $user->getStaffid();
        $all_ticket = $user->checkUserPermission('All Tickets');
        if($staffid){
            if($all_ticket){
                $allticket_query = ' 1 = 1 ';
            }else{
                $allticket_query = " (ticket.staffid = $staffid OR ticket.departmentid IN (SELECT dept.departmentid FROM `#__js_ticket_acl_user_access_departments` AS dept WHERE dept.staffid = $staffid)) ";
            }
        }else{
            $allticket_query = "ticket.uid = ". $user->getId();
        }


        $result = array();

        $query = "SELECT COUNT(ticket.id)
                FROM `#__js_ticket_tickets` AS ticket
                JOIN `#__js_ticket_priorities` AS priority ON ticket.priorityid = priority.id
                LEFT JOIN `#__js_ticket_departments` AS department ON ticket.departmentid = department.id
                WHERE $allticket_query AND (ticket.status != 4 AND ticket.status != 5)";
        $db->setQuery($query);
        $result['openticket'] = $db->loadResult();

        $query = "SELECT COUNT(ticket.id)
                FROM `#__js_ticket_tickets` AS ticket
                LEFT JOIN `#__js_ticket_departments` AS department ON ticket.departmentid = department.id
                JOIN `#__js_ticket_priorities` AS priority ON ticket.priorityid = priority.id
                WHERE $allticket_query AND ticket.status = 3 ";
        $db->setQuery($query);
        $result['answeredticket'] = $db->loadResult();

        $query = "SELECT COUNT(ticket.id)
                FROM `#__js_ticket_tickets` AS ticket
                LEFT JOIN `#__js_ticket_departments` AS department ON ticket.departmentid = department.id
                JOIN `#__js_ticket_priorities` AS priority ON ticket.priorityid = priority.id
                WHERE $allticket_query AND (ticket.status = 4 OR ticket.status = 5)";
        $db->setQuery($query);
        $result['closedticket'] = $db->loadResult();

        $query = "SELECT COUNT(ticket.id)
                FROM `#__js_ticket_tickets` AS ticket
                LEFT JOIN `#__js_ticket_departments` AS department ON ticket.departmentid = department.id
                JOIN `#__js_ticket_priorities` AS priority ON ticket.priorityid = priority.id
                WHERE $allticket_query";
        $db->setQuery($query);
        $result['allticket'] = $db->loadResult();

        return $result;
    }

    function joomlaContentArticles(){
        $db = JFactory::getDbo();
        $query = $db->getQuery(true);
        $query->select('id AS value, title AS text');
        $query->from('#__content');

        $db->setQuery((string)$query);
        $res = $db->loadObjectList();
        return $res;
    }
    function getHtmlInput($htmlText){
        $app = JFactory::getApplication();
        $text = JComponentHelper::filterText($app->input->get($htmlText, '', 'raw'));
        return $text;    
    }

}
?>