]> jfr.im git - irc/unrealircd/unrealircd-webpanel.git/blame - index.php
Channels: possibly fix a bug when clicking on a channel (loading wrong URL).
[irc/unrealircd/unrealircd-webpanel.git] / index.php
CommitLineData
709b97f3 1<?php
c06c1713 2require_once "inc/common.php";
41aad10c 3if (!isset($config['unrealircd']))
d8ad4cea 4{
1a6051db 5 $redirect = get_config("base_url")."settings/rpc-servers.php";
d8ad4cea
BM
6 header('Location: ' . $redirect);
7 die;
8}
9
c06c1713 10require_once "inc/header.php";
26971737 11
709b97f3 12?>
3737447f 13<div class="row ml-0">
c0abb0e6
BM
14 <h2>Network Overview</h2>
15 <div id="live_stats" data-toggle="tooltip" data-placement="top" title="The stats on this page are updated in real-time"
16 class="card text-center row font-weight-bold"
17 style="margin-left:5%;height:26px;width:60px;background-color:red;color:white;visibility:hidden">
18 <small style="margin-left:-40px;padding-top:3px;margin-right:-45px">⚪</small>LIVE
19 </div>
3737447f 20</div>
bdf7619a 21<?php
9a4a88b5 22$array_of_stats = [];
bdf7619a
VP
23
24/* What if someone wants to add their own stats... */
25Hook::run(HOOKTYPE_PRE_OVERVIEW_CARD, $array_of_stats);
26
27/* This makes sure that a plugin which called the parameter
28 * by reference can add/update the stats for display here.
29*/
30$stats = (object) $array_of_stats;
31
4fc503d8
VP
32$userlist = [];
33Hook::run(HOOKTYPE_GET_USER_LIST, $userlist);
34$num_of_panel_admins = count($userlist);
bdf7619a
VP
35
36?>
e76c47e1
VP
37<style>
38 .card {
39 min-height: 100%;
40 }
41 </style>
711c63bc 42<div class="container card-container" style="margin-left:40px;margin-top:30px">
440ff671 43
9e2a2ac0 44 <div class="row mt-3">
33f512fa 45 <div class="col-sm mb-3">
ce8122f0
VP
46 <div class="card text-center">
47 <div class="card-header bg-success text-white">
48 <div class="row">
49 <div class="col">
79ed2176 50 <i class="fa fa-users fa-3x"></i><span class="position-absolute badge rounded-pill badge-warning">
9a4a88b5 51 <?php echo "Record: "; ?>
79ed2176 52 </span>
ce8122f0
VP
53 </div>
54 <div class="col">
9a4a88b5 55 <h3 id="stats_user_total" class="display-4"></h3>
ce8122f0
VP
56 </div>
57 </div>
58 </div>
75c101fd
VP
59 <div class="card-body">
60 <div class="row">
61 <div class="col">
62 <h6>Users Online</h6>
63 </div>
ea90b321 64 <div class="col"> <a class="btn btn-primary" href="<?php echo get_config("base_url"); ?>users">View</a></div>
75c101fd
VP
65 </div>
66 </div>
ce8122f0 67 </div>
79ed2176
VP
68
69
ce8122f0 70 </div>
33f512fa 71 <div class="col-sm mb-3">
ce8122f0
VP
72 <div class="card text-center">
73 <div class="card-header bg-primary text-white">
74 <div class="row">
75 <div class="col">
76 <i class="fa fa-hashtag fa-3x"></i>
77 </div>
78 <div class="col">
9a4a88b5 79 <h3 id="stats_channel_total" class="display-4"></h3>
75c101fd
VP
80 </div>
81 </div>
82 </div>
83 <div class="card-body">
84 <div class="row">
85 <div class="col">
ce8122f0
VP
86 <h6>Channels</h6>
87 </div>
ea90b321 88 <div class="col"><a class="btn btn-primary" href="<?php echo get_config("base_url"); ?>channels">View</a></div>
ce8122f0
VP
89 </div>
90 </div>
91 </div>
92 </div>
33f512fa 93 <div class="col-sm mb-3">
ce8122f0
VP
94 <div class="card text-center">
95 <div class="card-header bg-warning">
96 <div class="row">
97 <div class="col">
98 <i class="fa fa-shield-halved fa-3x"></i>
99 </div>
100 <div class="col">
9a4a88b5 101 <h3 id="stats_oper_total" class="display-4"></h3>
75c101fd
VP
102 </div>
103 </div>
104 </div>
105 <div class="card-body">
106 <div class="row">
107 <div class="col">
ce8122f0
VP
108 <h6>Opers</h6>
109 </div>
ea90b321 110 <div class="col"><a class="btn btn-primary" href="<?php echo get_config("base_url")."users/?operonly"; ?>">View</a></div>
ce8122f0
VP
111 </div>
112 </div>
113 </div>
114 </div>
75c101fd 115
33f512fa 116 <div class="col-sm mb-3">
ce8122f0 117 <div class="card text-center">
28d5eb87 118 <div class="card-header bg-secondary text-white">
ce8122f0
VP
119 <div class="row">
120 <div class="col">
121 <i class="fa fa-network-wired fa-3x"></i>
122 </div>
123 <div class="col">
9a4a88b5 124 <h3 id="stats_server_total" class="display-4"></h3>
75c101fd
VP
125 </div>
126 </div>
127 </div>
128 <div class="card-body">
129 <div class="row">
130 <div class="col">
ce8122f0
VP
131 <h6>Servers</h6>
132 </div>
ea90b321 133 <div class="col"> <a class="btn btn-primary" href="<?php echo get_config("base_url"); ?>servers">View</a></div>
ce8122f0
VP
134 </div>
135 </div>
136 </div>
137 </div>
138 </div>
139</div>
711c63bc 140<div class="container card-container" style="margin-left:40px;margin-top:30px">
ce8122f0
VP
141
142 <div class="row">
33f512fa 143 <div class="col-sm mb-3">
ce8122f0
VP
144 <div class="card text-center">
145 <div class="card-header bg-danger text-white">
146 <div class="row">
147 <div class="col">
148 <i class="fa fa-ban fa-3x"></i>
149 </div>
150 <div class="col">
9a4a88b5 151 <h3 id="num_server_bans" class="display-4"></h3>
75c101fd
VP
152 </div>
153 </div>
154 </div>
155 <div class="card-body">
156 <div class="row">
157 <div class="col">
ce8122f0
VP
158 <h6>Server Bans</h6>
159 </div>
ea90b321 160 <div class="col"> <a class="btn btn-primary" href="<?php echo get_config("base_url"); ?>server-bans">View</a></div>
ce8122f0
VP
161 </div>
162 </div>
163 </div>
164 </div>
33f512fa 165 <div class="col-sm mb-3">
ce8122f0
VP
166 <div class="card text-center">
167 <div class="card-header bg-secondary text-white">
168 <div class="row">
169 <div class="col">
170 <i class="fa fa-filter fa-3x"></i>
171 </div>
172 <div class="col">
9a4a88b5 173 <h3 id="num_spamfilter_entries" class="display-4"></h3>
ce8122f0
VP
174 </div>
175 </div>
176 </div>
75c101fd
VP
177 <div class="card-body">
178 <div class="row">
179 <div class="col">
180 <h6>Spamfilter</h6>
181 </div>
ea90b321 182 <div class="col"> <a class="btn btn-primary" href="<?php echo get_config("base_url"); ?>spamfilter.php">View</a></div>
75c101fd
VP
183 </div>
184 </div>
ce8122f0
VP
185 </div>
186 </div>
33f512fa 187 <div class="col-sm mb-3">
ce8122f0
VP
188 <div class="card text-center">
189 <div class="card-header bg-primary text-white">
190 <div class="row">
191 <div class="col">
192 <i class="fa fa-door-open fa-3x"></i>
193 </div>
194 <div class="col">
9a4a88b5 195 <h3 id="num_ban_exceptions" class="display-4"></h3>
ce8122f0
VP
196 </div>
197 </div>
198 </div>
75c101fd
VP
199
200 <div class="card-body">
201 <div class="row">
202 <div class="col">
203 <h6>Server Ban Exceptions</h6>
204 </div>
ea90b321 205 <div class="col"> <a class="btn btn-primary" href="<?php echo get_config("base_url"); ?>server-bans/ban-exceptions.php">View</a></div>
75c101fd
VP
206 </div>
207 </div>
ce8122f0
VP
208 </div>
209 </div>
210 <?php
9a4a88b5 211 $bg = "bg-success"; // FIXME: this isn't dynamic
79ed2176 212 ?>
33f512fa 213 <div class="col-sm mb-3">
ce8122f0
VP
214 <div class="card text-center">
215 <div class="card-header <?php echo $bg; ?> text-white">
216 <div class="row">
217 <div class="col">
218 <i class="fa fa-database fa-3x"> </i>
219 </div>
220 <div class="col">
9a4a88b5
BM
221 <span data-toggle="tooltip" title="" style="border-bottom: 1px dotted #000000">
222 <h3 id="stats_uline_total" class="display-4"></h3>
75c101fd
VP
223 </div>
224 </div>
225 </div>
226 <div class="card-body">
227 <div class="row">
228 <div class="col">
ce8122f0
VP
229 <h6>Services Online</h6>
230 </div>
ea90b321 231 <div class="col"> <a class="btn btn-primary" href="<?php echo get_config("base_url")."users/?servicesonly"; ?>">View</a></div>
ce8122f0
VP
232 </div>
233 </div>
234
235 </div>
236 </div>
237 </div>
809f7483 238</div>
56164221
VP
239
240
241<script>
c0abb0e6
BM
242 /* Last time stats were updated */
243 let stats_tick = 0;
244
fd4848e4
BM
245 function updateStats(e)
246 {
247 var data;
248 try {
249 data = JSON.parse(e.data);
250 } catch(e) {
251 return;
252 }
c0abb0e6
BM
253 stats_tick = Date.now()
254 document.getElementById("live_stats").style.visibility = '';
fd4848e4
BM
255 document.getElementById("stats_user_total").innerHTML = data.user.total;
256 document.getElementById("stats_channel_total").innerHTML = data.channel.total;
257 document.getElementById("stats_oper_total").innerHTML = data.user.oper;
258 document.getElementById("stats_server_total").innerHTML = data.server.total;
259 document.getElementById("num_server_bans").innerHTML = data.server_ban.server_ban;
260 document.getElementById("num_spamfilter_entries").innerHTML = data.server_ban.spamfilter;
261 document.getElementById("num_ban_exceptions").innerHTML = data.server_ban.server_ban_exception;
262 document.getElementById("stats_uline_total").innerHTML = data.user.ulined + "/" + data.server.ulined;
263 }
c0abb0e6
BM
264 function checkStatsOutdated()
265 {
266 setTimeout(checkStatsOutdated, 2000);
267 if (Date.now() - stats_tick > 10000)
268 document.getElementById("live_stats").style.visibility = 'hidden';
269 }
270 setTimeout(checkStatsOutdated, 2000);
271
fd4848e4
BM
272 function initStats()
273 {
274 if (!!window.EventSource) {
275 var source = new EventSource('api/overview.php');
276 source.addEventListener('message', updateStats, false);
277 }
278 }
279 initStats();
280 //setInterval(updateStats, 1000); // Update stats every second
281 // ^ commented out but may want to restart initStats() when connection is lost.
711c63bc
VP
282
283
284 window.addEventListener('resize', function() {
285 var containers = document.querySelectorAll('.card-container');
286 var width = window.innerWidth;
287 if (width < 768)
288 {
289 containers.forEach((container) => {
290 container.removeAttribute('style');
291
292 });
293 } else
294 {
295 containers.forEach((container) => {
296 container.style.marginLeft = "40px";
297 container.style.marginTop = "30px";
298
299 });
300 }
301 });
56164221
VP
302</script>
303
711c63bc 304<div class="container card-container card-container" style="margin-left:40px;margin-top:10px">
fdc0088f
VP
305
306 <div class="row">
307 <div class="col-sm-3">
308 <div class="card text-center">
309 <div class="card-header bg-success text-white">
310 <div class="row">
311 <div class="col">
312 <i class="fa fa-lock-open fa-3x"></i>
313 </div>
314 <div class="col">
315 <h3 class="display-4"><?php echo $num_of_panel_admins; ?></h3>
316 </div>
317 </div>
318 </div>
319 <div class="card-body">
320 <div class="row">
321 <div class="col">
6210ec48 322 <h6>Panel Accounts</h6>
fdc0088f 323 </div>
ea90b321 324 <div class="col"> <a class="btn btn-primary" href="<?php echo get_config("base_url"); ?>settings">View</a></div>
fdc0088f
VP
325 </div>
326 </div>
327 </div>
328 </div>
329 </div>
330 </div>
809f7483
VP
331<?php
332
440ff671
VP
333Hook::run(HOOKTYPE_OVERVIEW_CARD, $stats);
334
c06c1713 335require_once "inc/footer.php";