1: | <?php
|
2: |
|
3: | use Xmf\Module\Helper\Cache;
|
4: | use Xmf\IPAddress;
|
5: |
|
6: | |
7: | |
8: | |
9: | |
10: | |
11: | |
12: | |
13: | |
14: | |
15: | |
16: | |
17: | |
18: | |
19: | |
20: | |
21: | |
22: | |
23: | |
24: | |
25: | |
26: | |
27: | |
28: | |
29: | |
30: | |
31: | |
32: |
|
33: |
|
34: | |
35: | |
36: | |
37: | |
38: | |
39: |
|
40: | function smarty_function_xoStats($params, &$smarty)
|
41: | {
|
42: | $cache = new Cache('system');
|
43: | $stats = $cache->cacheRead('xostats', 'xoStatsRegen', 30);
|
44: |
|
45: | foreach ($stats as $k => $v) {
|
46: | $smarty->assign($k, $v);
|
47: | }
|
48: | }
|
49: |
|
50: | function xoStatsRegen()
|
51: | {
|
52: | global $xoopsUser, $xoopsModule;
|
53: |
|
54: | $stats = array();
|
55: |
|
56: |
|
57: | $memberHandler = xoops_getHandler('member');
|
58: |
|
59: |
|
60: |
|
61: | $onlineHandler = xoops_getHandler('online');
|
62: |
|
63: | if (mt_rand(1, 100) < 11) {
|
64: | $onlineHandler->gc(300);
|
65: | }
|
66: | if (is_object($xoopsUser)) {
|
67: | $uid = $xoopsUser->getVar('uid');
|
68: | $uname = $xoopsUser->getVar('uname');
|
69: | } else {
|
70: | $uid = 0;
|
71: | $uname = '';
|
72: | }
|
73: |
|
74: | $requestIp = IPAddress::fromRequest()->asReadable();
|
75: | $requestIp = (false === $requestIp) ? '0.0.0.0' : $requestIp;
|
76: | if (is_object($xoopsModule)) {
|
77: | $onlineHandler->write($uid, $uname, time(), $xoopsModule->getVar('mid'), $requestIp);
|
78: | } else {
|
79: | $onlineHandler->write($uid, $uname, time(), 0, $requestIp);
|
80: | }
|
81: | $onlines = $onlineHandler->getAll();
|
82: | if (empty($onlines)) {
|
83: | $stats['totalOnline'] = 0;
|
84: | } else {
|
85: | $stats['totalOnline'] = count($onlines);
|
86: | }
|
87: |
|
88: |
|
89: | $levelCriteria = new \Criteria('level', 0, '>');
|
90: | $criteria = new \CriteriaCompo($levelCriteria);
|
91: | $criteria24 = new \CriteriaCompo($levelCriteria);
|
92: | $criteria24->add(new \Criteria('user_regdate', (mktime(0, 0, 0) - (24 * 3600)), '>='), 'AND');
|
93: | $criteria48 = new \CriteriaCompo($levelCriteria);
|
94: | $criteria48->add(new \Criteria('user_regdate', (mktime(0, 0, 0) - (48 * 3600)), '>='), 'AND');
|
95: | $criteria48->add(new \Criteria('user_regdate', (mktime(0, 0, 0) - (24 * 3600)), '<'), 'AND');
|
96: | $stats['totalUsers'] = $memberHandler->getUserCount($levelCriteria);
|
97: |
|
98: |
|
99: | $stats['newUsersToday'] = $memberHandler->getUserCount($criteria24);
|
100: | $stats['newUsersYesterday'] = $memberHandler->getUserCount($criteria48);
|
101: |
|
102: |
|
103: | $criteria->setOrder('DESC');
|
104: | $criteria->setSort('user_regdate');
|
105: | $criteria->setLimit(1);
|
106: | $lastMembers = $memberHandler->getUsers($criteria);
|
107: | $stats['latestMemberName'] = $lastMembers[0]->getVar('name');
|
108: | $stats['latestMemberUname'] = $lastMembers[0]->getVar('uname');
|
109: | $stats['latestUid'] = $lastMembers[0]->getVar('uid');
|
110: |
|
111: |
|
112: | $sql = 'SELECT SUM(posts) AS totalposts FROM ' . $GLOBALS['xoopsDB']->prefix('users') . ' WHERE level > 0';
|
113: | $result = $GLOBALS['xoopsDB']->query($sql);
|
114: | if (!$GLOBALS['xoopsDB']->isResultSet($result)) {
|
115: | throw new \RuntimeException(
|
116: | \sprintf(_DB_QUERY_ERROR, $sql) . $GLOBALS['xoopsDB']->error(), E_USER_ERROR
|
117: | );
|
118: | }
|
119: | $myrow = $GLOBALS['xoopsDB']->fetchArray($result);
|
120: | $stats['totalPosts'] = $myrow['totalposts'];
|
121: |
|
122: | return $stats;
|
123: | }
|
124: | |