diff options
Diffstat (limited to 'lib/MasterWebInterface/Database')
| -rwxr-xr-x | lib/MasterWebInterface/Database/AdvancedSearch.pm | 51 | ||||
| -rwxr-xr-x | lib/MasterWebInterface/Database/Servers.pm | 20 |
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) : (), |
