Skip to content

Commit c9cecb1

Browse files
committed
Module/Online: Rewrite and optimize load online characters
* now use data table * have pagination * split realm characters * better performance * the cache is cleaner * now have loading before load data
1 parent 1fb2757 commit c9cecb1

File tree

12 files changed

+176
-224
lines changed

12 files changed

+176
-224
lines changed

application/modules/online/controllers/Online.php

Lines changed: 60 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,39 +8,77 @@ public function __construct()
88
{
99
parent::__construct();
1010

11-
requirePermission("view");
11+
requirePermission('view');
12+
$this->load->config('online');
1213
}
1314

1415
public function index()
1516
{
16-
$this->template->setTitle(lang("online_players", "online"));
17+
clientLang("no_players", "online");
18+
clientLang("offline", "online");
1719

18-
$cache = $this->cache->get("online_module");
20+
$this->template->setTitle(lang('online_players', 'online'));
21+
22+
$content_data = [
23+
'realms' => $this->realms->getRealms(),
24+
'url' => $this->template->page_url,
25+
];
26+
27+
$page_content = $this->template->loadPage('online.tpl', $content_data);
28+
29+
//Load the page
30+
$page_data = [
31+
'module' => 'default',
32+
'headline' => lang('online_players', 'online'),
33+
'content' => $page_content
34+
];
35+
36+
$page = $this->template->loadPage('page.tpl', $page_data);
37+
38+
$this->template->view($page, 'modules/online/css/online.css', 'modules/online/js/online.js');
39+
}
40+
41+
public function online_refresh($realm_id = 0)
42+
{
43+
$realm = $this->realms->getRealm($realm_id);
44+
45+
if (!$realm || !$realm->isOnline()) {
46+
echo json_encode(['status' => 'offline']);
47+
return;
48+
}
49+
50+
$cache = $this->cache->get('online_list_' . $realm_id);
1951

20-
// Perform ajax call to refresh if expired
2152
if ($cache !== false) {
22-
$page = $cache;
23-
} else {
24-
// Prepare data
25-
$data = [
26-
"module" => "online",
27-
"image_path" => $this->template->image_path
28-
];
53+
echo json_encode(['status' => 'ok', 'data' => $cache]);
54+
return;
55+
}
2956

30-
// Load the template file and format
31-
$ajax = $this->template->loadPage("ajax.tpl", $data);
57+
$hide_gms = $this->config->item('hide_gms');
58+
$players = $realm->getCharacters()->getOnlinePlayers($hide_gms);
3259

33-
// Load the topsite page and format the page contents
34-
$data2 = [
35-
"module" => "default",
36-
"headline" => lang("online_players", "online"),
37-
"content" => $ajax
38-
];
60+
if (empty($players)) {
61+
echo json_encode(['status' => 'empty', 'data' => []]);
62+
return;
63+
}
3964

40-
$page = $this->template->loadPage("page.tpl", $data2);
65+
$data = [];
66+
67+
foreach ($players as $character) {
68+
$data[] = [
69+
"guid" => $character['guid'],
70+
"name" => $character['name'],
71+
"level" => $character['level'],
72+
"race" => $character['race'],
73+
"gender" => $character['gender'],
74+
"class" => $character['class'],
75+
"zone" => $this->realms->getZone($character['zone'])
76+
];
4177
}
4278

43-
//Load the template form
44-
$this->template->view($page, "modules/online/css/online.css", "modules/online/js/sort.js");
79+
$this->cache->save('online_list_' . $realm_id, $data, 60 * 5);
80+
81+
echo json_encode(['status' => 'ok', 'data' => $data]);
4582
}
83+
4684
}

application/modules/online/controllers/Online_refresh.php

Lines changed: 0 additions & 44 deletions
This file was deleted.
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
let table;
2+
3+
function showSpinner() {
4+
$('#playersTableContainer').html(`
5+
<div class="text-center p-4">
6+
<i class="fas fa-spinner fa-spin fa-2x"></i>
7+
</div>
8+
`);
9+
}
10+
11+
function loadRealm(realmId) {
12+
if (!realmId) {
13+
$('#playersTableContainer').hide();
14+
return;
15+
}
16+
showSpinner();
17+
$('#playersTableContainer').show();
18+
19+
$.ajax({
20+
url: Config.URL + 'online/online_refresh/' + realmId,
21+
method: 'GET',
22+
dataType: 'json',
23+
success: function (response) {
24+
if (table) {
25+
table.clear().destroy();
26+
$('#playersTable').remove();
27+
}
28+
29+
if (response.status === "offline") {
30+
$('#playersTableContainer').html('<div class="alert alert-danger text-center">' + lang("offline", "online") + '</div>');
31+
return;
32+
}
33+
34+
if (response.status === "empty") {
35+
$('#playersTableContainer').html('<div class="alert alert-warning text-center">' + lang("no_players", "online") + '</div>');
36+
return;
37+
}
38+
39+
$('#playersTableContainer').html('<table id="playersTable" class="nice_table"></table>');
40+
41+
const tableData = response.data.map(char => {
42+
return [
43+
`<a href="${Config.URL}character/${realmId}/${char.guid}">${char.name}</a>`,
44+
char.level,
45+
`<img src="${Config.URL}application/images/stats/${char.race}-${char.gender}.gif">`,
46+
`<img src="${Config.URL}application/images/stats/${char.class}.gif">`,
47+
char.zone
48+
];
49+
});
50+
51+
table = $('#playersTable').DataTable({
52+
data: tableData,
53+
columns: [
54+
{ title: "Character" },
55+
{ title: "Level" },
56+
{ title: "Race" },
57+
{ title: "Class" },
58+
{ title: "Location" }
59+
],
60+
deferRender: true,
61+
paging: true,
62+
searching: true,
63+
processing: true
64+
});
65+
},
66+
error: function () {
67+
$('#playersTableContainer').html('<div class="alert alert-danger text-center">Error loading players</div>');
68+
}
69+
});
70+
}
71+
72+
$(document).ready(function () {
73+
$('#realmSelect').on('change', function () {
74+
loadRealm($(this).val());
75+
});
76+
77+
const firstRealmId = $('#realmSelect option:nth-child(1)').val();
78+
if (firstRealmId) {
79+
$('#realmSelect').val(firstRealmId).trigger('change');
80+
}
81+
});

application/modules/online/js/sort.js

Lines changed: 0 additions & 78 deletions
This file was deleted.

application/modules/online/language/english/online.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@
2121
$lang['offline'] = "Offline";
2222
$lang['view_profile'] = "View character profile";
2323
$lang['online_players'] = "Online players";
24+
$lang['realm'] = "Realm";

application/modules/online/language/france/online.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@
2121
$lang['offline'] = "Hors ligne";
2222
$lang['view_profile'] = "Voir le profil du personnage";
2323
$lang['online_players'] = "Joueurs en ligne";
24+
$lang['realm'] = "Royaume";

application/modules/online/language/persian/online.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@
2121
$lang['offline'] = "آفلاین";
2222
$lang['view_profile'] = "نمایش پروفایل شخصیت";
2323
$lang['online_players'] = "بازیکنان آنلاین";
24+
$lang['realm'] = "ریلم";

application/modules/online/language/portuguese-brazilian/online.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,4 @@
2525
$lang['offline'] = "Offline";
2626
$lang['view_profile'] = "Ver perfil do personagem";
2727
$lang['online_players'] = "Jogadores online";
28+
$lang['realm'] = "Reino";

application/modules/online/language/spanish/online.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@
2020
$lang['no_players'] = "No hay jugadores en línea";
2121
$lang['offline'] = "Desconectado";
2222
$lang['view_profile'] = "Ver perfil de personaje";
23-
$lang['online_players'] = "Jugadores en línea";
23+
$lang['online_players'] = "Jugadores en línea";
24+
$lang['realm'] = "Reino";

application/modules/online/manifest.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"name": "Online players",
33
"description": "Displays all online characters",
4-
"version": "2.0.0",
5-
"date": "2023-05-30",
4+
"version": "3.0.0",
5+
"date": "2025-05-22",
66
"author": {
77
"name": "FusionCMS",
88
"website": "https://github.com/FusionWowCMS/FusionCMS"

application/modules/online/views/ajax.tpl

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)