Subversion Repositories cheapmusic

Rev

Rev 103 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php

/***************************************************************************
 *   Copyright (C) 2009-2011 by Geo Varghese(www.seopanel.in)      *
 *   sendtogeo@gmail.com                                                                                                   *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/

# class defines all keyword controller functions
class KeywordController extends Controller{

        # func to show keywords
        function listKeywords($info=''){                
                
            $userId = isLoggedIn();
                $websiteController = New WebsiteController();
                
                $urlParams = "";
                $websiteId = empty($info['website_id']) ? "" : intval($info['website_id']);
                $this->set('websiteList', $websiteController->__getAllWebsites($userId, true));
                $this->set('websiteId', $websiteId);
                if ($websiteId) {
                     $conditions = " and k.website_id=$websiteId";
                     $urlParams = "website_id=$websiteId";
                } else {
                    $conditions = "";   
                }
                
                if (isset($info['status'])) {
                    if (($info['status']== 'active') || ($info['status']== 'inactive')) {
                        $statVal = ($info['status']=='active') ? 1 : 0;
                        $conditions .= " and k.status=$statVal";
                        $urlParams .= "&status=".$info['status'];
                    }    
                } else {
                    $info['status'] = '';
                }
                $this->set('statVal', $info['status']);
                
                if (empty($info['keyword'])) {
                    $info['keyword'] =  '';
                } else {
                    $info['keyword'] = urldecode($info['keyword']);
                    $conditions .= " and k.name like '%".addslashes($info['keyword'])."%'";
                    $urlParams .= "&keyword=".urlencode($info['keyword']);    
                }               
                $this->set('keyword', $info['keyword']);
                
                $sql = "select k.*,w.name website,w.status webstatus from keywords k,websites w where k.website_id=w.id and w.status=1";
                $sql .= isAdmin() ? "" : " and w.user_id=$userId";
                $sql .= " $conditions order by k.name";
                
                # pagination setup              
                $this->db->query($sql, true);
                $this->paging->setDivClass('pagingdiv');
                $this->paging->loadPaging($this->db->noRows, SP_PAGINGNO);
                $pagingDiv = $this->paging->printPages('keywords.php', '', 'scriptDoLoad', 'content', $urlParams);              
                $this->set('pagingDiv', $pagingDiv);
                $sql .= " limit ".$this->paging->start .",". $this->paging->per_page;
                
                # set keywords list
                $keywordList = $this->db->select($sql);
                $this->set('pageNo', $info['pageno']);
                $langCtrler = New LanguageController();
                $countryCtrler = New CountryController();
                foreach ($keywordList as $i => $keyInfo) {
                        $info = $langCtrler->__getLanguageInfo($keyInfo['lang_code']);
                        $keywordList[$i]['lang_name'] = $info['lang_name'];
                        $info = $countryCtrler->__getCountryInfo($keyInfo['country_code']); 
                        $keywordList[$i]['country_name'] = $info['country_name'];
                }
                $this->set('list', $keywordList);
                $this->render('keyword/list');
        }

        # func to show keyword select box
        function showKeywordSelectBox($userId='', $websiteId='', $keywordId=''){
                $this->set('keywordList', $this->__getAllKeywords($userId, $websiteId, true));
                $this->set('keywordId', $keywordId);
                $this->render('keyword/keywordselectbox');
        }
        
        # func to change status
        function __changeStatus($keywordId, $status){
                
                $keywordId = intval($keywordId);
                $sql = "update keywords set status=$status where id=$keywordId";
                $this->db->query($sql);
        }
        
        # func to change crawled status of keyword
        function __changeCrawledStatus($status, $whereCond = '1=1') {
                $sql = "update keywords set crawled=$status where $whereCond";
                $this->db->query($sql);         
        }

        # func to change status
        function __deleteKeyword($keywordId){
                
                $keywordId = intval($keywordId);
                $sql = "delete from keywords where id=$keywordId";
                $this->db->query($sql);
                
                // delete related data
                $sql = "delete sd.*, s.* from searchresults s, searchresultdetails sd where s.id=sd.searchresult_id and s.keyword_id=$keywordId";
                $this->db->query($sql);
        }

        function newKeyword(){          
                
                $userId = isLoggedIn();
                
                # Validate keyword count
                if (!$this->validateKeywordCount($userId)) {
                        $this->set('validationMsg', $this->spTextKeyword['Your keyword count already reached the limit']);
                }
                
                $websiteController = New WebsiteController();
                $this->set('websiteList', $websiteController->__getAllWebsites($userId, true));
                $langController = New LanguageController();
                $this->set('langList', $langController->__getAllLanguages());
                $this->set('langNull', true);
                $countryController = New CountryController();
                $this->set('countryList', $countryController->__getAllCountries());
                $this->set('countryNull', true);
                $seController = New SearchEngineController();
                $this->set('seList', $seController->__getAllSearchEngines());
                $this->render('keyword/new');
        }

        # create new keyword function
        function createKeyword($listInfo, $apiCall = false){
                
                $userId = isLoggedIn();
                $this->set('post', $listInfo);
                $errMsg['name'] = formatErrorMsg($this->validate->checkBlank($listInfo['name']));
                $errMsg['website_id'] = formatErrorMsg($this->validate->checkBlank($listInfo['website_id']));
                if (!is_array($listInfo['searchengines'])) $listInfo['searchengines'] = array();                
                $errMsg['searchengines'] = formatErrorMsg($this->validate->checkBlank(implode('', $listInfo['searchengines'])));
                $statusVal = isset($listInfo['status']) ? intval($listInfo['status']) : 1;
                $seStr = is_array($listInfo['searchengines']) ? implode(':', $listInfo['searchengines']) : $listInfo['searchengines'];          
                
                // verify the limit count for the user
                if (!$this->validate->flagErr) {
                        
                        // Get the website user id, if admin is logged in
                        if (isAdmin() || $apiCall) {
                                $websiteCtrler = new WebsiteController();
                                $websiteInfo = $websiteCtrler->__getWebsiteInfo($listInfo['website_id']);
                                $webUserId = $websiteInfo['user_id'];
                        } else {
                                $webUserId = $userId;
                        }
                        
                        // Validate keyword count
                        if (! $this->validateKeywordCount($webUserId)) {
                                $validationMsg = $this->spTextKeyword['Your keyword count already reached the limit'];
                                $this->set('validationMsg', $validationMsg);
                                $errMsg['limit_error'] = $validationMsg;
                                $this->validate->flagErr = true;
                        }

                        // Validate search engine count
                        $seValdInfo = SearchEngineController::validateSearchEngineCount($webUserId, count($listInfo['searchengines']));
                        if ($seValdInfo['error']) {
                                $errMsg['searchengines'] = $seValdInfo['msg'];
                                $this->validate->flagErr = true;
                        }
                        
                }
                
                // verify the form elements
                if(!$this->validate->flagErr){
                        $keyword = addslashes(trim($listInfo['name']));
                        if (!$this->__checkName($keyword, $listInfo['website_id'])) {
                                
                                $sql = "insert into keywords(name,lang_code,country_code,website_id,searchengines,status)
                                values('$keyword', '".addslashes($listInfo['lang_code'])."', '".addslashes($listInfo['country_code'])."',
                                ".intval($listInfo['website_id']).", '".addslashes($seStr)."', $statusVal)";
                                $this->db->query($sql);
                                
                                // if api call
                                if ($apiCall) {
                                        return array('success', 'Successfully created keyword');
                                } else {
                                        $this->listKeywords();
                                        exit;
                                }
                                
                        }else{
                                $errMsg['name'] = formatErrorMsg($this->spTextKeyword['Keyword already exist']);
                        }
                }
                
                // if api call
                if ($apiCall) {
                        return array('error', $errMsg);
                } else {
                        $this->set('errMsg', $errMsg);
                        $this->newKeyword();
                }
                
        }
        
        # function to import keywords
        function importKeywords(){              
                
                $userId = isLoggedIn();
                $websiteController = New WebsiteController();
                $websiteList = $websiteController->__getAllWebsites($userId, true);
                $this->set('websiteList', $websiteList);
                
                if (empty($_POST['website_id'])) {
                    $listInfo['website_id'] = $websiteList[0]['id'];
                    $this->set('post', $listInfo);
                }
                
                $langController = New LanguageController();
                $this->set('langList', $langController->__getAllLanguages());
                $this->set('langNull', true);
                
                $countryController = New CountryController();
                $this->set('countryList', $countryController->__getAllCountries());
                $this->set('countryNull', true);
                
                $seController = New SearchEngineController();
                $this->set('seList', $seController->__getAllSearchEngines());
                
                // Check the user website count for validation
                if (!isAdmin()) {
                        $this->setValidationMessageForLimit($userId);   
                }
                
                $this->render('keyword/importkeywords');
        }
        
        # function to set validation message for the limit
        function setValidationMessageForLimit($userId) {
                
                // Check the user website count for validation
                $userTypeCtrlr = new UserTypeController();
                $userKeywordCount = count($this->__getAllKeywords($userId));
                $userTypeDetails = $userTypeCtrlr->getUserTypeSpecByUser($userId);
                $validCount = $userTypeDetails['keywordcount'] - $userKeywordCount;
                $validCount = $validCount > 0 ? $validCount : 0;
                $validationMsg = str_replace("[keywordcount]", "<b>$validCount</b>", $this->spTextKeyword['You can add only keywordcount keywords more']);
                $this->set('validationMsg', $validationMsg);
                
        }
        
        # function to import keywords to the seo panel
        function createImportedKeywords($listInfo){
                
                $userId = isLoggedIn();
                $this->set('post', $listInfo);
                $errMsg['keywords'] = formatErrorMsg($this->validate->checkBlank($listInfo['keywords']));
                if (!is_array($listInfo['searchengines'])) $listInfo['searchengines'] = array();
                $errMsg['searchengines'] = formatErrorMsg($this->validate->checkBlank(implode('', $listInfo['searchengines'])));

                // Check the user website count for validation
                if (isAdmin()) {
                        $websiteCtrler = new WebsiteController();
                        $websiteInfo = $websiteCtrler->__getWebsiteInfo($listInfo['website_id']);
                        $webUserId = $websiteInfo['user_id'];
                } else {
                        $webUserId = $userId;
                }

                // Validate search engine count
                $seValdInfo = SearchEngineController::validateSearchEngineCount($webUserId, count($listInfo['searchengines']));
                if ($seValdInfo['error']) {
                        $errMsg['searchengines'] = $seValdInfo['msg'];
                        $this->validate->flagErr = true;
                }
                
                if(!$this->validate->flagErr){
                        
                        $listInfo['website_id'] = intval($listInfo['website_id']);
                        $keywords = explode(",", $listInfo['keywords']);
                        $keyExist = false;
                        $keywordList = array();
                        foreach ($keywords as $i => $keyword) {
                                $keyword = addslashes(trim($keyword));
                                if ($this->__checkName($keyword, $listInfo['website_id'])) {
                                        $errMsg['keywords'] = formatErrorMsg($_SESSION['text']['common']['Keyword']." '<b>$keyword</b>' ". $_SESSION['text']['label']['already exist']);
                                        $keyExist = true;
                                        break;
                                }
                                
                                // if keyword is not empty
                                if (!empty($keyword)) {
                                        $keywordList[$i] = $keyword;
                                }
                        }
                        
                        // check whether keyword count exeeds the limit
                        if (!$this->validateKeywordCount($webUserId, count($keywordList))) {
                                $this->setValidationMessageForLimit($webUserId);
                                $keyExist = true;
                        }
                        
                        // if no error exists save keyword
                        if (!$keyExist) {
                                $listInfo['searchengines'] = is_array($listInfo['searchengines']) ? $listInfo['searchengines'] : array();
                                foreach ($keywordList as $keyword) {                            
                                        $sql = "insert into keywords(name,lang_code,country_code,website_id,searchengines,status)
                                        values('$keyword','".addslashes($listInfo['lang_code'])."','".addslashes($listInfo['country_code'])."',
                                        ".intval($listInfo['website_id']).",'".addslashes(implode(':', $listInfo['searchengines']))."',1)";
                                        $this->db->query($sql);
                                }
                                
                                $this->listKeywords($listInfo);
                                exit;
                        }                       
                        
                }
                $this->set('errMsg', $errMsg);
                $this->importKeywords();
        }

        function __checkName($name, $websiteId){
                $websiteId = intval($websiteId);
                $name = addslashes($name);
                $sql = "select id from keywords where name='$name' and website_id=$websiteId";
                $listInfo = $this->db->select($sql, true);
                return empty($listInfo['id']) ? false :  $listInfo['id'];
        }

        # func to get all keywords
        function __getAllKeywords($userId='', $websiteId='', $isAdminCheck=false, $orderByWeb=false, $orderByValue='ASC', $searchName = ''){
                $websiteId = intval($websiteId);
                $sql = "select k.*,w.name website,w.url weburl from keywords k,websites w where k.website_id=w.id and k.status=1";
                
                if(!$isAdminCheck || !isAdmin() ) {
                        if(!empty($userId)) {
                                $websiteCtrl = new WebsiteController();
                                $sql .= $websiteCtrl->getWebsiteUserAccessCondition($userId);
                        }
                        
                        //if(!empty($userId)) $sql .= " and w.user_id=$userId";
                }
                
                if(!empty($websiteId)) $sql .= " and k.website_id=$websiteId";
                
                if (!empty($searchName)) {
                        $sql .= " and k.name like '%".addslashes($searchName)."%'";
                }
                
                $orderByValue = getOrderByVal($orderByValue);
                $sql .= $orderByWeb ? " order by w.id, k.name $orderByValue" : " order by k.name $orderByValue";
                $keywordList = $this->db->select($sql);
                return $keywordList;
        }

        function __getKeywordInfo($keywordId){
                
                $keywordId = intval($keywordId);
                $sql = "select * from keywords where id=$keywordId";
                $listInfo = $this->db->select($sql, true);
                return empty($listInfo['id']) ? false :  $listInfo;
        }
        
        function __getWebisteKeywords($websiteId, $searchInfo=[]) {
            $cond = "website_id=".intval($websiteId);
            $cond .= isset($searchInfo['status']) ? " and status=".intval($searchInfo['status']) : "";
            $cond .= isset($searchInfo['search']) ? " and name like '%".addslashes($searchInfo['search'])."%'" : "";
            return $this->dbHelper->getAllRows('keywords', $cond);
        }

        function editKeyword($keywordId, $listInfo=''){ 
                                        
                $userId = isLoggedIn();
                $websiteController = New WebsiteController();
                $this->set('websiteList', $websiteController->__getAllWebsites($userId, true));
                $langController = New LanguageController();
                $this->set('langList', $langController->__getAllLanguages());
                $this->set('langNull', true);
                $countryController = New CountryController();
                $this->set('countryList', $countryController->__getAllCountries());
                $this->set('countryNull', true);
                $seController = New SearchEngineController();
                $this->set('seList', $seController->__getAllSearchEngines());
                if(!empty($keywordId)){
                        if(empty($listInfo)){
                                $listInfo = $this->__getKeywordInfo($keywordId);
                                $listInfo['oldName'] = $listInfo['name'];
                                $listInfo['searchengines'] = explode(':', $listInfo['searchengines']);
                        }
                        $this->set('post', $listInfo);
                        $this->render('keyword/edit');
                        exit;
                }
                $this->listKeywords();
        }

        function updateKeyword($listInfo, $apiCall = false){
                $userId = isLoggedIn();
                $this->set('post', $listInfo);

                // Check the user website count for validation
                if (isAdmin()) {
                        $websiteCtrler = new WebsiteController();
                        $websiteInfo = $websiteCtrler->__getWebsiteInfo($listInfo['website_id']);
                        $webUserId = $websiteInfo['user_id'];
                } else {
                        $webUserId = $userId;
                }
                
                $errMsg['name'] = formatErrorMsg($this->validate->checkBlank($listInfo['name']));
                $errMsg['searchengines'] = formatErrorMsg($this->validate->checkBlank(implode('', $listInfo['searchengines'])));
                $seStr = is_array($listInfo['searchengines']) ? implode(':', $listInfo['searchengines']) : $listInfo['searchengines'];
                $statusVal = isset($listInfo['status']) ? "status = " . intval($listInfo['status']) ."," : "";
                
                // Validate search engine count
                $seValdInfo = SearchEngineController::validateSearchEngineCount($webUserId, count($listInfo['searchengines']));
                if ($seValdInfo['error']) {
                        $errMsg['searchengines'] = $seValdInfo['msg'];
                        $this->validate->flagErr = true;
                }
                
                //validate form
                if(!$this->validate->flagErr){

                        $listInfo['website_id'] = intval($listInfo['website_id']);
                        $listInfo['id'] = intval($listInfo['id']);
                        $keyword = addslashes(trim($listInfo['name']));
                        if($listInfo['name'] != $listInfo['oldName']){                          
                                if ($this->__checkName($keyword, $listInfo['website_id'])) {
                                        $errMsg['name'] = formatErrorMsg($this->spTextKeyword['Keyword already exist']);
                                        $this->validate->flagErr = true;
                                }
                        }

                        if (!$this->validate->flagErr) {                                
                                $listInfo['searchengines'] = is_array($listInfo['searchengines']) ? $listInfo['searchengines'] : array();
                                $sql = "update keywords set
                                                name = '$keyword',
                                                lang_code = '".addslashes($listInfo['lang_code'])."',
                                                country_code = '".addslashes($listInfo['country_code'])."',
                                                website_id = {$listInfo['website_id']},
                                                $statusVal
                                                searchengines = '".addslashes($seStr)."'
                                                where id={$listInfo['id']}";
                                $this->db->query($sql);
                                
                                // if api call
                                if ($apiCall) {
                                        return array('success', 'Successfully updated keyword');
                                } else {
                                        $this->listKeywords();
                                        exit;
                                }       
                                        
                        }
                }

                // if api call
                if ($apiCall) {
                        return array('error', $errMsg);
                } else {
                        $this->set('errMsg', $errMsg);
                        $this->editKeyword($listInfo['id'], $listInfo);
                }
        }
        
        function showKeywordReports($keywordId) {
            $keywordId = intval($keywordId);
                $this->checkUserIsObjectOwner($keywordId, 'keyword');
                echo "<script>scriptDoLoad('reports.php', 'content', 'keyword_id=$keywordId&rep=1')</script>";
        }
        
        // Function to check / validate the user type keyword count
        function validateKeywordCount($userId, $newCount = 1) {
                $userCtrler = new UserController();

                // if admin user id return true
                if ($userCtrler->isAdminUserId($userId)) {
                        return true;
                }
                
                $userTypeCtrlr = new UserTypeController();
                $userKeywordCount = count($this->__getAllKeywords($userId));
                $userKeywordCount += $newCount;
                $userTypeDetails = $userTypeCtrlr->getUserTypeSpecByUser($userId);
                
                // if limit is set and not -1
                if (isset($userTypeDetails['keywordcount']) && $userTypeDetails['keywordcount'] >= 0) {
                
                        // check whether count greater than limit
                        if ($userKeywordCount <= $userTypeDetails['keywordcount']) {
                                return true;
                        } else {
                                return false;   
                        }
                        
                } else {
                        return true;    
                }
                
        }
        
        function getUserKeywordSearchEngineList($userId = "", $websiteId = false) {
                
                $seController = New SearchEngineController();
                $list = $seController->__getAllSearchEngines();
                $seList = array();
                $seDisplayList = array();
                
                foreach ($list as $listInfo) {
                        $seList[$listInfo['id']] = $listInfo;
                }
                
                $websiteCtlr = new WebsiteController();
                $whereCond = "w.id=k.website_id and k.status=1 and w.status=1";
                $whereCond .= !empty($userId) ? $websiteCtlr->getWebsiteUserAccessCondition($userId) : "";
                $whereCond .= !empty($websiteId) ? " and w.id=".intval($websiteId) : "";
                $list = $this->dbHelper->getAllRows('keywords k, websites w', $whereCond, "distinct k.searchengines"); 
                
                // show only required search engines
                foreach ($list as $keywordInfo) {
                        $keySeList = explode(":", $keywordInfo['searchengines']);
                        foreach ($keySeList as $keySeId) {
                                if (empty($seDisplayList[$keySeId]) && !empty($seList[$keySeId])) {
                                        $seDisplayList[$keySeId] = $seList[$keySeId];
                                }
                        }
                }
                
                return $seDisplayList;
                
        }
        
}
?>