1: | <?php
|
2: |
|
3: | |
4: | |
5: | |
6: | |
7: | |
8: | |
9: | |
10: | |
11: |
|
12: |
|
13: | include __DIR__ . '/../../../mainfile.php';
|
14: | $mydirname = basename( dirname(__DIR__) ) ;
|
15: | $mydirpath = dirname(__DIR__) ;
|
16: | require $mydirpath.'/mytrustdirname.php' ;
|
17: |
|
18: | require XOOPS_TRUST_PATH.'/modules/'.$mytrustdirname.'/admin/admin_header.php';
|
19: |
|
20: | xoops_cp_header();
|
21: |
|
22: | function dumpArray($array, $wrap = null)
|
23: | {
|
24: | $firstTime = true;
|
25: | $string = '[';
|
26: | foreach ($array as $value) {
|
27: | $string .= (!$firstTime) ? ', ' : '';
|
28: | $firstTime = false;
|
29: | $wrap = ($wrap === null) ? ((is_int($value)) ? '' : '\'') : $wrap;
|
30: | $string .= $wrap . $value . $wrap;
|
31: | }
|
32: | $string .= ']';
|
33: | return $string;
|
34: | }
|
35: |
|
36: | $queryFormat = "SELECT `type`, '%s' as age, COUNT(*) as count FROM `" . $xoopsDB->prefix($mydirname . "_log")
|
37: | . "` WHERE `timestamp` > NOW() - INTERVAL %d SECOND GROUP BY `type`, 2 ";
|
38: |
|
39: | $sql = '';
|
40: | $sql .= sprintf($queryFormat, 'month', 30*24*60*60);
|
41: | $sql .= 'UNION ALL ';
|
42: | $sql .= sprintf($queryFormat, 'week', 7*24*60*60);
|
43: | $sql .= 'UNION ALL ';
|
44: | $sql .= sprintf($queryFormat, 'day', 24*60*60);
|
45: | $sql .= 'UNION ALL ';
|
46: | $sql .= sprintf($queryFormat, 'hour', 60*60);
|
47: | $result = $xoopsDB->query($sql);
|
48: | if (!$xoopsDB->isResultSet($result)) {
|
49: | throw new \RuntimeException(
|
50: | \sprintf(_DB_QUERY_ERROR, $sql) . $xoopsDB->error(), E_USER_ERROR
|
51: | );
|
52: | }
|
53: |
|
54: | $rawStats = array();
|
55: | $rawStats['']['month'] = 0;
|
56: | $rawStats['']['week'] = 0;
|
57: | $rawStats['']['day'] = 0;
|
58: | $rawStats['']['hour'] = 0;
|
59: | while (false !== ($row = $xoopsDB->fetchArray($result))) {
|
60: | $rawStats[$row['type']][$row['age']] = $row['count'];
|
61: | }
|
62: | $ages = array('month', 'week', 'day', 'hour');
|
63: | $stats = array();
|
64: | foreach ($rawStats as $type => $hits) {
|
65: | $stats[$type] = array();
|
66: | }
|
67: | ksort($stats);
|
68: | $keys = array_keys($stats);
|
69: | foreach ($keys as $type) {
|
70: | $count = array();
|
71: | foreach ($ages as $age) {
|
72: | $count[] = isset($rawStats[$type][$age]) ? (int)$rawStats[$type][$age] : 0;
|
73: | }
|
74: | $stats[$type] = $count;
|
75: | }
|
76: |
|
77: | $height = (count($keys) + 1) * 24;
|
78: |
|
79: |
|
80: |
|
81: | $script = "new Chartist.Bar('.ct-chart', {\n";
|
82: | $script .= ' labels: ' . dumpArray(array_keys($stats)) . ",\n";
|
83: | $script .= ' series: ';
|
84: | $allSets = array();
|
85: | for ($i=0; $i<4; ++$i) {
|
86: | $newSet = array();
|
87: | foreach ($stats as $set) {
|
88: | $newSet[] = $set[$i] - (($i<3) ? $set[$i+1] : 0);
|
89: | }
|
90: | $allSets[] = dumpArray($newSet);
|
91: | }
|
92: | $series = dumpArray(array_reverse($allSets), '') . "\n";
|
93: | $script .= $series;
|
94: |
|
95: |
|
96: | $script .= <<<EOS
|
97: | }, {
|
98: | seriesBarDistance: 10,
|
99: | reverseData: true,
|
100: | horizontalBars: true,
|
101: | stackBars: true,
|
102: | height: $height,
|
103: | axisY: {
|
104: | offset: 120
|
105: | },
|
106: | axisX: {
|
107: | position: 'start',
|
108: | labelInterpolationFnc: function(value, index) {
|
109: | return Math.round(value);
|
110: | }
|
111: | }
|
112: | });
|
113: | EOS;
|
114: |
|
115: | $GLOBALS['xoTheme']->addStylesheet('modules/protector/assets/css/chartist.min.css');
|
116: | $GLOBALS['xoTheme']->addScript('modules/protector/assets/js/chartist.min.js');
|
117: | $GLOBALS['xoTheme']->addScript('', array(), $script);
|
118: | $styles =<<<EOSS
|
119: | .ct-series-a .ct-bar { stroke: grey; }
|
120: | .ct-series-b .ct-bar { stroke: orange; }
|
121: | .ct-series-c .ct-bar { stroke: yellow; }
|
122: | .ct-series-d .ct-bar { stroke: red; }
|
123: | .colorkeys {
|
124: | display: inline;
|
125: | width: 20px;
|
126: | height: 20px;
|
127: | margin: 5px;
|
128: | border: 1px solid rgba(0, 0, 0, .2);
|
129: | }
|
130: |
|
131: | .color-series-a { background: grey; }
|
132: | .color-series-b { background: orange; }
|
133: | .color-series-c { background: yellow; }
|
134: | .color-series-d { background: red; }
|
135: | EOSS;
|
136: | $GLOBALS['xoTheme']->addStylesheet('', array(), $styles);
|
137: |
|
138: |
|
139: | $moduleAdmin = \Xmf\Module\Admin::getInstance();
|
140: |
|
141: | $moduleAdmin->displayNavigation(basename(__FILE__));
|
142: |
|
143: | echo '<h3>' . _AM_ADMINSTATS_TITLE . '</h3>';
|
144: | echo '<div class="ct-chart xct-minor-seventh"></div>';
|
145: | echo '<script>'. $script .'</script>';
|
146: |
|
147: | echo '<div class="right">'
|
148: | . '<div class="colorkeys color-series-a"> </div><span>' . _AM_ADMINSTATS_LAST_MONTH . ' </span>'
|
149: | . '<div class="colorkeys color-series-b"> </div><span>' . _AM_ADMINSTATS_LAST_WEEK . ' </span>'
|
150: | . '<div class="colorkeys color-series-c"> </div><span>' . _AM_ADMINSTATS_LAST_DAY . ' </span>'
|
151: | . '<div class="colorkeys color-series-d"> </div><span>' . _AM_ADMINSTATS_LAST_HOUR . '</span>'
|
152: | . '</div>';
|
153: |
|
154: | |
155: | |
156: | |
157: | |
158: | |
159: | |
160: | |
161: | |
162: | |
163: | |
164: | |
165: | |
166: | |
167: | |
168: | |
169: | |
170: | |
171: |
|
172: | xoops_cp_footer();
|
173: |
|
174: | |
175: | |
176: | |
177: | |
178: | |
179: | |
180: | |
181: | |
182: |
|
183: | |