aboutsummaryrefslogtreecommitdiff
path: root/lib/MasterWebInterface/Database/Servers.pm
diff options
context:
space:
mode:
authorDarkelarious <darkelarious@333networks.com>2021-09-05 20:35:44 +0200
committerDarkelarious <darkelarious@333networks.com>2021-09-05 20:35:44 +0200
commit3470e2605595bf52b3ba07bf0b3886e5a61d3e06 (patch)
tree36e7fcf008183b464aca47b7eeba0953dd36feef /lib/MasterWebInterface/Database/Servers.pm
downloadWebInterface-Perl-3470e2605595bf52b3ba07bf0b3886e5a61d3e06.tar.gz
WebInterface-Perl-3470e2605595bf52b3ba07bf0b3886e5a61d3e06.zip
first version of masterinterface
Diffstat (limited to 'lib/MasterWebInterface/Database/Servers.pm')
-rwxr-xr-xlib/MasterWebInterface/Database/Servers.pm61
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/MasterWebInterface/Database/Servers.pm b/lib/MasterWebInterface/Database/Servers.pm
new file mode 100755
index 0000000..d02bcd7
--- /dev/null
+++ b/lib/MasterWebInterface/Database/Servers.pm
@@ -0,0 +1,61 @@
+package MasterWebInterface::Database::Servers;
+use strict;
+use warnings;
+use Exporter 'import';
+our @EXPORT = qw| dbServerListGet |;
+
+################################################################################
+## get the serverlist
+################################################################################
+sub dbServerListGet {
+ my $s = shift;
+ my %o = ( page => 1,
+ results => 50,
+ gamename => "all",
+ @_
+ );
+
+ my %where = (
+ # gamename and char are "all" or value
+ $o{gamename} !~ /all/ ? ('serverlist.gamename = ?' => $o{gamename}) : (),
+ $o{nolist} ? ('serverlist.gamename <> ?' => $o{nolist}) : (),
+ $o{search} ? ('LOWER(hostname) LIKE LOWER(?)' => "%$o{search}%") : (),
+ $o{gametype} ? ('LOWER(gametype) LIKE LOWER(?)' => $o{gametype}) : (),
+ $o{updated} ? ('dt_updated > ?' => (time-$o{updated})) : (),
+ ('hostport >= ?' => 0), # sanity check
+ );
+
+ my @select = ( qw| id ip hostport hostname serverlist.gamename country numplayers maxplayers maptitle mapname gametype dt_added label dt_updated| );
+
+ my $order = sprintf {
+ hostname => 'hostname %s',
+ gamename => 'serverlist.gamename %s, gametype',
+ country => 'country %s',
+ dt_added => 'dt_added %s',
+ gametype => 'gametype %s, mapname',
+ numplayers => 'numplayers %s, maxplayers',
+ maptitle => 'maptitle %s',
+ mapname => 'mapname %s',
+ }->{ $o{sort} // 'dt_added' }, $o{reverse} ? 'DESC' : 'ASC';
+
+ my($r, $np) = $s->dbPage(\%o, q|
+ SELECT !s FROM serverlist
+ LEFT JOIN serverinfo ON serverlist.id = serverinfo.sid
+ LEFT JOIN gameinfo ON serverlist.gamename = gameinfo.gamename
+ !W
+ ORDER BY !s |,
+ join(', ', @select), \%where, $order
+ );
+
+ my $p = $s->dbAll( q|
+ SELECT COUNT(*) AS num
+ FROM serverlist
+ LEFT JOIN serverinfo ON serverlist.id = serverinfo.sid
+ !W|, \%where,
+ )->[0]{num};
+ return wantarray ? ($r, $np, $p) : $r;
+
+}
+
+
+1;