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