PHP Classes

File: htdocs/class/smarty3_plugins/function.xoStats.php

Recommend this page to a friend!
  Packages of Michael Beck   Xoops 2.5   htdocs/class/smarty3_plugins/function.xoStats.php   Download  
File: htdocs/class/smarty3_plugins/function.xoStats.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Xoops 2.5
Modular content management publication system
Author: By
Last change:
Date: 2 months ago
Size: 4,324 bytes
 

Contents

Class file image Download
<?php

use Xmf\IPAddress;
use
Xmf\Module\Helper\Cache;

/**
 * Smarty plugin
 * -------------------------------------------------------------
 * File: function.xoStats.php
 * Type: function
 * Name: xoStats
 * Purpose: XOOPS Members Statistics
 * Author: Lio MJ <liomj83@gmail.com>
 * Examples:
 * <{xoStats}>
 * Latest Member : <a href="<{$xoops_url}>/userinfo.php?uid=<{$latestUid}>"><{$latestMemberUname}></a><br>
 * Total Posts : <{$totalPosts}><br>
 * Total Users : <{$totalUsers}><br>
 * Total Online : <{$totalOnline}><br>
 * New Users Today : <{$newUsersToday}><br>
 * New Users Yesterday : <{$newUsersYesterday}><br>
 *
 * These are the names of all the values that will be assigned for Smarty
 * $latestMemberName - name of newest member
 * $latestMemberUname - uname of newest member
 * $latestUid - uid of newest member
 * $totalOnline - total members online
 * $totalPosts - total posts by all members
 * $newUsersToday - number of members registered today
 * $newUsersYesterday - number of members registered yesterday
 * $totalUsers - total number of members
 */

/**
 * @param array $params
 * @param \Smarty $smarty Smarty instance
 *
 * @return void
 */
function smarty_function_xoStats($params, $smarty)
{
   
$cache = new Cache('system');
   
$stats = $cache->cacheRead('xostats', 'xoStatsRegen', 30);

    foreach (
$stats as $k => $v) {
       
$smarty->assign($k, $v);
    }
}

function
xoStatsRegen()
{
    global
$xoopsUser, $xoopsModule;

   
$stats = [];

   
/** @var \XoopsMemberHandler $memberHandler */
   
$memberHandler = xoops_getHandler('member');

   
// Getting Total Online Users
    /** @var \XoopsOnlineHandler $onlineHandler */
   
$onlineHandler = xoops_getHandler('online');
   
// set gc probability to 10% for now..
   
if (mt_rand(1, 100) < 11) {
       
$onlineHandler->gc(300);
    }
    if (
is_object($xoopsUser)) {
       
$uid = $xoopsUser->getVar('uid');
       
$uname = $xoopsUser->getVar('uname');
    } else {
       
$uid = 0;
       
$uname = '';
    }

   
$requestIp = IPAddress::fromRequest()->asReadable();
   
$requestIp = (false === $requestIp) ? '0.0.0.0' : $requestIp;
    if (
is_object($xoopsModule)) {
       
$onlineHandler->write($uid, $uname, time(), $xoopsModule->getVar('mid'), $requestIp);
    } else {
       
$onlineHandler->write($uid, $uname, time(), 0, $requestIp);
    }
   
$onlines = $onlineHandler->getAll();
    if (empty(
$onlines)) {
       
$stats['totalOnline'] = 0;
    } else {
       
$stats['totalOnline'] = count($onlines);
    }

   
//Getting Total Registered Users
   
$levelCriteria = new \Criteria('level', '0', '>');
   
$criteria = new \CriteriaCompo($levelCriteria);
   
$criteria24 = new \CriteriaCompo($levelCriteria);
   
$criteria24->add(new \Criteria('user_regdate', (mktime(0, 0, 0) - (24 * 3600)), '>='), 'AND');
   
$criteria48 = new \CriteriaCompo($levelCriteria);
   
$criteria48->add(new \Criteria('user_regdate', (mktime(0, 0, 0) - (48 * 3600)), '>='), 'AND');
   
$criteria48->add(new \Criteria('user_regdate', (mktime(0, 0, 0) - (24 * 3600)), '<'), 'AND');
   
$stats['totalUsers'] = $memberHandler->getUserCount($levelCriteria);

   
//Getting User Registration Statistics
   
$stats['newUsersToday'] = $memberHandler->getUserCount($criteria24);
   
$stats['newUsersYesterday'] = $memberHandler->getUserCount($criteria48);

   
// Getting Last Registered Member
   
$criteria->setOrder('DESC');
   
$criteria->setSort('user_regdate');
   
$criteria->setLimit(1);
   
$lastMembers = $memberHandler->getUsers($criteria);
   
$stats['latestMemberName'] = $lastMembers[0]->getVar('name');
   
$stats['latestMemberUname'] = $lastMembers[0]->getVar('uname');
   
$stats['latestUid'] = $lastMembers[0]->getVar('uid');

   
//Total Post Count
   
$sql = 'SELECT SUM(posts) AS totalposts FROM ' . $GLOBALS['xoopsDB']->prefix('users') . ' WHERE level > 0';
   
$result = $GLOBALS['xoopsDB']->query($sql);
    if (!
$GLOBALS['xoopsDB']->isResultSet($result)) {
        throw new \
RuntimeException(
            \
sprintf(_DB_QUERY_ERROR, $sql) . $GLOBALS['xoopsDB']->error(),
           
E_USER_ERROR,
        );
    }
   
$myrow = $GLOBALS['xoopsDB']->fetchArray($result);
   
$stats['totalPosts'] = $myrow['totalposts'];

    return
$stats;
}