aboutsummaryrefslogtreecommitdiff
path: root/lib/MasterWebInterface/Handler/Games.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/MasterWebInterface/Handler/Games.pm')
-rwxr-xr-xlib/MasterWebInterface/Handler/Games.pm142
1 files changed, 142 insertions, 0 deletions
diff --git a/lib/MasterWebInterface/Handler/Games.pm b/lib/MasterWebInterface/Handler/Games.pm
new file mode 100755
index 0000000..bf50655
--- /dev/null
+++ b/lib/MasterWebInterface/Handler/Games.pm
@@ -0,0 +1,142 @@
+package MasterWebInterface::Handler::Games;
+
+use strict;
+use utf8;
+
+use TUWF ':html';
+use Exporter 'import';
+
+TUWF::register(
+ qr{g} => \&gamelist,
+ qr{g(|/all)} => \&gamelist,
+);
+
+################################################################################
+# LIST GAMES
+# Generate a list of games in the database (arg: gamename)
+################################################################################
+sub gamelist
+{
+ my ($self, $all) = @_;
+
+ # process additional query information, such as order, sorting, page, etc
+ my $f = $self->formValidate(
+ {
+ get => 's',
+ required => 0,
+ default => 'num_total',
+ enum => [ qw| label gamename num_total | ]
+ },
+ {
+ get => 'o',
+ required => 0,
+ default => 'd',
+ enum => [ 'a','d' ]
+ },
+ {
+ get => 'p',
+ required => 0,
+ default => 1,
+ template => 'page'
+ },
+ {
+ get => 'q',
+ required => 0,
+ default => '',
+ maxlength => 30
+ },
+ {
+ get => 'r',
+ required => 0,
+ default => 50,
+ template => 'page'
+ }
+ );
+ return $self->resNotFound if $f->{_err};
+
+ # load server list from database
+ my($list, $np, $p) = $self->dbGameListGet(
+ sort => $f->{s},
+ reverse => $f->{o} eq 'd',
+ page => $f->{p},
+ search => $f->{q},
+ results => $f->{r},
+ all => $all,
+
+ );
+
+ #
+ # page
+ #
+
+ $self->htmlHeader(title => "Browse Games");
+ $self->htmlSearchBox(title => "Games", action => "/g/all", sel => 'g', fq => $f->{q});
+
+ #
+ # game list
+ #
+
+ # table url (full table or only active servers?)
+ my $url = ($all) ? "/g/all" : "/g";
+ $self->htmlBrowse(
+ items => $list,
+ options => $f,
+ total => $p,
+ nextpage => [$p,$f->{r}],
+ pageurl => "$url?o=$f->{o};s=$f->{s};q=$f->{q}",
+ sorturl => "$url?q=$f->{q}",
+ class => "gamelist",
+ (! $np and ! $all or $p <= 0) ? (footer => sub
+ {
+ Tr $p % $f->{r} ? (class => 'odd') : ();
+ td colspan => 3, class => 'tc2';
+ txt "No (more) games with active servers. Browse ";
+ a class => "link", href => "/g/all", "all game titles";
+ txt " instead.";
+ end;
+ end 'tr';
+ }) : (),
+ header => [
+ ['Release Title', 'label' ],
+ ['Game', ''],
+ ['Servers', 'num_total' ],
+ ],
+ row => sub
+ {
+ my($s, $n, $l) = @_;
+
+ my $gn = $l->{gamename} // "";
+ my $lb = $l->{label} // "";
+
+
+ Tr $n % 2 ? (class => 's odd') : (class => 's');
+
+ # label + link
+ td class => "tc1";
+ a href => "/s/$gn", $lb;
+ end;
+
+ # icon or gamename
+ if (-e "$self->{root}/s/icon32/$gn.png" )
+ {
+ td class => "tc2 icon",
+ style => "background-image: url(/icon32/$gn.png);",
+ title => $gn,
+ '';
+ }
+ else
+ {
+ td $gn;
+ }
+
+ # number of beacons / servers
+ td title => ($l->{num_direct} // 0) . "/" . ($l->{num_total} // 0),
+ $l->{num_total} // 0;
+ end;
+ },
+ );
+
+ $self->htmlFooter;
+}
+
+1;