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