Subversion Repositories cheapmusic

Rev

Blame | 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 search engine controller functions
class SearchEngineController extends Controller{
        
        # func to get all search engines
        function __getAllSearchEngines(){
                $sql = "select * from searchengines where status=1";
                $seList = $this->db->select($sql);
                return $seList;
        }
        
        function __searchSerachEngines($searchInfo=[]) {
            $cond = "1=1";
            $cond .= isset($searchInfo['status']) ? " and status=".intval($searchInfo['status']) : "";
            $cond .= isset($searchInfo['search']) ? " and url like '%".addslashes($searchInfo['search'])."%'" : "";
            return $this->dbHelper->getAllRows('searchengines', $cond);
        }
        
        # func to get search engine info
        function __getsearchEngineInfo($seId){
                $sql = "select * from searchengines where id=$seId";
                $seList = $this->db->select($sql, true);
                return $seList;
        }
        
        # func to get all search engines
        function __getAllCrawlFormatedSearchEngines(){
                $sql = "select * from searchengines where status=1";
                $list = $this->db->select($sql);
                $seList = array();
                foreach($list as $seInfo){
                        $seId = $seInfo['id'];
                        $seInfo['regex'] = "/".$seInfo['regex']."/is";
                        $search = array('[--num--]');
                        $replace = array($seInfo['no_of_results_page']);
                        $seInfo['url'] = str_replace($search, $replace, $seInfo['url']);
                        $seList[$seId] = $seInfo;
                }       
                return $seList;
        }
        
        # func to show search engines
        function listSE($info=''){
                $info = sanitizeData($info);
                $info['stscheck'] = isset($info['stscheck']) ? intval($info['stscheck']) : 1;
                $pageScriptPath = 'searchengine.php?stscheck=' . $info['stscheck'];
                $sql = "select * from searchengines where status='{$info['stscheck']}'";
                
                // search for search engine name
                if (!empty($info['se_name'])) {
                        $sql .= " and domain like '%".addslashes($info['se_name'])."%'";
                        $pageScriptPath .= "&se_name=" . $info['se_name'];
                }
                
                $sql .= " order by id"; 
                
                # pagination setup              
                $this->db->query($sql, true);
                $this->paging->setDivClass('pagingdiv');
                $this->paging->loadPaging($this->db->noRows, SP_PAGINGNO);
                $pagingDiv = $this->paging->printPages($pageScriptPath, '', 'scriptDoLoad', 'content', 'layout=ajax');          
                $this->set('pagingDiv', $pagingDiv);
                $sql .= " limit ".$this->paging->start .",". $this->paging->per_page;
                $seList = $this->db->select($sql);
                $this->set('seList', $seList);

                $statusList = array(
                        $_SESSION['text']['common']['Active'] => 1,
                        $_SESSION['text']['common']['Inactive'] => 0,
                );
                
                $this->set('statusList', $statusList);
                $this->set('info', $info);
                $this->set('pageScriptPath', $pageScriptPath);
                $this->set('pageNo', $info['pageno']);          
                $this->render('searchengine/list', 'ajax');
        }
        
        # func to change status of search engine
        function __changeStatus($seId, $status){                
                $seId = intval($seId);
                $sql = "update searchengines set status=$status where id=$seId";
                $this->db->query($sql);
        }
        
        # func to delete search engine
        function __deleteSearchEngine($seId){
                $seId = intval($seId);
                $sql = "delete from searchengines where id=$seId";
                $this->db->query($sql);
                
                
                $sql = "select id from searchresults where searchengine_id=$seId";
                $recordList = $this->db->select($sql);
                
                if(count($recordList) > 0){
                        foreach($recordList as $recordInfo){
                                $sql = "delete from searchresultdetails where searchresult_id=".$recordInfo['id'];
                                $this->db->query($sql);
                        }
                        
                        $sql = "delete from searchresults where searchengine_id=$seId";
                        $this->db->query($sql);
                }               
                
        }
        
        # function to check whether captcha found in search engine results
        public static function isCaptchInSearchResults($searchContent) {

                $captchFound = false;
                
                // if captcha input field is found
                if (stristr($searchContent, 'name="captcha"') || stristr($searchContent, 'id="captcha"') || stristr($searchContent, 'recaptcha/api')) {
                        $captchFound = true;
                }
                
                return $captchFound;
        }
        
        // Function to check / validate the user type searh engine count
        public static function validateSearchEngineCount($userId, $count) {
                $userCtrler = new UserController();
                $validation = array('error' => false);

                // if admin user id return true
                if ($userCtrler->isAdminUserId($userId)) {
                        return $validation;
                }
                
                $userTypeCtrlr = new UserTypeController();
                $userTypeDetails = $userTypeCtrlr->getUserTypeSpecByUser($userId);
                
                // if limit is set and not -1
                if (isset($userTypeDetails['searchengine_count']) && $userTypeDetails['searchengine_count'] >= 0) {
                
                        // check whether count greater than limit
                        if ($count > $userTypeDetails['searchengine_count']) {
                                $validation['error'] = true;
                                $spTextSubs = $userTypeCtrlr->getLanguageTexts('subscription', $_SESSION['lang_code']);
                                $validation['msg'] = formatErrorMsg(str_replace("[limit]", $userTypeDetails['searchengine_count'], $spTextSubs['total_count_greater_account_limit']));
                        }
                        
                }
                
                return $validation;
        }
        
        // func to show sync search engines
        function showSyncSearchEngines($info=[]) {
            
            $pageScriptPath = 'searchengine.php?sec=sync-se';
            $sql = "select * from sync_searchengines order by sync_time DESC";
            
            # pagination setup
            $this->db->query($sql, true);
            $this->paging->setDivClass('pagingdiv');
            $this->paging->loadPaging($this->db->noRows, SP_PAGINGNO);
            $pagingDiv = $this->paging->printPages($pageScriptPath, '', 'scriptDoLoad', 'content', 'layout=ajax');
            $this->set('pagingDiv', $pagingDiv);
            $sql .= " limit ".$this->paging->start .",". $this->paging->per_page;
            $syncList = $this->db->select($sql);
            $this->set('syncList', $syncList);
            
            $this->set('pageScriptPath', $pageScriptPath);
            $this->set('pageNo', $info['pageno']);
            $this->render('searchengine/list_sync_searchengines');
        }
        
        // do sync search engines from sp main website
        function doSyncSearchEngines($checkAlreadyExecuted = false, $cronJob = false) {
            
            // check whether already executed sync
            if ($checkAlreadyExecuted) {
                $row = $this->dbHelper->getRow("sync_searchengines", "sync_time>TIMESTAMP(DATE_SUB(NOW(), INTERVAL ". SP_SYNC_SE_INTERVAL ." day))");
                if (!empty($row['id'])) {
                    return ['status' => false, 'result' => "Search engines already synced."];
                }
            }
            
            $dataList = ['status' => 0];
            $syncUrl = SP_MAIN_SITE . "/get_searchengine_updates.php";
            $ret = $this->spider->getContent($syncUrl);
            if (!empty($ret['page'])) {
                
                // check whethere required content exists in the page crawled
                if (stristr($ret['page'], 'UPDATE ')) {
                    
                    $queryList = explode(';', $ret['page']);
                    foreach ($queryList as $query) {
                        if (!empty($query)) {
                           $this->db->query(trim($query));
                        }
                    }
                    
                    $dataList['result'] = "Search engines successfully synced.";
                    $dataList['status'] = 1;
                    
                    // update admin alerts section
                    if ($cronJob) {
                        $alertCtrl = new AlertController();
                        $alertInfo = array(
                            'alert_subject' => "Search Engine Sync",
                            'alert_message' => $dataList['result'],
                            'alert_category' => "reports",
                            'alert_url' => SP_WEBPATH,
                        );
                        $alertCtrl->createAlert($alertInfo, false, true);
                    }
                    
                } else {
                    $dataList['result'] = "Internal error occured during search engine sync.";
                }
                
            } else {
                $dataList['result'] = $ret['errmsg'];
            }
            
            $this->dbHelper->insertRow("sync_searchengines", $dataList);
            return $dataList;
        }
        
}
?>