diff options
| author | Darkelarious <darkelarious@333networks.com> | 2022-08-26 13:26:33 +0200 |
|---|---|---|
| committer | Darkelarious <darkelarious@333networks.com> | 2022-08-26 13:26:33 +0200 |
| commit | 8ec88b566c5f3edc65f25adc0716c3493689cd08 (patch) | |
| tree | dbbde9a694f6b4052ec39a45f0010955c668da3c /lib/MasterWebInterface/Handler | |
| parent | c5f43733533fe9b5708bd065a12c5fac86ccebed (diff) | |
| download | WebInterface-Perl-8ec88b566c5f3edc65f25adc0716c3493689cd08.tar.gz WebInterface-Perl-8ec88b566c5f3edc65f25adc0716c3493689cd08.zip | |
advanced filtering
Diffstat (limited to 'lib/MasterWebInterface/Handler')
| -rwxr-xr-x | lib/MasterWebInterface/Handler/ErrorPages.pm | 6 | ||||
| -rwxr-xr-x | lib/MasterWebInterface/Handler/Games.pm | 9 | ||||
| -rwxr-xr-x | lib/MasterWebInterface/Handler/ServInfo.pm | 15 | ||||
| -rwxr-xr-x | lib/MasterWebInterface/Handler/Servers.pm | 91 |
4 files changed, 78 insertions, 43 deletions
diff --git a/lib/MasterWebInterface/Handler/ErrorPages.pm b/lib/MasterWebInterface/Handler/ErrorPages.pm index ccf5555..1678acc 100755 --- a/lib/MasterWebInterface/Handler/ErrorPages.pm +++ b/lib/MasterWebInterface/Handler/ErrorPages.pm @@ -9,7 +9,7 @@ TUWF::set( ); TUWF::register( - qr{500} => sub {die "Process died on purpose, but with a lot of text to test if the whole error is correctly displayed on the screen when debug information is enabled in the website configuration, "}, + qr{500} => sub {die "Process died on purpose, but with a lot of text to test if the whole error is correctly displayed on the screen when debug information is enabled in the website configuration. "}, ); # @@ -32,7 +32,7 @@ sub handle404 $self->resStatus(404); $self->htmlHeader(title => '404 - Not Found'); - $self->htmlSearchBox(title => "Servers", action => "/s", sel => 's', fq => ''); + $self->htmlFilterBox(title => "Servers", action => "/s", sel => 's', fq => ''); div class => "mainbox warning"; div class => "header"; @@ -72,7 +72,7 @@ sub handle500 $self->resStatus(500); $self->htmlHeader(title => '500 - Internal Server Error'); - $self->htmlSearchBox(title => "Servers", action => "/s", sel => 's', fq => ''); + $self->htmlFilterBox(title => "Servers", action => "/s", sel => 's', fq => ''); div class => "mainbox warning"; div class => "header"; diff --git a/lib/MasterWebInterface/Handler/Games.pm b/lib/MasterWebInterface/Handler/Games.pm index affebf6..cec7ab1 100755 --- a/lib/MasterWebInterface/Handler/Games.pm +++ b/lib/MasterWebInterface/Handler/Games.pm @@ -6,8 +6,8 @@ use TUWF ':html'; use Exporter 'import'; TUWF::register( - qr{g} => \&gamelist, - qr{g(|/all)} => \&gamelist, + qr{g} => \&gamelist, + qr{g/all} => \&gamelist, ); # @@ -35,11 +35,10 @@ sub gamelist search => $f->{q}, results => $f->{r}, all => $all, - ); $self->htmlHeader(title => "Browse Games"); - $self->htmlSearchBox(title => "Games", action => "/g/all", sel => 'g', fq => $f->{q}); + $self->htmlFilterBox(title => "Games", action => "/g/all", sel => 'g', fq => $f->{q}); # # game list @@ -100,7 +99,7 @@ sub gamelist # number of beacons / servers td title => ($l->{num_direct} // 0) . " / " . ($l->{num_total} // 0), - $l->{num_direct} // 0; + $l->{num_total} // 0; end; }, ); diff --git a/lib/MasterWebInterface/Handler/ServInfo.pm b/lib/MasterWebInterface/Handler/ServInfo.pm index fbe5d35..8b3d7d8 100755 --- a/lib/MasterWebInterface/Handler/ServInfo.pm +++ b/lib/MasterWebInterface/Handler/ServInfo.pm @@ -45,8 +45,12 @@ sub show_server # otherwise not found in database, soft error page (no 404 status) $self->htmlHeader(title => 'Server not found'); - $self->htmlSearchBox(title => "Servers", action => "/s", sel => 's', fq => ''); - + $self->htmlFilterBox( + sel => 's', + fq => '', + ($gamename ? (gamename => $gamename) : () ), + ); + div class => "mainbox warning"; div class => "header"; h1 'Server not found'; @@ -83,11 +87,10 @@ sub show_server # # generate info page $self->htmlHeader(title => $info->{hostname} // "Server"); - $self->htmlSearchBox( - title => "$gamedescription Servers", - action => "/s/$gamename", + $self->htmlFilterBox( + gamename => $gamename, sel => 's', - fq => '' + fq => '', ); # serverinfo box diff --git a/lib/MasterWebInterface/Handler/Servers.pm b/lib/MasterWebInterface/Handler/Servers.pm index 98d27df..34c0182 100755 --- a/lib/MasterWebInterface/Handler/Servers.pm +++ b/lib/MasterWebInterface/Handler/Servers.pm @@ -5,9 +5,9 @@ use TUWF ':html'; use Exporter 'import'; TUWF::register( - qr{} => \&serverlist, - qr{s} => \&serverlist, - qr{s/([\w]{1,20})} => \&serverlist, + qr{} => \&serverlist, + qr{(s|adv)} => \&serverlist, + qr{(s|adv)/([\w]{0,20})} => \&serverlist, ); # @@ -15,60 +15,91 @@ TUWF::register( # sub serverlist { - my($self, $gamename) = @_; - $gamename = "all" unless $gamename; + my($self, $adv, $gamename) = @_; # sorting, page my $f = $self->formValidate( { get => 's', required => 0, default => 'gamename',enum => [ qw| hostname gamename country dt_added gametype numplayers mapname | ] }, { get => 'o', required => 0, default => 'a',enum => [ 'a','d' ] }, { get => 'p', required => 0, default => 1, template => 'page',}, - { get => 'r', required => 0, default => 50, template => 'page' }, { get => 'q', required => 0, default => '', maxlength => 90 }, - { get => 'g', required => 0, default => '', maxlength => 90 }, + + # advanced search + { get => 'gamename', required => 0, default => '', maxlength => 90 }, # gamename in advanced search + { get => 'gametype', required => 0, default => '', maxlength => 90 }, # gametype + { get => 'hostname', required => 0, default => '', maxlength => 90 }, # hostname (replaces q in advanced search) + { get => 'mapname', required => 0, default => '', maxlength => 90 }, # mapname + { get => 'country', required => 0, default => '', maxlength => 90 }, # country (code) ); return $self->resNotFound if $f->{_err}; - # load server list from database + # set correct gamename (form always overwrites url) + $gamename = ( $f->{gamename} ? $f->{gamename} : $gamename); + + # load server list from database FIXME order of list, duplicates my ( $list, $np, $p ) = $self->dbServerListGet( sort => $f->{s}, reverse => $f->{o} eq 'd', - gamename => $gamename, search => $f->{q}, page => $f->{p}, + results => 50, updated => $self->{window_time}, - results => $f->{r}, - gametype => $f->{g}, - # don't show 333networks in default list - $gamename ne "333networks" ? ( nolist => "333networks") : (), + gamename => $gamename, + gametype => $f->{gametype}, + hostname => $f->{hostname}, + mapname => $f->{mapname}, + country => $f->{country}, + + # don't show 333networks in default list, but show in advanced search by default + !($gamename eq "333networks" or $f->{gamename} eq "333networks") ? ( nolist => "333networks") : (), ); - # game name description in title - my $gn_desc = $self->dbGetGameDesc($gamename) // $gamename; - # Write page - $self->htmlHeader(title => "Browse $gn_desc game servers"); - $self->htmlSearchBox( - title => "$gn_desc Servers", - action => "/s/$gamename", - sel => 's', - fq => $f->{q} - ); - + $self->htmlHeader(title => "Servers"); + + # search box type: simple or advanced + if ($adv eq 'adv') + { + # advanced filter box with additional search fields + $self->htmlAdvancedFilterBox( + sel => 's', + %{$f}, # previous parameters + gamename => $gamename, + ); + } + else # $adv eq "adv" + { + # simple search box + $self->htmlFilterBox( + sel => 's', + ($gamename ? (gamename => $gamename) : () ), + action => "/s/$gamename", + fq => $f->{q}, + ); + } + + # construct page URLs + my $pageurl = "/$adv/$gamename?" + . ( $adv eq "adv" ? "gamename=$f->{gamename}&gametype=$f->{gametype}&hostname=$f->{hostname}&mapname=$f->{mapname}&country=$f->{country}&o=$f->{o};s=$f->{s}" : "") + . ( $adv eq "s" ? "o=$f->{o};s=$f->{s};q=$f->{q}" : ""); + my $sorturl = "/$adv/$gamename?" + . ( $adv eq "adv" ? "gamename=$f->{gamename}&gametype=$f->{gametype}&hostname=$f->{hostname}&mapname=$f->{mapname}&country=$f->{country}" : "") + . ( $adv eq "s" ? "q=$f->{q}" : ""); + # # server list $self->htmlBrowse( items => $list, options => $f, total => $p, - nextpage => [$p,$f->{r}], - pageurl => "/s/$gamename?o=$f->{o};s=$f->{s};q=$f->{q}", - sorturl => "/s/$gamename?q=$f->{q}", + nextpage => [$p,50], + pageurl => $pageurl, #"/$adv/$gamename?o=$f->{o};s=$f->{s};q=$f->{q}", + sorturl => $sorturl, #"/$adv/$gamename?q=$f->{q}", class => "serverlist", ($p <= 0) ? (footer => sub { Tr; - td colspan => 6, class => 'tc2', 'No online servers found'; + td colspan => 6, class => 'tc2', 'No online servers found.'; end 'tr'; }) : (), header => [ @@ -86,6 +117,7 @@ sub serverlist Tr $n % 2 ? (class => 's odd') : (class => 's'); # country flag + # TODO: advanced filter by country only my ($flag, $country) = $self->countryflag($l->{country}); td class => "tc1", style => "background-image: url(/flag/$flag.svg);", @@ -108,7 +140,7 @@ sub serverlist td class => "tc3 icon", style => "background-image: url(/icon32/$gn.png);", title => $l->{label}; - a href => "/s/$gn", ""; + a href => "/$adv/$gn", ""; end; } else @@ -117,6 +149,7 @@ sub serverlist } # game type (hover: raw, display: parsed) + # TODO: advanced filter by gametype only td class => "tc4", title => $l->{gametype}, $self->better_gametype($l->{gametype}); |
