Вход Регистрация
Файл: Space race/admin/classes/reports.class.php
Строк: 138
<?php

/**
 * Various dynamic reports based on site performance.
 *
 
 */

include_once(dirname(dirname(dirname(__FILE__))) . '/classes/generic.class.php');

class 
Starrace_reports extends Generic {

    public 
$socialMethods = array(
        
'facebook'    =>    '3B5998',
        
'twitter'     =>    '08c',
        
'google'      =>    'f23437',
        
'yahoo'       =>    '670d6d'
    
);

    function 
__construct() {

        
$this->findEnabledMethods();
        
$this->graphInit();
        
$this->newUsersGraph();

    }

    
/* @TODO: This is duplicated code from integration.class. Obliterate! */
    
private function findEnabledMethods() {

        foreach ( 
$this->socialMethods as $method => $color )
            if ( !
parent::getOption('integration-'.$method.'-enable') )
                unset(
$this->socialMethods[$method]);

    }

    public function 
topUsers() {

        
$sql "SELECT login_users.username,
                COUNT( login_timestamps.user_id ) AS counted_logins
                FROM login_users, login_timestamps
                WHERE login_timestamps.user_id = login_users.user_id
                GROUP BY username
                ORDER BY counted_logins DESC
                LIMIT 0,10"
;

        
$query parent::query($sql);

        
$topUsers = array();

        while(
$row $query->fetch(PDO::FETCH_ASSOC)) :
            
$topUsers[][$row['username']] = $row['counted_logins'];
        endwhile;

        return 
$topUsers;

    }

    public function 
displayTopUsers() {

        
$topUsers $this->topUsers();
        
$display '';

        foreach (
$topUsers as $key) :

            foreach (
$key as $username => $count) :

            
$display .= "<tr>
                            <td>
$username</td>
                            <td>
$count</td>
                        </tr>"
;
            endforeach;

        endforeach;

        return 
$display;


    }

    private function 
graphInit() {

        
$this->start_date = (isset($_POST['start_date'])) ? $_POST['start_date'] : '';
        
$this->end_date   = (isset($_POST['end_date']))   ? $_POST['end_date']   : '';

        if (!
$this->start_date$this->start_date date('Ymd'strtotimedate('Ym'time()).'01' ));
        if (!
$this->end_date)   $this->end_date   date('Ymd'time());

        
$this->start_date = (int) strtotime($this->start_date);
        
$this->end_date   = (int) strtotime($this->end_date);

        
$this->newUsers = array();
        
$this->socialUsers = array();
        
$this->sql_timestamp = array();

        
$count 0;
        
$days = ($this->end_date $this->start_date) / (60 60 24);
        if (
$days==0$days 1;

        while (
$count $days) :

            
$time strtotime(date('Ymd'strtotime('+ '.$count.' DAY'$this->start_date))).'000';
            
$this->newUsers[$time] = 0;
            
$this->socialUsers[$time] = 0;
            
$count++;

        endwhile;

    }

    
/** New users. */
    
private function newUsersGraph() {

        
$params = array(
            
':start_date' => date('Y-m-d'$this->start_date),
            
':end_date'   => date('Y-m-d'$this->end_date)
        );
        
$sql "SELECT `timestamp` FROM `login_users` WHERE date(`timestamp`) >= :start_date AND date(`timestamp`) <= :end_date ORDER BY `timestamp` ASC;";
        
$query parent::query($sql$params);
        while(
$row $query->fetch(PDO::FETCH_ASSOC)) :

            
$date strtotime(date('Ymd'strtotime($row['timestamp']))).'000';
            
$this->newUsers[$date] = 0;
            
$date date('Y-m-d'strtotime($row['timestamp']));
            
$this->sql_timestamp[$date] = 0;

        endwhile;

        foreach (
$this->sql_timestamp as $stamp => $count) {

            
$params = array( ':stamp' => $stamp );
            
$sql "SELECT COUNT(`timestamp`) FROM `login_users` WHERE date(`timestamp`) = :stamp;";
            
$stmt parent::query($sql$params);
            
$result $stmt->fetch(PDO::FETCH_NUM);

            
$stamp strtotime(date('Ymd'strtotime($stamp))).'000';
            
$this->newUsers[$stamp] = $result[0];

        }

    }

    
/** Integrated users. */
    
function socialGraph($type) {

        if(empty(
$this->socialMethods[$type])) return false;

        
$params = array(
            
':start_date' => date('Y-m-d'$this->start_date),
            
':end_date'   => date('Y-m-d'$this->end_date)
        );
        
$sql "SELECT `timestamp`
                FROM `login_integration`
                WHERE 
$type IS NOT NULL
                AND trim(
$type) <> ''
                AND date(`timestamp`) >= :start_date
                AND date(`timestamp`) <= :end_date
                ORDER BY `timestamp` ASC;"
;

        
$query parent::query($sql$params);

        while (
$row $query->fetch(PDO::FETCH_ASSOC)) :

            
$date strtotime(date('Ymd'strtotime($row['timestamp']))).'000';
            
$this->socialUsers[$date] = 0;
            
$date date('Y-m-d'strtotime($row['timestamp']));
            
$this->sql_timestamp[$date] = 0;

        endwhile;

        foreach (
$this->sql_timestamp as $stamp => $count) {

            
$params = array( ':stamp' => $stamp );
            
$sql "SELECT COUNT(`timestamp`)
                    FROM `login_integration`
                    WHERE date(`timestamp`) = :stamp
                    AND `
$type` IS NOT NULL
                    AND trim(`
$type`) <> '';";

            
$query parent::query($sql$params);

            if ( 
$query->rowCount() < ) break;

            
$result $query->fetch(PDO::FETCH_NUM);
            
$stamp strtotime(date('Ymd'strtotime($stamp))).'000';
            
$this->socialUsers[$stamp] = $result[0];

        }

        return 
$this->socialUsers;

    }

    public function 
countRegisteredUsers() {

        
$type 'timestamp';

        
$sql "SELECT * FROM `login_users` WHERE `timestamp` IS NOT NULL AND trim(`timestamp`) <> '';";
        
$query parent::query($sql);

        return 
$query->rowCount();

    }

    public function 
countSocialUsers($type$range false) {

        if(empty(
$this->socialMethods[$type])) return false;

        if (!
$range) {
            
$sql "SELECT * FROM `login_integration` WHERE `$type` IS NOT NULL AND trim(`$type`) <> '';";
        } else {
            
$sql sprintf("SELECT * FROM `login_integration`
                    WHERE `
$type` IS NOT NULL
                    AND trim(`
$type`) <> ''
                    AND date(`timestamp`) >= '%s'
                    AND date(`timestamp`) <= '%s'
                    ORDER BY `timestamp` ASC;"
,
                    
date('Y-m-d'$this->start_date), date('Y-m-d'$this->end_date));
        }

        
$query parent::query($sql);

        return 
$query->rowCount();

    }

}

$starrace_reports = new Starrace_reports();
?>
Онлайн: 0
Реклама