Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Stats/AbstractHandler.php
<?php

namespace XF\Stats;

use
XF\App;

abstract class
AbstractHandler
{
    protected
$contentType;

   
/**
     * @var App
     */
   
protected $app;

    public function
__construct($contentType, App $app)
    {
       
$this->contentType = $contentType;
       
$this->app = $app;
    }

   
/**
     * @return \XF\Db\AbstractAdapter
     */
   
public function db()
    {
        return
$this->app->db();
    }

    abstract public function
getStatsTypes();
    abstract public function
getData($start, $end);

   
/**
     * Manipulates a statistic type before display. Must still return a number (no formatting).
     *
     * @param string $statsType
     * @param number $counter
     *
     * @return number
     */
   
public function adjustStatValue($statsType, $counter)
    {
        return
$counter;
    }

   
/**
     * Returns SQL for a basic stats prepared statement.
     *
     * @param string    Name of table from which to select data
     * @param string    Name of date field
     * @param string    Extra SQL conditions
     * @param string    SQL calculation function (COUNT(*), SUM(field_name)...)
     *
     * @return string
     */
   
protected function getBasicDataQuery($tableName, $dateField, $extraWhere = '', $calcFunction = 'COUNT(*)')
    {
       
// for 2.0 add-ons using likes, silently convert the stats to reactions to avoid DB errors
       
if ($tableName == 'xf_liked_content')
        {
           
$tableName = 'xf_reaction_content';

            if (
$dateField == 'like_date')
            {
               
$dateField = 'reaction_date';
            }
            if (
$extraWhere == 'content_type = ?')
            {
               
$extraWhere = 'content_type = ? AND is_counted = 1';
            }
        }

        return
'
            SELECT
                '
. $dateField . ' - ' . $dateField . ' % 86400 AS unixDate,
                '
. $calcFunction . '
            FROM '
. $tableName . '
            WHERE '
. $dateField . ' BETWEEN ? AND ?
            '
. ($extraWhere ? 'AND ' . $extraWhere : '') . '
            GROUP BY unixDate
        '
;
    }
}