Seditio Source
Root |
./othercms/elxis_5.3_atlas_rev2452/components/com_cpanel/controllers/statistics.php
<?php
/**
* @version        $Id: statistics.php 2161 2019-03-12 21:37:01Z IOS $
* @package        Elxis
* @subpackage    CPanel component
* @copyright    Copyright (c) 2006-2019 Elxis CMS (http://www.elxis.org). All rights reserved.
* @license        Elxis Public License ( http://www.elxis.org/elxis-public-license.html )
* @author        Elxis Team ( http://www.elxis.org )
* @description     Elxis CMS is free software. Read the license for copyright notices and details
*/

defined('_ELXIS_') or die ('Direct access to this location is not allowed');


class
statisticsCPController extends cpanelController {

   
/*********************/
    /* MAGIC CONSTRUCTOR */
    /*********************/
   
public function __construct($view=null, $model=null) {
       
parent::__construct($view, $model);
    }


   
/***************************/
    /* PREPARE SITE STATISTICS */
    /***************************/
   
public function showstats() {
       
$elxis = eFactory::getElxis();
       
$eDoc = eFactory::getDocument();
       
$eLang = eFactory::getLang();
       
$pathway = eFactory::getPathway();

        if (
$elxis->acl()->check('com_cpanel', 'statistics', 'view') < 1) {
           
$url = $elxis->makeAURL('cpanel:/');
           
$elxis->redirect($url, $eLang->get('NOTALLOWACCPAGE'), true);
        }

       
$year = date('Y');
       
$month = date('n');
       
$stats_start = $this->model->getStatisticsStart();

        if (
$stats_start) {
            if (isset(
$_GET['dt'])) {
               
$dt = trim($_GET['dt']);
                if (
is_numeric($dt)) {
                    if (
strlen($dt) == 6) {
                       
$y = intval(substr($dt, 0, 4));
                       
$m = intval(substr($dt, -2));
                        if ((
$m > 0) && ($m < 13) && ($y >= $stats_start['year']) && ($y <= date('Y'))) {
                           
$year = $y;
                            if (
$y == date('Y')) {
                               
$month = ($m <= date('n')) ? $m : date('n');
                            } else {
                               
$month = $m;
                            }
                        }
                    }
                }
            }
        }

       
$yeardata = $this->collectYearStats($year);
       
$monthdata = $this->collectMonthStats($year, $month);

       
$eDoc->addStyleLink($elxis->secureBase().'/components/com_cpanel/css/cp'.$eLang->getinfo('RTLSFX').'.css');
       
$eDoc->addScriptLink($elxis->secureBase().'/components/com_cpanel/js/chart.min.js');

       
$pathway->deleteAllNodes();
       
$pathway->addNode($eLang->get('STATISTICS'));
       
$eDoc->setTitle($eLang->get('STATISTICS').' '.$year);

       
$this->view->graphs($yeardata, $monthdata, $stats_start, $year, $month, $eLang, $elxis);
    }


   
/******************************************/
    /* COLLECT STATISTICS FOR THE GIVEN MONTH */
    /******************************************/
   
private function collectMonthStats($year, $month) {
       
$ts = mktime(12, 0, 0, $month, 15, $year);
       
$daysnum = date('t', $ts);
       
$mname = eFactory::getDate()->monthName($month);

       
$data = array(
           
'year' => $year,
           
'month' => $month,
           
'monthname' => $mname,
           
'daysnum' => $daysnum,
           
'visits' => array(
               
'total' => 0,
               
'stats' => array()
            ),
           
'clicks' => array(
               
'total' => 0,
               
'stats' => array()
            ),
           
'langs' => array(
               
'total' => 0,
               
'stats' => array()
            )
        );

        for (
$i=1; $i <= $daysnum; $i++) {
           
$data['visits']['stats'][$i] = 0;
           
$data['clicks']['stats'][$i] = 0;
        }

       
$rows = $this->model->getStatistics($year, $month);
        if (!
$rows) { return $data; }

        foreach (
$rows as $row) {
           
$day = (int)substr($row['statdate'], -2);

           
$data['visits']['stats'][$day] = $row['visits'];
           
$data['visits']['total'] += $row['visits'];
           
$data['clicks']['stats'][$day] = $row['clicks'];
           
$data['clicks']['total'] += $row['clicks'];
           
           
$alngs = unserialize($row['langs']);
            if (
is_array($alngs) && (count($alngs) > 0)) {
                foreach (
$alngs as $lng => $clicks) {
                   
$data['langs']['total'] += $clicks;
                    if (!isset(
$data['langs']['stats'][$lng])) {
                       
$data['langs']['stats'][$lng] = $clicks;
                    } else {
                       
$data['langs']['stats'][$lng] += (int)$clicks;
                    }
                }
            }
        }

        return
$data;
    }


   
/*****************************************/
    /* COLLECT STATISTICS FOR THE GIVEN YEAR */
    /*****************************************/
   
private function collectYearStats($year) {
       
$data = array(
           
'year' => $year,
           
'visits' => array(
               
'total' => 0,
               
'stats' => array()
            ),
           
'clicks' => array(
               
'total' => 0,
               
'stats' => array()
            ),
           
'langs' => array(
               
'total' => 0,
               
'stats' => array()
            )
        );

        for (
$i=1; $i <= 12; $i++) {
           
$data['visits']['stats'][$i] = 0;
           
$data['clicks']['stats'][$i] = 0;
        }

       
$rows = $this->model->getStatistics($year, 0);
        if (!
$rows) { return $data; }

        foreach (
$rows as $row) {
           
$month = (int)substr($row['statdate'], 5, 2);
           
$data['visits']['stats'][$month] += $row['visits'];
           
$data['visits']['total'] += $row['visits'];
           
$data['clicks']['stats'][$month] += $row['clicks'];
           
$data['clicks']['total'] += $row['clicks'];

           
$alngs = unserialize($row['langs']);
            if (
is_array($alngs) && (count($alngs) > 0)) {
                foreach (
$alngs as $lng => $clicks) {
                   
$data['langs']['total'] += $clicks;
                    if (!isset(
$data['langs']['stats'][$lng])) {
                       
$data['langs']['stats'][$lng] = $clicks;
                    } else {
                       
$data['langs']['stats'][$lng] += $clicks;
                    }
                }
            }
        }

        return
$data;
    }

}

?>