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/knowledgebase.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');
ini_set('memory_limit', '-1');

class JSSupportticketModelKnowledgebase extends JSSupportTicketModel {

    function __construct() {
        parent::__construct();
    }
               
    function storeKnowledgeBaseCategory($data){
        $user = JSSupportticketCurrentUser::getInstance();
        if(!$user->getIsAdmin()){
            $permission = ($data['id'] == '') ? 'Add Category' : 'Edit Category';
            $per = $user->checkUserPermission($permission);
            if ($per == false) 
                return PERMISSION_ERROR;
        }
        $data['staffid'] = $user->getStaffId();
        if(isset($_FILES['filename']['name'])) 
            $data['logo'] = $_FILES['filename']['name'];

        if($data['parentid'] == "") $data['parentid']=0;
        $row = $this->getTable('knowledgebasecategory');
        if (!$row->bind($data)){
            $this->setError($row->getError());
            return SAVE_ERROR;
        }
        if (!$row->check()){
            $this->setError($row->getError());
            return SAVE_ERROR;
        }
        if (!$row->store()){
            $this->updateSystemErrors($row->getError());
            $this->setError($row->getError());
            return SAVE_ERROR;
        }
        $categoryid = $row->id;
        if($_FILES['filename']['name'] != ''){
            if($_FILES['filename']['size'] > 0){
                $uploaded = $this->getJSModel('attachments')->uploadFile($categoryid, 1, 1, 'category');
                if($uploaded == false){
                    return FILE_RW_ERROR;
                }
            }
        }
        JSSupportticketMessage::$recordid = $categoryid;
        return SAVED;
    }

    function getCategoryFor($id){
        if(!is_numeric($id)) return false;
        $db = $this->getDBO();
        $result = array();
        $query = "SELECT kbcategory.* from `#__js_ticket_categories` AS kbcategory ";
                $query .=" WHERE kbcategory.id =".$id;
        $db->setQuery($query);
        $categoryfor=$db->loadObject();
        if($categoryfor->kb==1)$result['kb']=$categoryfor->kb;
        if($categoryfor->announcement==1)$result['announcement']=$categoryfor->announcement;
        if($categoryfor->faqs==1)$result['faqs']=$categoryfor->faqs;
        if($categoryfor->downloads==1)$result['downloads']=$categoryfor->downloads;
        return $result;
    }

    function getChildCategory($parentid){
        if(!is_numeric($parentid)) return false;
        $db = $this->getDBO();
        $query = "SELECT count(kbcategory.id) from `#__js_ticket_categories` AS kbcategory ";
        $query .=" WHERE kbcategory.parentid =".$parentid;
        $db->setQuery($query);
        $childcategories = $db->loadResult();
        if($childcategories > 0) return true;
        else return false;
    }

    function checkCategoryExists($name){
        if($name){
            $db = $this->getDBO();
            $query = "SELECT count(id) from `#__js_ticket_categories` WHERE name=".$db->quote($name);
            $db->setQuery($query);
            $exist = $db->loadResult();
            if($exist > 0) return true;
            else return false;
        }
    }
    
    function getCategoryForForm($id) {
        if($id) if(!is_numeric($id)) return false;
        $db = $this->getDBO();
        $categories = $this->getCategories();
        if(isset($id) && $id <> ''){
            $query = "SELECT kbcategory.*
                      FROM `#__js_ticket_categories` AS kbcategory
                      WHERE kbcategory.id = ".$id;
            $db->setQuery($query);
            $kbcategory = $db->loadObject();
        }
        $status = array(array('value' => null, 'text' => JText::_('Select Status')),array('value' => '1', 'text' => JText::_('Active')),array('value' => '0', 'text' => JText::_('Disabled')));
        if(isset($kbcategory)){
            $lists['categories'] = JHTML::_('select.genericList', $categories, 'parentid', 'class="inputbox js-ticket-form-field-input " ' . ' onchange="getTypeForByParentId(this.value);"', 'value', 'text',$kbcategory->parentid);
            $lists['status'] = JHTML::_('select.genericList', $status, 'status', 'class="inputbox js-ticket-form-field-input " ' . '', 'value', 'text',$kbcategory->status);
        }else{
            $lists['categories'] = JHTML::_('select.genericList', $categories, 'parentid', 'class="inputbox js-ticket-form-field-input " ' . ' onchange="getTypeForByParentId(this.value);"', 'value', 'text','');
            $lists['status'] = JHTML::_('select.genericList', $status, 'status', 'class="inputbox js-ticket-form-field-input " ' . '', 'value', 'text',1);
        }
        if(isset($kbcategory))
            $result[0] = $kbcategory;
        $result[1] = $lists;
        return $result;

    }
    function getArticleForForm($id) {
        if($id) if(!is_numeric($id)) return false;
        $db = $this->getDBO();

        $categories = $this->getCategories('kb');
        if(isset($id) && $id <> ''){
            $query = "SELECT kbarticle.*  FROM `#__js_ticket_articles` AS kbarticle  WHERE kbarticle.id = ".$id;
            $db->setQuery($query);
            $kbarticle = $db->loadObject();
            $query = "SELECT attach.*  FROM `#__js_ticket_articles_attachments` AS attach  WHERE attach.articleid = ".$id;
            $db->setQuery($query);
            $article_attachments = $db->loadObjectList();
        }
        $status = array(array('value' => null, 'text' => JText::_('Select Status')),array('value' => '1', 'text' => JText::_('Active')),array('value' => '0', 'text' => JText::_('Disabled')));
        if(isset($id) && $id <> ''){
            $lists['categories'] = JHTML::_('select.genericList', $categories, 'categoryid', 'class="inputbox" ' . '', 'value', 'text',$kbarticle->categoryid);
            $lists['status'] = JHTML::_('select.genericList', $status, 'status', 'class="inputbox " ' . '', 'value', 'text',$kbarticle->status);
        }else{
            $lists['categories'] = JHTML::_('select.genericList', $categories, 'categoryid', 'class="inputbox" ' . '', 'value', 'text','');
            $lists['status'] = JHTML::_('select.genericList', $status, 'status', 'class="inputbox " ' . '', 'value', 'text',1);
        }
        if(isset($kbarticle)){
            $result[0] = $kbarticle;
            $result[4] = $article_attachments;
		}
        $result[1] = $lists;
        return $result;
    }

    function getAllCategories($kbcattitle,$limitstart,$limit) {
        $db = $this->getDBO();
        $result = array();
        $prefix = '|-- ';
        $wherequery="";
        
        if($kbcattitle){
            $kbcattitle = trim($kbcattitle);
            $wherequery.=" AND kbcategory.name LIKE ".$db->quote('%'.$kbcattitle.'%');
        }

        $query = "SELECT COUNT(id) FROM `#__js_ticket_categories` AS kbcategory WHERE kbcategory.parentid = 0" ;
        $query .= $wherequery;
        $db->setQuery($query);
        $total = $db->loadResult();

        $query = "Select kbcategory.* from `#__js_ticket_categories` AS kbcategory WHERE kbcategory.parentid = 0";
        $query .= $wherequery;
        $db->setQuery($query);
        $knowledgebase= $db->loadObjectList();
        if(isset($knowledgebase)){
            foreach ($knowledgebase as $kb){
                $record =(Object)array();
                $record->id =$kb->id;
                $record->name =JText::_($kb->name);
                //$record->type =$kb->type;
                $record->status =$kb->status;
                $record->created =$kb->created;
                $result[] = $record;
                $result=$this->getknowledgebasecategorychild($kb->id,$prefix,$result);
            }
        }
        $finalresult=array();
        $paginationtotal=count($result); //manual paination total result in array
        $limit=$limit+$limitstart;
        if($limit >= $paginationtotal) $limit=$paginationtotal;
        for($i=$limitstart;$i<$limit;$i++){
            $finalresult[]=$result[$i];
        }
        $returnvalue['result'] = $finalresult;
        $returnvalue['total'] = count($result);
        $lists['categories'] = $kbcattitle;
        $returnvalue['lists'] = $lists;
        return $returnvalue;
    }

    function getknowledgebasecategorychild($parentid,$prefix,&$result){
        
        if(!is_numeric($parentid)) return false;
        $db = $this->getDBO();
        $q = "SELECT * FROM `#__js_ticket_categories` where parentid = ".$parentid;
        $db->setQuery($q);
        $kbcategories = $db->loadObjectList();
        foreach($kbcategories as $cat){
            $subrecord = (Object)array();
            $subrecord->id =$cat->id;
            $subrecord->name =$prefix.JText::_($cat->name);
            //$subrecord->type =$cat->type;
            $subrecord->status =$cat->status;
            $subrecord->created =$cat->created;
            $result[] = $subrecord;
            $this->getknowledgebasecategorychild($cat->id,$prefix.'|-- ',$result);
        }
        return $result;
    }

    function getAllArticles($kbarttitle,$kbcatid,$limitstart, $limit){ //$kbarttitle,$kbcatid,$typeid,$limitstart, $limit
        if($kbcatid) if(!is_numeric($kbcatid)) return false;
        //if($typeid) if(!is_numeric($typeid)) return false;
        $db = $this->getDBO();
        $result = array();
        /*$type [] =  array('value' => null,'text' => JText::_('Status'));
        $type [] =  array('value' => 0,'text' => JText::_('Public'));
        $type [] =  array('value' => 1,'text' => JText::_('Private'));
        $type [] =  array('value' => 2,'text' => JText::_('Draft'));*/

        $lists['categories'] = JHTML::_('select.genericList', $this->getCategories('kb'), 'filter_kb_categoryid', 'class="inputbox js-ticket-select-field" ' . '', 'value', 'text',$kbcatid);
        //$lists['type'] = JHTML::_('select.genericList', $type, 'filter_kb_typeid', 'class="inputbox js-ticket-select-field" '. '', 'value', 'text',$typeid);

        $query = "SELECT COUNT(id) FROM `#__js_ticket_articles` AS kbarticle WHERE kbarticle.status = kbarticle.status " ;

        if ($kbarttitle) {
            $kbarttitle = trim($kbarttitle);
            $query .= " AND kbarticle.subject LIKE ".$db->quote("%".$kbarttitle."%");
        }
        if ($kbcatid) $query .= " AND kbarticle.categoryid = ".$kbcatid;
        //if (is_numeric($typeid)) $query .=" AND kbarticle.type = ".$typeid;

        $db->setQuery($query);
        $total = $db->loadResult();
        if ( $total <= $limitstart ) $limitstart = 0;

        $query = "SELECT kbarticle.*,kbcat.name AS articlecategory
            FROM `#__js_ticket_articles` AS kbarticle
            LEFT JOIN `#__js_ticket_categories` AS kbcat ON kbarticle.categoryid = kbcat.id
            WHERE kbarticle.status = kbarticle.status" ;
        if ($kbarttitle) {
            $kbarttitle = trim($kbarttitle);
            $query .= " AND kbarticle.subject LIKE ".$db->quote('%'.$kbarttitle.'%');
        }
        if ($kbcatid) $query .= " AND kbarticle.categoryid = ".$kbcatid;
        //if (is_numeric($typeid)) $query .=" AND kbarticle.type = ".$typeid;
        $db->setQuery($query,$limitstart, $limit);
        if ($kbarttitle) $lists['articletitle'] = $kbarttitle;
        $result[0] = $db->loadObjectList();
        $result[1] = $total;
        $result[2] = $lists;
        return $result;
    }
        
    function getCategories($for=''){
        $result = array();
                $clause=" WHERE";
        $prefix = '|-- ';
                $wherequery="";
        $db = $this->getDBO();
        $query = "SELECT * FROM `#__js_ticket_categories` AS kbcategory ";
                switch($for){
                    case 'kb';
                    case 'downloads';
                    case 'announcement';
                    case 'faqs';
                        $wherequery.=$clause." kbcategory.".$for.'= 1 ';
                        $clause=" AND";
                    break;
                    default:
                    break;
                }
                $query .=$wherequery;
                $query .=$clause." kbcategory.parentid = 0 AND kbcategory.status = 1";
                $query .=" ORDER BY parentid ASC ";                
                //echo $query;
                
        $db->setQuery($query);
        $rows = $db->loadObjectList();
                foreach ($rows as $row){
                        $record =array();
                        $record[] =$row->id;
                        $record[] =$row->name;
                        $result[] = $record;
                        $this->getknowledgebasecategorychildCombo($row->id,$prefix,$result,$for);
                }
                
        $kbcategories = array();
        $kbcategories[] =  array('value' => '', 'text' => JText::_('Select Category'));
        foreach($result as $res){
            $kbcategories[] =  array('value' => $res[0],'text' => JText::_($res[1]));
        }
        return $kbcategories;
    }
    function getknowledgebasecategorychildCombo($parentid,$prefix,&$result,$for){

        if(!is_numeric($parentid)) return false;
        $db = $this->getDBO();
        $q = "SELECT * FROM `#__js_ticket_categories` WHERE parentid = ".$parentid;
                switch($for){
                    case 'kb';
                    case 'downloads';
                    case 'announcement';
                    case 'faqs';
                        $q.=" AND ".$for."= 1 ";
                    break;
                    default:
                    break;
                }
                //echo $q;
        $q.=" AND status = 1";
        $db->setQuery($q);
        $kbcategories = $db->loadObjectList();
                if(!empty($kbcategories)){
                    foreach($kbcategories as $cat){
                            $subrecord=array();
                            $subrecord[] =$cat->id;
                            $subrecord[] =$prefix.JText::_($cat->name);
                            $result[]= $subrecord;
                            $this->getknowledgebasecategorychildCombo($cat->id,$prefix.'|-- ',$result,$for);

                    }
                }
                //return $result;
    }
        
    function storeKnowledgeBaseArticle($data){
        $user = JSSupportticketCurrentUser::getInstance();
        if(!$user->getIsAdmin()){
            $permission = ($data['id'] == '') ? 'Add Knowledge Base' : 'Edit Knowledge Base';
            $per = $user->checkUserPermission($permission);
            if ($per == false) 
                return PERMISSION_ERROR;
        }
        $data['staffid'] = $user->getStaffId();
        $data['content'] = JFactory::getApplication()->input->get('content_article', '', 'raw');
        if($data['content'] == '')
            $data['content'] = JFactory::getApplication()->input->get('content', '', 'raw');
        
        $row = $this->getTable('knowledgebasearticles');
        if (!$row->bind($data)) {
            $this->setError($row->getError());
            return SAVE_ERROR;
        }
        if (!$row->check()) {
            $this->setError($row->getError());
            return SAVE_ERROR;
        }
        if (!$row->store()) {
            $this->getJSModel('systemerrors')->updateSystemErrors($row->getError());
            $this->setError($row->getError());
            return SAVE_ERROR;
        }
        $staffid = $user->getStaffId();
        $articleid = $row->id;
        $config = $this->getJSModel('config')->getConfigByFor('default');
        $filesize = $config['filesize'];
        $total = count($_FILES['filename']['name']);
        $attachment = $this->getJSModel('attachments');
        for($i = 0; $i < $total; $i++){
            if($_FILES['filename']['name'][$i] != ''){
                if($_FILES['filename']['size'][$i] > 0){
                    $uploadfilesize = $_FILES['filename']['size'][$i];
                    $uploadfilesize = $uploadfilesize / 1024; //kb
                    if($uploadfilesize > $filesize){
                        $row->delete($articleid);
                        return FILE_SIZE_ERROR;
                    }
                    $file_name = str_replace(' ', '_', $_FILES['filename']['name'][$i]);
                    $result = $attachment->checkExtension($file_name);
                    if($result != 'Y'){
                        $row->delete($articleid);
                        return FILE_EXTENTION_ERROR;
                    }
                    $fileext = $attachment->getExtension($file_name);                                          
                    $res = $attachment->uploadAttchments($i,$articleid, true, false, 'article');
                    if($res == true){
                        $result = $this->storeKnowledgeBaseArticleAttachment($articleid,$uploadfilesize,$file_name,$fileext,$staffid);
                    }
                }
            }
        }
        
        JSSupportticketMessage::$recordid = $articleid;
        return SAVED;
    }

    function storeKnowledgeBaseArticleAttachment($articleid,$filesize,$filename,$filetype,$staffid){
        if(!is_numeric($articleid)) return false;
        $row = $this->getTable('knowledgebasearticleattachments');
        $data['articleid'] = $articleid;
        $data['filename'] = $filename;
        $data['filesize'] = $filesize;
        $data['filetype'] = $filetype;
        $data['staffid']= $staffid;
        $data['created'] = $curdate = date('Y-m-d H:i:s');

        if (!$row->bind($data)) {
            $this->setError($row->getError());
            return false;
        }
        if (!$row->check()) {
            $this->setError($row->getError());
            return false;
        }
        if (!$row->store()) {
            $this->getJSModel('systemerrors')->updateSystemErrors($row->getError());
            $this->setError($row->getError());
            return false;
        }
        return true;
    }

    function checkCategoryCanDelete($id){
        if(!is_numeric($id)) return false;
        $db = $this->getDbo();
        $query = "SELECT (SELECT count(id) FROM `#__js_ticket_categories` WHERE parentid=".$id.") +
                    (SELECT count(id) FROM `#__js_ticket_articles` WHERE categoryid=".$id.") +
                    (SELECT count(id) FROM `#__js_ticket_downloads` WHERE categoryid=".$id.") +
                    (SELECT count(id) FROM `#__js_ticket_faqs` WHERE categoryid=".$id.") +
                    (SELECT count(id) FROM `#__js_ticket_announcements` WHERE categoryid=".$id.") "; 
        $db->setQuery($query);
        $candelete = $db->loadResult();
        if($candelete > 0) return false; else return true;
    }
    
    function deleteKnowledgebaseCategory($id){
        if(!is_numeric($id)) return false;
        $user = JSSupportticketCurrentUser::getInstance();
        if(!$user->getIsAdmin()){
            $per = $user->checkUserPermission('Delete Category');
            if ($per == false) 
                return PERMISSION_ERROR;
        }
        $db = $this->getDbo();
        $res = $this->checkCategoryCanDelete($id);
        if($res == true){
            $query="DELETE FROM `#__js_ticket_categories` WHERE id=".$id;
            $db->setQuery($query);
            if (!$db->execute()) {
                $this->getJSModel('systemerrors')->updateSystemErrors($db->getErrorMsg());
                $db->setError($db->getErrorMsg());
                return DELETE_ERROR;
            }
            return DELETED;
        }else{
            return IN_USE;
        }    
    }
    
    function deleteKnowledgebaseArticle($id){
        if(!is_numeric($id)) return false;
        $user = JSSupportticketCurrentUser::getInstance();
        if(!$user->getIsAdmin()){
            $per = $user->checkUserPermission('Delete Knowledge Base');
            if ($per == false) 
                return PERMISSION_ERROR;
        }
        $db = $this->getDbo();
        $query = "DELETE FROM `#__js_ticket_articles` WHERE id=".$id;
        $db->setQuery($query);
        if (!$db->execute()) {
            $this->getJSModel('systemerrors')->updateSystemErrors($db->getErrorMsg());
            $db->setError($db->getErrorMsg());
            return DELETE_ERROR;
        }
        $query = "DELETE FROM `#__js_ticket_articles_attachments` WHERE articleid=".$id;
        $db->setQuery($query);
        if (!$db->execute()) {
            $this->getJSModel('systemerrors')->updateSystemErrors($db->getErrorMsg());
            $db->setError($db->getErrorMsg());
            return DELETE_ERROR;
        }
        return DELETED;
    }

    function getKnowledgebaseCat($kbarttitle,$kbartkeyword,$limitstart, $limit) { //for user
        $db = $this->getDBO();
        $result = array();
        $inquery = '';
        if ($kbarttitle != null) {
            $kbarttitle = trim($kbarttitle);
            $inquery .=" AND category.name LIKE ".$db->quote('%'.$kbarttitle.'%');
        }
        if($kbartkeyword != null){
            $kbartkeyword = trim($kbartkeyword);
            $inquery .=" AND category.metakey LIKE ".$db->quote('%'.$kbartkeyword.'%').'';
        }
        $query = "SELECT category.name, category.id, category.logo
                    FROM `#__js_ticket_categories` AS category
                    WHERE category.parentid = 0 AND kb = 1 AND category.status = 1" . $inquery;
        $db->setQuery($query);
        $parentcat = $db->loadObjectList();
        foreach ($parentcat as $cat) {
            $query = "SELECT category.name, category.id
                    FROM `#__js_ticket_categories` AS category
                    WHERE category.parentid = " . $cat->id . " AND kb = 1 AND category.status = 1 LIMIT 4";
            $db->setQuery($query);
            $cat->subcategory = $db->loadObjectList();
        }
        // echo '<pre>';print_r($parentcat);echo '</pre>';exit;
        $result['categories'] = $parentcat;
        $inquery = '';
        if ($kbarttitle != null) {
            $kbarttitle = trim($kbarttitle);
            $inquery .=" AND article.subject LIKE ".$db->quote('%'.$kbarttitle.'%');
        }

        if($kbartkeyword != null){
            $kbartkeyword = trim($kbartkeyword);
            $inquery .= " AND article.metakey LIKE ".$db->quote('%'.$kbartkeyword.'%');
        }

        // Pagination
        $query = "SELECT COUNT(article.id) 
                    FROM `#__js_ticket_articles` AS article
                    WHERE article.status = 1" . $inquery;
        $db->setQuery($query);
        $total = $db->loadResult();
        $result['total'] = $total;

        $query = "SELECT article.subject,article.content, article.id AS articleid
                    FROM `#__js_ticket_articles` AS article
                    WHERE article.status = 1";
        $query .= $inquery;
        $db->setQuery($query,$limitstart, $limit);
        $result['articles'] = $db->loadObjectList();
        $result['lists']['articletitle'] = $kbarttitle;
        $result['lists']['articlekeywords'] = $kbartkeyword;
        return $result;
    }

    function getUserKnowledgebase($id,$limitstart,$limit) {
        if ($id) {
            if (!is_numeric($id))
                return false;
        } else
            $id = 0;

        $db = $this->getDBO();
        $result = array();

        if ($id != 0)
            $inquery = " AND article.categoryid = " . $id;
        else
            $inquery = '';

        $query = "SELECT category.name, category.id
                    FROM `#__js_ticket_categories` AS category
                    WHERE category.parentid = " . $id . " AND kb = 1";
        $db->setQuery($query);
        $result['categories'] = $db->loadObjectList();

        $query = "SELECT category.name, category.logo, category.id
                    FROM `#__js_ticket_categories` AS category
                    WHERE category.id = " . $id . " AND kb = 1";
        $db->setQuery($query);
        $result['category'] = $db->loadObject();

        // Pagination
        $query = "SELECT COUNT(article.id) 
                    FROM `#__js_ticket_articles` AS article
                    WHERE article.status = 1" . $inquery;
        $db->setQuery($query);
        $result['total'] = $db->loadResult();

        $query = "SELECT article.subject,article.content, article.id AS articleid
                    FROM `#__js_ticket_articles` AS article
                    WHERE article.status = 1" . $inquery;
        $query .=" ORDER BY article.ordering ASC";
        $db->setQuery($query,$limitstart,$limit);
        $result['articles'] = $db->loadObjectList();

        return $result;
    }

    function getUserArticleDetails($id) {

        if (!is_numeric($id))
            return;
        $db = $this->getDBO();
        $result = array();
        $query = "SELECT article.id,article.subject, article.content, category.name
                FROM `#__js_ticket_articles` AS article
                LEFT JOIN `#__js_ticket_categories` AS category on article.categoryid = category.id
                WHERE article.id = " . $id .' AND article.status = 1';
        $db->setQuery($query);
        $result['article'] = $db->loadObject();

        $query = "SELECT attachment.id AS attachmentid,attachment.articleid AS id, attachment.filename,attachment.filesize
                FROM `#__js_ticket_articles_attachments` AS attachment
                WHERE attachment.articleid = " . $id;

        $db->setQuery($query);
        $result['articleattachments'] = $db->loadObjectList();
        $this->updateHitsByID($id);
        return $result;
    }

    function updateHitsByID($id){
        if(!is_numeric($id)) return false;
        $db = JFactory::getDbo();
        $query = "UPDATE `#__js_ticket_articles` SET hits = hits + 1 WHERE id = $id";
        $db->setQuery($query);
        $db->execute();
        return;
    }

    function getKnowledgebaseForMP($listtype,$maxrecord){
        if( ! is_numeric($maxrecord)){
            return false;
        }
        $db = JFactory::getDbo();
        $query = "SELECT article.subject AS title,article.id AS id
                    FROM `#__js_ticket_articles` AS article WHERE article.status = 1 AND article.type = 0";
        switch($listtype){
            case 1: // Latest
                $query .= " ORDER BY article.created DESC";
            break;
            case 2: // Popular
                $query .= " ORDER BY article.hits DESC";
            break;
            case 3: // All
            break;
        }
        $query .= " LIMIT $maxrecord";
        $db->setQuery($query);
        $result = $db->loadObjectList();
        return $result;
    }

    function getTypeForByParentId() {
        $array = null;
        $parentid = JFactory::getApplication()->input->get('parentid');
        if ($parentid) {
            if (!is_numeric($parentid))
                return false;
            $db = JFactory::getDbo();
            $query = "SELECT kb,downloads,announcement,faqs FROM `#__js_ticket_categories` WHERE id = $parentid";
            $db->setQuery($query);
            $result = $db->loadObject();
            $array['kb'] = $result->kb;
            $array['downloads'] = $result->downloads;
            $array['announcement'] = $result->announcement;
            $array['faqs'] = $result->faqs;
        }
        return json_encode($array);
    }

    function checkParentType() {
        $message = '';
        $type = JFactory::getApplication()->input->get('type');
        $parentid = JFactory::getApplication()->input->get('parentid');
        if ($parentid) {
            if (!is_numeric($parentid))
                return false;
            $db = JFactory::getDbo();
            $query = "SELECT * FROM `#__js_ticket_categories` WHERE id = $parentid";
            $db->setQuery($query);
            $result = $db->loadObject();
            if ($result->$type != 1) {
                $message = '<div class="admin-title">' . JText::_('You') . ' parent[s] ' . JText::_('does not have this type') . '</div>';
                $message .= '<div class="admin-title">' . JText::_('Would you like to add this type to parent[s]') . '</div>';
                $message .= '<div class="admin-title"><a href="#" onclick="addTypeToParent(' . $parentid . ',\'' . $type . '\');">' . JText::_('Yes') . '</a></div>';
                $message .= '<div class="admin-title"><a href="#" onclick="closemsg(\'' . $type . '\');">' . JText::_('No') . '</a></div>';
            }
        }
        return $message;
    }

    function checkChildType() {
        $message = 0;
        $type = JFactory::getApplication()->input->get('type');
        $currentid = JFactory::getApplication()->input->get('currentid');
        if ($currentid) {
            if (!is_numeric($currentid))
                return false;
            $db = JFactory::getDbo();
            $query = "SELECT * FROM `#__js_ticket_categories` WHERE parentid = $currentid";
            $db->setQuery($query);
            $result = $db->loadObjectList();
            if(!empty($result)){
                $ans = true;
                foreach($result AS $row){
                    if($row->$type == 1){
                        $ans = false;
                        break;
                    }
                }
                if ($ans == false) {
                    $message = '<div class="admin-title">' . JText::_('Your child[s] have this type') . '</div>';
                    $message .= '<div class="admin-title">' . JText::_('You cannot unmark it') . '</div>';
                }
            }
        }
        return $message;
    }

    function makeParentOfType() {
        $parentid = JFactory::getApplication()->input->get('parentid');
        $type = JFactory::getApplication()->input->get('type');
        $this->makeParentOfTypeRecursive($parentid, $type);
        return true;
    }

    function makeParentOfTypeRecursive($parentid, $type) {
        $db = JFactory::getDbo();
        $query = "UPDATE `#__js_ticket_categories` SET $type = 1";
        $db->setQuery($query);
        $db->execute();
        $query = "SELECT parentid FROM `#__js_ticket_categories` WHERE id = $parentid";
        $db->setQuery($query);
        $isparent = $db->loadResult();
        if ($isparent != 0)
            $this->makeParentOfTypeRecursive($isparent, $type);
        else
            return;
    }

    function getDownloadAttachmentById($id){
        if(!is_numeric($id)) return false;
        $db = JFactory::getDbo();
        $query = "SELECT attach.filename, attach.articleid 
                    FROM `#__js_ticket_articles_attachments` AS attach 
                    WHERE attach.id = $id";
        $db->setQuery($query);
        $object = $db->loadObject();
        $articleid = $object->articleid;
        $filename = $object->filename;
        $datadirectory = $this->getJSModel('config')->getConfigurationByName('data_directory');
        $base = JPATH_BASE;
        if(JFactory::getApplication()->isClient('administrator')){
            $base = substr($base, 0, strlen($base) - 14); //remove administrator    
        }  
        $path = $base.'/'.$datadirectory;
        $path = $path . '/attachmentdata';
        $path = $path . '/article/article_' . $articleid;
        $file = $path . '/' . $filename;
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . basename($file));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        ob_clean();
        flush();
        readfile($file);
        exit();
    }
    function deleteAttachmentById($id){
		if(!is_numeric($id)) return false;
        $db = JFactory::getDbo();
        $query = "SELECT attach.filename, attach.articleid 
                    FROM `#__js_ticket_articles_attachments` AS attach 
                    WHERE attach.id = $id";
        $db->setQuery($query);
        $object = $db->loadObject();
        $articleid = $object->articleid;
        $filename = $object->filename;
        $datadirectory = $this->getJSModel('config')->getConfigurationByName('data_directory');
        $base = JPATH_BASE;
        if(JFactory::getApplication()->isClient('administrator')){
            $base = substr($base, 0, strlen($base) - 14); //remove administrator    
        }  
        $path = $base.'/'.$datadirectory;
        $path = $path . '/attachmentdata';
        $path = $path . '/article/article_' . $articleid;
        $file = $path . '/' . $filename;
		if(unlink($file)){
			$query = "DELETE FROM `#__js_ticket_articles_attachments` WHERE id = ".$id;
			$db->setQuery($query);
			if($db->execute()){
				return DELETED;
			}else{
				return DELETE_ERROR;
			}
		}
		return DELETE_ERROR;
	}

    function getLatestKnowledgebaseForUserCP(){

        $db = $this->getDBO();

        $query = "SELECT kbarticle.*,kbcat.name AS articlecategory
            FROM `#__js_ticket_articles` AS kbarticle
            LEFT JOIN `#__js_ticket_categories` AS kbcat ON kbarticle.categoryid = kbcat.id
            WHERE kbarticle.status = kbarticle.status ORDER BY kbarticle.created" ;
        $db->setQuery($query,0,4);
        $result = $db->loadObjectList();
        return $result;
    }

    function getSubCategoryKnowledge($parentid){
        if(!is_numeric($parentid))
            return false;
        $db = $this->getDBO();
        $result = array();
        $categories = $this->getAllSubCategoriesById($parentid);
        if($categories != ''){
            foreach($categories AS $category){
                $catarray[] = $category->id;
            }
            if(!empty($catarray)){
                $catarray = implode(',', $catarray);
                $query = "SELECT id as articleid,categoryid,subject
                            FROM `#__js_ticket_articles`
                            WHERE find_in_set(categoryid, '". $catarray ."') LIMIT 5";
                $db->setQuery($query);
                $result = $db->loadObjectList();
            }
        }
        return $result;
    }

    function getAllSubCategoriesById($categoryid){
        if(!is_numeric($categoryid))
            return false;
        $db = $this->getDBO();
        $query = "SELECT id
                FROM    (SELECT id, parentid FROM `#__js_ticket_categories`
                         order by parentid, id) category_sorted,
                        (select @pv := '".$categoryid."') initialization
                WHERE   find_in_set(parentid, @pv) > 0
                AND     @pv := concat(@pv, ',', id)";
        $db->setQuery($query);
        $result = $db->loadObjectList();
        return $result;
    }

    function getLatestKnowledgebaseForAdminCP(){

        $db = $this->getDBO();
        $query = "SELECT article.subject,article.content, article.id AS articleid
                    FROM `#__js_ticket_articles` AS article
                    WHERE article.status = 1 ORDER BY created DESC";
        $db->setQuery($query,0, 5);
        $result = $db->loadObjectList();
        return $result;
    }
}
?>