-
-
Notifications
You must be signed in to change notification settings - Fork 313
/
ServerStatusWidget.php
87 lines (74 loc) · 3.23 KB
/
ServerStatusWidget.php
1
2
3
4
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php
/*
* Made by Aberdeener
* https://github.com/NamelessMC/Nameless/
* NamelessMC version 2.0.0-pr9
*
* License: MIT
*
* Profile Posts Widget
*/
class ServerStatusWidget extends WidgetBase {
private Cache $_cache;
private Language $_language;
public function __construct(Smarty $smarty, Language $language, Cache $cache) {
$this->_module = 'Core';
$this->_name = 'Server Status';
$this->_description = 'Display your Minecraft server status.';
$this->_smarty = $smarty;
$this->_language = $language;
$this->_cache = $cache;
}
public function initialise(): void {
// Generate HTML code for widget
$this->_cache->setCache('server_status_widget');
$server_array = [];
if ($this->_cache->isCached('server_status')) {
$server_array = $this->_cache->retrieve('server_status');
} else {
$server = DB::getInstance()->query('SELECT * FROM nl2_mc_servers WHERE is_default = 1');
if ($server->count()) {
$server = $server->first();
$server_array_request = HttpClient::get(rtrim(URL::getSelfURL(), '/') . URL::build('/queries/server/', 'id=' . $server->id));
if (!$server_array_request->hasError()) {
$server_array = $server_array_request->json(true);
foreach ($server_array as $key => $value) {
// we have to NOT escape the player list or the formatted player list. luckily these are the only arrays
if (is_array($value)) {
$server_array[$key] = $value;
} else {
$server_array[$key] = Output::getClean($value);
}
}
} else {
$server_array = [
'status_value' => 0,
'status' => $this->_language->get('general', 'offline'),
'server_offline' => $this->_language->get('general', 'server_offline'),
];
}
$server_array['name'] = Output::getClean($server->name);
$server_array['join_at'] = Output::getClean($server->ip);
$this->_cache->store('server_status', $server_array, 120);
}
}
if (count($server_array) >= 1) {
$this->_smarty->assign(
[
'SERVER' => $server_array,
'ONLINE' => $this->_language->get('general', 'online'),
'OFFLINE' => $this->_language->get('general', 'offline'),
'IP' => $this->_language->get('general', 'ip'),
'VERSION' => isset($server_array['version']) ? $this->_language->get('general', 'version', ['version' => $server_array['version']]) : null
]
);
}
$this->_smarty->assign(
[
'SERVER_STATUS' => $this->_language->get('general', 'server_status'),
'NO_SERVERS' => $this->_language->get('general', 'no_default_server')
]
);
$this->_content = $this->_smarty->fetch('widgets/server_status.tpl');
}
}