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 social media controller functions
class SocialMediaController extends Controller{
    
    var $linkTable = "social_media_links";
    var $linkReportTable = "social_media_link_results";
    var $layout = "ajax";
    var $pageScriptPath = 'social_media.php';
    var $serviceList;
    var $colList;
    
    function __construct() {
         
        $this->serviceList = [
                "facebook" => [
                        "label" => "Facebook",
                        "regex" => [
                                "like" => '/id="PagesLikesCountDOMID.*?<span.*?>(.*?)<span/is',
                                "follower" => '/people like this.*?<div>(\d.*?)people follow this/is',
                        ],
                        "url_part" => '?locale=en_US'
                ],
                "twitter" => [
                        "label" => "Twitter",
                        "regex" => [
                                "follower" => '/\/followers".*?<div.*?>(.*?)<\/div>/is'
                        ],
                ],
                "instagram" => [
                        "label" => "Instagram",
                        "regex" => [
                                "follower" => '/edge_followed_by.*?"count":(.*?)\}/is'
                        ],
                ],
                /*"linkedin" => [
                        "label" => "LinkedIn",
                        "regex" => "",
                ],*/
                "pinterest" => [
                        "label" => "Pinterest",
                        "regex" => [
                                "follower" => '/pinterestapp:followers.*?content="(.*?)"/is'
                        ],
                ],
                "youtube" => [
                        "label" => "Youtube",
                        "regex" => [
                                "follower" => '/aria-label=.*?subscribers.*?>(.*?)</is'
                        ],
                ],
        ];
    
        $this->set('pageScriptPath', $this->pageScriptPath);
        $this->set( 'serviceList', $this->serviceList );
        $this->set( 'pageNo', $_REQUEST['pageno']);
                
                $this->colList = array(
                        'url' => $_SESSION['text']['common']['Url'],
                        'followers' => $_SESSION['text']['label']['Followers'],
                        'likes' => $_SESSION['text']['label']['Likes'],
                );
        
        parent::__construct();
    }
    
    function showSocialMediaLinks($searchInfo = '') {
        $userId = isLoggedIn();
        $this->set('searchInfo', $searchInfo);
        $sql = "select l.*, w.name as website_name from $this->linkTable l, websites w where l.website_id=w.id";
        
        if (!isAdmin()) {
            $sql .= " and w.user_id=$userId";
        }
        
        // search conditions
        $sql .= !empty($searchInfo['name']) ? " and l.name like '%".addslashes($searchInfo['name'])."%'" : "";
        $sql .= !empty($searchInfo['website_id']) ? " and l.website_id=".intval($searchInfo['website_id']) : "";
        $sql .= !empty($searchInfo['type']) ? " and `type`='".addslashes($searchInfo['type'])."'" : "";
        
        if (!empty($searchInfo['status'])) {
            $sql .= ($searchInfo['status'] == 'active') ? " and l.status=1" : " and l.status=0"; 
        }
        
        $webSiteCtrler = new WebsiteController();
        $websiteList = $webSiteCtrler->__getAllWebsites($userId, true);
        $this->set( 'websiteList', $websiteList );
         
        // pagination setup
        $this->db->query( $sql, true );
        $this->paging->setDivClass( 'pagingdiv' );
        $this->paging->loadPaging( $this->db->noRows, SP_PAGINGNO );
        $pagingDiv = $this->paging->printPages( $this->pageScriptPath, 'searchForm', 'scriptDoLoadPost', 'content', '' );
        $this->set( 'pagingDiv', $pagingDiv );
        $sql .= " limit " . $this->paging->start . "," . $this->paging->per_page;
        
        $linkList = $this->db->select( $sql );
        $this->set( 'list', $linkList );
        $this->render( 'socialmedia/show_social_media_links');
    }
    
    function __checkName($name, $websiteId, $linkId = false){
        $whereCond = "name='".addslashes($name)."'";
        $whereCond .= " and website_id='".intval($websiteId)."'";
        $whereCond .= !empty($linkId) ? " and id!=".intval($linkId) : "";
        $listInfo = $this->dbHelper->getRow($this->linkTable, $whereCond);
        return empty($listInfo['id']) ? false :  $listInfo['id'];
    }
    
    function __checkUrl($url, $websiteId, $linkId = false){
        $whereCond = "url='".addslashes($url)."'";
        $whereCond .= " and website_id=".intval($websiteId);
        $whereCond .= !empty($linkId) ? " and id!=".intval($linkId) : "";
        $listInfo = $this->dbHelper->getRow($this->linkTable, $whereCond);
        return empty($listInfo['id']) ? false :  $listInfo['id'];
    }
    
    function validateSocialMediaLink($listInfo) {        
        $errMsg = [];
        $errMsg['name'] = formatErrorMsg($this->validate->checkBlank($listInfo['name']));
        $errMsg['url'] = formatErrorMsg($this->validate->checkBlank($listInfo['url']));
        $errMsg['website_id'] = formatErrorMsg($this->validate->checkBlank($listInfo['website_id']));
        $errMsg['type'] = formatErrorMsg($this->validate->checkBlank($listInfo['type']));
        
        if(!$this->validate->flagErr){            
            if ($this->__checkName($listInfo['name'], $listInfo['website_id'], $listInfo['id'])) {
                $errMsg['name'] = formatErrorMsg($_SESSION['text']['label']['already exist']);
                $this->validate->flagErr = true;
            }
        }
        
        if(!$this->validate->flagErr){
            if ($this->__checkUrl($listInfo['url'], $listInfo['website_id'], $listInfo['id'])) {
                $errMsg['url'] = formatErrorMsg($_SESSION['text']['label']['already exist']);
                $this->validate->flagErr = true;
            }
        }
        
        if(!$this->validate->flagErr){
            if (!stristr($listInfo['url'], $listInfo['type'])) {
                $errMsg['url'] = formatErrorMsg($_SESSION['text']['common']["Invalid value"]);
                $this->validate->flagErr = true;
            }
        }
        
        // Validate link count
        if(!$this->validate->flagErr){
            $websiteCtrl = new WebsiteController();
            $websiteInfo = $websiteCtrl->__getWebsiteInfo($listInfo['website_id']);
            $newCount = !empty($listInfo['id']) ? 0 : 1;
            if (! $this->validateSocialMediaLinkCount($websiteInfo['user_id'], $newCount)) {
                $this->set('validationMsg', $this->spTextSMC['Your social media link count already reached the limit']);
                $this->validate->flagErr = true;
            }
        }
        
        return $errMsg;        
    }
    
    // Function to check / validate the user type social media count
    function validateSocialMediaLinkCount($userId, $newCount = 1) {
        $userCtrler = new UserController();
        
        // if admin user id return true
        if ($userCtrler->isAdminUserId($userId)) {
            return true;
        }
        
        $userTypeCtrlr = new UserTypeController();
        $userTypeDetails = $userTypeCtrlr->getUserTypeSpecByUser($userId);
        
        $whereCond = "l.website_id=w.id and w.user_id=".intval($userId);
        $existingInfo = $this->dbHelper->getRow("$this->linkTable l, websites w", $whereCond, "count(*) count");
        $userSMLinkCount = $existingInfo['count'];
        $userSMLinkCount += $newCount;
        
        // if limit is set and not -1
        if (isset($userTypeDetails['social_media_link_count']) && $userTypeDetails['social_media_link_count'] >= 0) {
            
            // check whether count greater than limit
            if ($userSMLinkCount <= $userTypeDetails['social_media_link_count']) {
                return true;
            } else {
                return false;
            }
            
        } else {
            return true;
        }
        
    }
    
    function newSocialMediaLink($info = '') {
        $userId = isLoggedIn();
        $this->set('post', $info);
        $webSiteCtrler = new WebsiteController();
        $websiteList = $webSiteCtrler->__getAllWebsites($userId, true);
        $this->set( 'websiteList', $websiteList );                
        $this->set('editAction', 'createSocialMediaLink');
        $this->render( 'socialmedia/edit_social_media_link');   
    }
    
    function createSocialMediaLink($listInfo = '') {
        
        $errMsg = $this->validateSocialMediaLink($listInfo);
        
        // if no error occured
        if (!$this->validate->flagErr) {
            $dataList = [
                'name' => $listInfo['name'],
                'url' => addHttpToUrl($listInfo['url']),
                'type' => $listInfo['type'],
                'website_id|int' => $listInfo['website_id'],
            ];
            $this->dbHelper->insertRow($this->linkTable, $dataList);
            $this->showSocialMediaLinks(['name' => $listInfo['name']]);
            exit;
        }
        
        $this->set('errMsg', $errMsg);
        $this->newSocialMediaLink($listInfo);
        
    }
    
    function editSocialMediaLink($linkId, $listInfo = '') {
        
        if (!empty($linkId)) {
            $userId = isLoggedIn();
            $webSiteCtrler = new WebsiteController();
            $websiteList = $webSiteCtrler->__getAllWebsites($userId, true);
            $this->set( 'websiteList', $websiteList );
            
            if(empty($listInfo)){
                $listInfo = $this->__getSocialMediaLinkInfo($linkId);
            }
            
            $this->set('post', $listInfo);           
            $this->set('editAction', 'updateSocialMediaLink');
            $this->render( 'socialmedia/edit_social_media_link');
        }
        
    }
    
    function updateSocialMediaLink($listInfo) {
        $this->set('post', $listInfo);
        $errMsg = $this->validateSocialMediaLink($listInfo);
        
        if (!$this->validate->flagErr) {
            $dataList = [
                'name' => $listInfo['name'],
                'url' => addHttpToUrl($listInfo['url']),
                'type' => $listInfo['type'],
                'website_id|int' => $listInfo['website_id'],
            ];
            $this->dbHelper->updateRow($this->linkTable, $dataList, "id=".intval($listInfo['id']));
            $this->showSocialMediaLinks(['name' => $listInfo['name']]);
            exit;
        }
        
        $this->set('errMsg', $errMsg);
        $this->editSocialMediaLink($listInfo['id'], $listInfo);
    }
    
    function deleteSocialMediaLink($linkId) {
        $this->dbHelper->deleteRows($this->linkTable, "id=" . intval($linkId));
        $this->showSocialMediaLinks();
    }
    
    function __changeStatus($linkId, $status){
        $linkId = intval($linkId);
        $this->dbHelper->updateRow($this->linkTable, ['status|int' => $status], "id=$linkId");
    }
    
    function __getSocialMediaLinkInfo($linkId) {
        $whereCond = "id=".intval($linkId);
        $info = $this->dbHelper->getRow($this->linkTable, $whereCond);
        return $info;
    }
    
    function verifyActionAllowed($linkId) {
        $allowed = true;
        
        // if not admin, check the permissions
        if (!isAdmin()) {
            $userId = isLoggedIn();
            $linkInfo = $this->__getSocialMediaLinkInfo($linkId);
            $webSiteCtrler = new WebsiteController();
            $webSiteInfo = $webSiteCtrler->__getWebsiteInfo($linkInfo['website_id']);
            $allowed = ($userId == $webSiteInfo['user_id']) ? true : false;
        }
        
        if (!$allowed) {
            showErrorMsg($_SESSION['text']['label']['Access denied']); 
        }
                
    }

        function viewQuickChecker($info='') {
                $this->render('socialmedia/quick_checker');
        }

        function doQuickChecker($listInfo = '') {
                
                if (!stristr($listInfo['url'], $listInfo['type'])) {
                        $errorMsg = formatErrorMsg($_SESSION['text']['common']["Invalid value"]);
                        $this->validate->flagErr = true;
                }
                
                // if no error occured find social media details
                if (!$this->validate->flagErr) {
                        $smLink = addHttpToUrl($listInfo['url']);
                        $result = $this->getSocialMediaDetails($listInfo['type'], $smLink);
                        
                        // if call is success
                        if ($result['status']) {
                                $this->set('smType', $listInfo['type']);
                                $this->set('smLink', $smLink);
                                $this->set('statInfo', $result);
                                $this->render('socialmedia/quick_checker_results');
                                exit;
                        } else {
                                $errorMsg = $result['msg'];
                        }
                        
                }
                
                $errorMsg = !empty($errorMsg) ? $errorMsg : $_SESSION['text']['common']['Internal error occured'];
                showErrorMsg($errorMsg);
                
        }       
        
        function getSocialMediaDetails($smType, $smLink) {
                $result = ['status' => 0, 'likes' => 0, 'followers' => 0, 'msg' => $_SESSION['text']['common']['Internal error occured']];
                $smInfo = $this->serviceList[$smType];
                
                if (!empty($smInfo) && !empty($smLink)) {
                        
                        // if params needs to be added with url
                        if (!empty($smInfo['url_part'])) {
                                $smLink .= stristr($smLink, '?') ? str_replace("?", "&", $smInfo['url_part']) : $smInfo['url_part'];
                        }
                        
                        $smContentInfo = $this->spider->getContent($smLink);
                        
                        if (!empty($smContentInfo['page'])) {
                            $matches = [];

                                // find likes
                                if (!empty($smInfo['regex']['like'])) {
                                        preg_match($smInfo['regex']['like'], $smContentInfo['page'], $matches);
                                        
                                        if (!empty($matches[1])) {
                                                $result['status'] = 1;
                                                $result['likes'] = formatNumber($matches[1]);
                                        }
                                        
                                }
                                
                                // find followers
                                if (!empty($smInfo['regex']['follower'])) {
                                        preg_match($smInfo['regex']['follower'], $smContentInfo['page'], $matches);
                                                
                                        if (!empty($matches[1])) {
                                                $result['status'] = 1;
                                                $result['followers'] = formatNumber($matches[1]);
                                        }
                                                
                                }
                                
                        } else {
                                $result['msg'] = $smContentInfo['errmsg'];
                        }
                        
                }
                
                return $result;
                
        }
        
        /*
         * function to get all links with out reports for a day
         */
        function getAllLinksWithOutReports($websiteId, $date) {
                $websiteId = intval($websiteId);
                $date = addslashes($date);
                $sql = "select link.*, lr.id result_id from social_media_links link left join 
                        social_media_link_results lr on (link.id=lr.sm_link_id and lr.report_date='$date') 
                        where link.status=1 and link.website_id=$websiteId and lr.id is NULL";
                
                $linkList = $this->db->select($sql);
                return $linkList;
                
        }
        
        function saveSocialMediaLinkResults($linkId, $linkInfo) {               
                $dataList = [
                        'sm_link_id|int' => $linkId,
                        'likes|int' => $linkInfo['likes'],
                        'followers|int' => $linkInfo['followers'],
                        'report_date' => date('Y-m-d'),
                ];
                
                $this->dbHelper->insertRow($this->linkReportTable, $dataList);          
        }
        
        /*
         * func to show report summary
         */ 
        function viewReportSummary($searchInfo = '', $summaryPage = false, $cronUserId=false) {
        
                $userId = !empty($cronUserId) ? $cronUserId : isLoggedIn();
                $this->set('summaryPage', $summaryPage);
                $this->set('searchInfo', $searchInfo);
                $this->set('cronUserId', $cronUserId);
        
                $exportVersion = false;
                switch($searchInfo['doc_type']){
        
                        case "export":
                                $exportVersion = true;
                                $exportContent = "";
                                break;
                                        
                        case "pdf":
                                $this->set('pdfVersion', true);
                                break;
                                        
                        case "print":
                                $this->set('printVersion', true);
                                break;
                }
        
                $fromTime = !empty($searchInfo['from_time']) ? addslashes($searchInfo['from_time']) : date('Y-m-d', strtotime('-1 days'));
                $toTime = !empty($searchInfo['to_time']) ? addslashes($searchInfo['to_time']) : date('Y-m-d');
                $this->set('fromTime', $fromTime);
                $this->set('toTime', $toTime);
        
                $websiteController = New WebsiteController();
                $wList = $websiteController->__getAllWebsites($userId, true);
                $websiteList = [];
                foreach ($wList as $wInfo) $websiteList[$wInfo['id']] = $wInfo;
                $websiteList = count($websiteList) ? $websiteList : array(0);
                $this->set('websiteList', $websiteList);
                $websiteId = intval($searchInfo['website_id']);
                $this->set('websiteId', $websiteId);
        
                // to find order col
                if (!empty($searchInfo['order_col'])) {
                        $orderCol = $searchInfo['order_col'];
                        $orderVal = getOrderByVal($searchInfo['order_val']);
                } else {
                        $orderCol = "followers";
                        $orderVal = 'DESC';
                }
        
                $this->set('orderCol', $orderCol);
                $this->set('orderVal', $orderVal);
                $scriptName = $summaryPage ? "archive.php" : $this->pageScriptPath;
                $scriptPath = SP_WEBPATH . "/$scriptName?sec=reportSummary&website_id=$websiteId";
                $scriptPath .= "&from_time=$fromTime&to_time=$toTime&search_name=" . $searchInfo['search_name'] . "&type=" . $searchInfo['type'];
                $scriptPath .= "&order_col=$orderCol&order_val=$orderVal&report_type=social-media-reports";
        
                // set website id to get exact keywords of a user
                if (!empty($websiteId)) {
                        $conditions = " and sml.website_id=$websiteId";
                } else {
                        $conditions = " and sml.website_id in (".implode(',', array_keys($websiteList)).")";
                }
        
                $conditions .= !empty($searchInfo['search_name']) ? " and sml.url like '%".addslashes($searchInfo['search_name'])."%'" : "";
                $conditions .= !empty($searchInfo['type']) ? " and sml.type='".addslashes($searchInfo['type'])."'" : "";
        
                $subSql = "select [cols] from $this->linkTable sml, $this->linkReportTable r where sml.id=r.sm_link_id
                and sml.status=1 $conditions and r.report_date='$toTime'";
        
                $sql = "
                (" . str_replace("[cols]", "sml.id,sml.url,sml.website_id,sml.type,r.likes,r.followers", $subSql) . ")
                        UNION
                        (select sml.id,sml.url,sml.website_id,sml.type,0,0 from $this->linkTable sml where sml.status=1 $conditions
                        and sml.id not in (". str_replace("[cols]", "distinct(sml.id)", $subSql) ."))
                order by " . addslashes($orderCol) . " " . addslashes($orderVal);
        
                if ($orderCol != 'url') $sql .= ", url";
        
                // pagination setup, if not from cron job email send function, pdf and export action
                if (!in_array($searchInfo['doc_type'], array("pdf", "export"))) {
                        $this->db->query($sql, true);
                        $this->paging->setDivClass('pagingdiv');
                        $this->paging->loadPaging($this->db->noRows, SP_PAGINGNO);
                        $pagingDiv = $this->paging->printPages($scriptPath, '', 'scriptDoLoad', 'content', "");
                        $this->set('pagingDiv', $pagingDiv);
                        $this->set('pageNo', $searchInfo['pageno']);
                        $sql .= " limit ".$this->paging->start .",". $this->paging->per_page;
                }
        
                # set report list
                $baseReportList = $this->db->select($sql);
                $this->set('baseReportList', $baseReportList);
                $this->set('colList', $this->colList);
        
                // if keywords existing
                if (!empty($baseReportList)) {
                                
                        $keywordIdList = array();
                        foreach ($baseReportList as $info) {
                                $keywordIdList[] = $info['id'];
                        }
        
                        $sql = "select sml.id,sml.url,sml.website_id,sml.type,r.followers,r.likes
                        from $this->linkTable sml, $this->linkReportTable r where sml.id=r.sm_link_id
                        and sml.status=1 $conditions and r.report_date='$fromTime'";
                        $sql .= " and sml.id in(" . implode(",", $keywordIdList) . ")";
                        $reportList = $this->db->select($sql);
                        $compareReportList = array();
                                
                        foreach ($reportList as $info) {
                                $compareReportList[$info['id']] = $info;
                        }
                                
                        $this->set('compareReportList', $compareReportList);
                                
                }
        
                if ($exportVersion) {
                        $spText = $_SESSION['text'];
                        $reportHeading =  $this->spTextTools['Social Media Report Summary']."($fromTime - $toTime)";
                        $exportContent .= createExportContent( array('', $reportHeading, ''));
                        $exportContent .= createExportContent( array());
                        $headList = array($spText['common']['Website'], $spText['common']['Url']);
        
                        $pTxt = str_replace("-", "/", substr($fromTime, -5));
                        $cTxt = str_replace("-", "/", substr($toTime, -5));
                        foreach ($this->colList as $colKey => $colLabel) {
                                if ($colKey == 'url') continue;
                                $headList[] = $colLabel . "($pTxt)";
                                $headList[] = $colLabel . "($cTxt)";
                                $headList[] = $colLabel . "(+/-)";
                        }
        
                        $exportContent .= createExportContent($headList);
                        foreach($baseReportList as $listInfo){
        
                                $valueList = array($websiteList[$listInfo['website_id']]['url'], $listInfo['url']);
                                foreach ($this->colList as $colName => $colVal) {
                                        if ($colName == 'url') continue;
                                                
                                        $currRank = isset($listInfo[$colName]) ? $listInfo[$colName] : 0;
                                        $prevRank = isset($compareReportList[$listInfo['id']][$colName]) ? $compareReportList[$listInfo['id']][$colName] : 0;
                                        $rankDiff = "";
        
                                        // if both ranks are existing
                                        if ($prevRank != '' && $currRank != '') {
                                                $rankDiff = $currRank - $prevRank;
                                        }
        
                                        $valueList[] = $prevRank;
                                        $valueList[] = $currRank;
                                        $valueList[] = $rankDiff;
                                }
        
                                $exportContent .= createExportContent( $valueList);
                        }
                                
                        if ($summaryPage) {
                                return $exportContent;
                        } else {
                                exportToCsv('social_media_report_summary', $exportContent);
                        }
                                
                } else {
                                
                        // if pdf export
                        if ($summaryPage) {
                                return $this->getViewContent('socialmedia/social_media_report_summary');
                        } else {
                                // if pdf export
                                if ($searchInfo['doc_type'] == "pdf") {
                                        exportToPdf($this->getViewContent('socialmedia/social_media_report_summary'), "social_media_report_summary_$fromTime-$toTime.pdf");
                                } else {
                                        $this->set('searchInfo', $searchInfo);
                                        $this->render('socialmedia/social_media_report_summary');
                                }
                        }
                                
                }
        }
        
        function __getSocialMediaLinks($whereCond = false) {
            $linkList = $this->dbHelper->getAllRows($this->linkTable, $whereCond);
            return !empty($linkList) ? $linkList : false;
        }
        
        // func to show detailed reports
        function viewDetailedReports($searchInfo = '') {
        
                $userId = isLoggedIn();

                if (!empty ($searchInfo['from_time'])) {
                        $fromTimeDate = addslashes($searchInfo['from_time']);
                } else {
                        $fromTimeDate = date('Y-m-d', strtotime('-15 days'));
                }
                
                if (!empty ($searchInfo['to_time'])) {
                        $toTimeDate = addslashes($searchInfo['to_time']);
                } else {
                        $toTimeDate = date('Y-m-d');
                }
                
                $this->set('fromTime', $fromTimeDate);
                $this->set('toTime', $toTimeDate);
        
            if(!empty($searchInfo['link_id']) && !empty($searchInfo['rep'])){                           
                        $searchInfo['link_id'] = intval($searchInfo['link_id']);
                        $linkInfo = $this->__getSocialMediaLinkInfo($searchInfo['link_id']);
                        $searchInfo['website_id'] = $linkInfo['website_id'];
                }
        
                $websiteController = New WebsiteController();
                $websiteList = $websiteController->__getAllWebsites($userId, true);
                $this->set('websiteList', $websiteList);
                $websiteId = empty ($searchInfo['website_id']) ? $websiteList[0]['id'] : intval($searchInfo['website_id']);
                $this->set('websiteId', $websiteId);
        
                $linkList = $this->__getSocialMediaLinks("website_id=$websiteId and status=1 order by name");
                $this->set('linkList', $linkList);
                $linkId = empty($searchInfo['link_id']) ? $linkList[0]['id'] : intval($searchInfo['link_id']);
                $this->set('linkId', $linkId);
        
                $list = [];
                if (!empty($linkId)) {
                
                $sql = "select s.* from $this->linkReportTable s
                where report_date>='$fromTimeDate' and report_date<='$toTimeDate' and s.sm_link_id=$linkId
                order by s.report_date";
                $reportList = $this->db->select($sql);
                
                $colList = array_keys($this->colList);
                array_shift($colList);
                foreach ($colList as $col) $prevRank[$col] = 0;
                
                # loop through rank
                foreach ($reportList as $key => $repInfo) {
                        
                        // if not the first row, find differences in rank
                        if ($key)  {
                                
                                foreach ($colList as $col) $rankDiff[$col] = '';
                                        
                                foreach ($colList as $col) {
                                        $rankDiff[$col] = round($repInfo[$col] - $prevRank[$col], 2);
                                        if (empty($rankDiff[$col])) continue;
                                        
                                        if ($col == "average_position" ) $rankDiff[$col] = $rankDiff[$col] * -1;
                                        $rankClass = ($rankDiff[$col] > 0) ? 'green' : 'red';
                                        
                                        $rankDiff[$col] = "<font class='$rankClass'>($rankDiff[$col])</font>";
                                        $reportList[$key]['rank_diff_'.$col] = empty($rankDiff[$col]) ? '' : $rankDiff[$col];                   
                                }
                                
                        }
                                
                        foreach ($colList as $col) $prevRank[$col] = $repInfo[$col];
                
                }
                
                $list = array_reverse($reportList, true);
                }
                
                $this->set('list', $list);                              
                $this->render('socialmedia/social_media_reports');
                
        }
        
        // func to show social media link select box
        function showSocialMediaLinkSelectBox($websiteId, $linkId = ""){
            $websiteId = intval($websiteId);
            $this->set('linkList', $this->__getSocialMediaLinks("website_id=$websiteId and status=1 order by name"));
            $this->set('linkId', $linkId);
            $this->render('socialmedia/social_media_link_select_box');
        }
        
        // func to show link search reports in graph
        function viewGraphReports($searchInfo = '') {
            
            $userId = isLoggedIn();
            
            if (!empty ($searchInfo['from_time'])) {
                $fromTimeDate = addslashes($searchInfo['from_time']);
            } else {
                $fromTimeDate = date('Y-m-d', strtotime('-15 days'));
            }
            
            if (!empty ($searchInfo['to_time'])) {
                $toTimeDate = addslashes($searchInfo['to_time']);
            } else {
                $toTimeDate = date('Y-m-d');
            }
            
            $this->set('fromTime', $fromTimeDate);
            $this->set('toTime', $toTimeDate);
            
            if(!empty($searchInfo['link_id']) && !empty($searchInfo['rep'])){
                $searchInfo['link_id'] = intval($searchInfo['link_id']);
                $linkInfo = $this->__getSocialMediaLinkInfo($searchInfo['link_id']);
                $searchInfo['website_id'] = $linkInfo['website_id'];
            }
            
            $websiteController = New WebsiteController();
            $websiteList = $websiteController->__getAllWebsites($userId, true);
            $this->set('websiteList', $websiteList);
            $websiteId = empty ($searchInfo['website_id']) ? $websiteList[0]['id'] : intval($searchInfo['website_id']);
            $this->set('websiteId', $websiteId);
            
            $linkList = $this->__getSocialMediaLinks("website_id=$websiteId and status=1 order by name");
            $this->set('linkList', $linkList);
            $linkId = empty($searchInfo['link_id']) ? $linkList[0]['id'] : intval($searchInfo['link_id']);
            $this->set('linkId', $linkId);
            
            // if reports not empty
            $colList = $this->colList;
            array_shift($colList);
            $this->set('colList', $colList);
            $this->set('searchInfo', $searchInfo);
        
            $graphContent = showErrorMsg($_SESSION['text']['common']['No Records Found'], false, true);
            if (!empty($linkId)) {
                
                $sql = "select s.* from $this->linkReportTable s
                where report_date>='$fromTimeDate' and report_date<='$toTimeDate'  and s.sm_link_id=$linkId
                order by s.report_date";
                $reportList = $this->db->select($sql);
                
                $graphColList = array();
                if (!empty($searchInfo['attr_type'])) {
                        $graphColList[$searchInfo['attr_type']] = $colList[$searchInfo['attr_type']];
                } else {
                        //array_pop($colList);
                        $graphColList = $colList;
                }
                
                if (!empty($reportList)) {
                                
                        $dataArr = "['Date', '" . implode("', '", array_values($graphColList)) . "']";
                         
                        // loop through data list
                        foreach ($reportList as $dataInfo) {
        
                                $valStr = "";
                                foreach ($graphColList as $seId => $seVal) {
                                        $valStr .= ", ";
                                        $valStr .= !empty($dataInfo[$seId]) ? $dataInfo[$seId] : 0;
                                }
        
                                $dataArr .= ", ['{$dataInfo['report_date']}' $valStr]";
                        }
                         
                        $this->set('dataArr', $dataArr);
                        $this->set('graphTitle', $this->spTextTools['Graphical Reports']);
                        $graphContent = $this->getViewContent('report/graph');
                } else {
                        $graphContent = showErrorMsg($_SESSION['text']['common']['No Records Found'], false, true);
                }
                
            }
                
                // get graph content
                $this->set('graphContent', $graphContent);
                $this->render('socialmedia/graphicalreport');
                
        }
        
}
?>