aboutsummaryrefslogtreecommitdiff
path: root/lib/MasterWebInterface/Database
diff options
context:
space:
mode:
Diffstat (limited to 'lib/MasterWebInterface/Database')
-rwxr-xr-xlib/MasterWebInterface/Database/AdvancedSearch.pm51
-rwxr-xr-xlib/MasterWebInterface/Database/Servers.pm20
2 files changed, 63 insertions, 8 deletions
diff --git a/lib/MasterWebInterface/Database/AdvancedSearch.pm b/lib/MasterWebInterface/Database/AdvancedSearch.pm
new file mode 100755
index 0000000..a21a3c3
--- /dev/null
+++ b/lib/MasterWebInterface/Database/AdvancedSearch.pm
@@ -0,0 +1,51 @@
+package MasterWebInterface::Database::AdvancedSearch;
+use strict;
+use warnings;
+use Exporter 'import';
+our @EXPORT = qw| dbGetGameTypes dbGetCountries |;
+
+sub dbGetGameTypes
+{
+ my $s = shift;
+ my %o = ( @_ );
+
+ my %where = (
+ # gamename and char are "all" or value
+ $o{gamename} ? ('serverlist.gamename = ?' => $o{gamename}) : (),
+ ('gametype IS NOT NULL' => ""),
+
+ # do not filter by country. the gametype can still exist for that game while there are no online servers for it.
+ #$o{country} ? ('country LIKE UPPER(?)' => $o{country}) : (),
+ );
+
+ return $s->dbAll( q|
+ SELECT DISTINCT gametype FROM serverlist
+ LEFT JOIN serverinfo ON serverlist.id = serverinfo.sid
+ !W ORDER BY lower(gametype) ASC|,
+ \%where,
+ );
+}
+
+sub dbGetCountries
+{
+ my $s = shift;
+ my %o = ( @_ );
+
+ my %where = (
+ $o{gamename} ? ('serverlist.gamename = ?' => $o{gamename}) : (),
+ $o{hostname} ? ('LOWER(hostname) LIKE LOWER(?)' => "%$o{hostname}%") : (),
+ $o{mapname} ? ('(LOWER(mapname) LIKE LOWER(?) OR LOWER(maptitle) LIKE LOWER(?))' => ["%$o{mapname}%", "%$o{mapname}%"]) : (),
+ $o{gametype} ? ('LOWER(gametype) LIKE LOWER(?)' => $o{gametype}) : (),
+
+ ("COUNTRY IS NOT NULL" => ""),
+ );
+
+ return $s->dbAll( q|
+ SELECT DISTINCT country FROM serverlist
+ LEFT JOIN serverinfo ON serverlist.id = serverinfo.sid
+ !W ORDER BY lower(country) ASC|,
+ \%where,
+ );
+}
+
+1;
diff --git a/lib/MasterWebInterface/Database/Servers.pm b/lib/MasterWebInterface/Database/Servers.pm
index 6c51494..99b4f1e 100755
--- a/lib/MasterWebInterface/Database/Servers.pm
+++ b/lib/MasterWebInterface/Database/Servers.pm
@@ -11,19 +11,23 @@ sub dbServerListGet {
my $s = shift;
my %o = ( page => 1,
results => 50,
- gamename => "all",
@_
);
my %where = (
# gamename and char are "all" or value
- $o{updated} ? ('dt_updated > ?' => (time-$o{updated})) : (),
- $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(?)' => lc $o{gametype}) : (),
- $o{popserv} ? ('numplayers > ?' => 0) : (),
- $o{utdemo} ? ('gamever = ?' => '348') : (),
+ $o{updated} ? ('dt_updated > ?' => (time-$o{updated})) : (),
+ $o{gamename} ? ('serverlist.gamename = ?' => $o{gamename}) : (),
+ $o{nolist} ? ('serverlist.gamename <> ?' => $o{nolist}) : (),
+ $o{search} ? ('LOWER(hostname) LIKE LOWER(?)' => "%$o{search}%") : (),
+ $o{popserv} ? ('numplayers > ?' => 0) : (),
+ $o{utdemo} ? ('gamever = ?' => '348') : (),
+
+ #advanced search
+ $o{hostname} ? ('LOWER(hostname) LIKE LOWER(?)' => "%$o{hostname}%") : (),
+ $o{gametype} ? ('LOWER(gametype) LIKE LOWER(?)' => $o{gametype}) : (),
+ $o{mapname} ? ('(LOWER(mapname) LIKE LOWER(?) OR LOWER(maptitle) LIKE LOWER(?))' => ["%$o{mapname}%", "%$o{mapname}%"]) : (),
+ $o{country} ? ('country LIKE UPPER(?)' => $o{country}) : (),
# sanity check for unresponsive servers or faulty queries tools, except ST:Bcommander which /is/ faulty by default
$o{gamename} !~ /bcommander/ ? ('hostport > ?' => 0) : (),