From 5d49b3579d2ad39f6ae9bc2dba37ebbf0334e0da Mon Sep 17 00:00:00 2001 From: Michael Andreen Date: Tue, 15 Jul 2008 21:50:43 +0200 Subject: [PATCH] Converted check/stats page --- NDWeb/Pages/Check.pm | 283 ---------------------------------- database/group_roles.sql | 10 ++ lib/NDWeb/Controller/Root.pm | 1 + lib/NDWeb/Controller/Stats.pm | 235 ++++++++++++++++++++++++++++ root/lib/inc/missionlist.tt2 | 36 +++++ root/lib/inc/stats.tt2 | 85 ++++++++++ root/lib/site/html.tt2 | 12 ++ root/lib/site/leftbar.tt2 | 9 +- root/src/calls/edit.tt2 | 55 +------ root/src/stats/find.tt2 | 10 ++ root/src/stats/galaxy.tt2 | 6 + root/src/stats/planet.tt2 | 61 ++++++++ t/controller_Stats.t | 10 ++ templates/check.tmpl | 157 ------------------- 14 files changed, 475 insertions(+), 495 deletions(-) delete mode 100644 NDWeb/Pages/Check.pm create mode 100644 lib/NDWeb/Controller/Stats.pm create mode 100644 root/lib/inc/missionlist.tt2 create mode 100644 root/lib/inc/stats.tt2 create mode 100644 root/src/stats/find.tt2 create mode 100644 root/src/stats/galaxy.tt2 create mode 100644 root/src/stats/planet.tt2 create mode 100644 t/controller_Stats.t delete mode 100644 templates/check.tmpl diff --git a/NDWeb/Pages/Check.pm b/NDWeb/Pages/Check.pm deleted file mode 100644 index a0062ab..0000000 --- a/NDWeb/Pages/Check.pm +++ /dev/null @@ -1,283 +0,0 @@ -#************************************************************************** -# Copyright (C) 2006 by Michael Andreen * -# * -# This program is free software; you can redistribute it and/or modify * -# it under the terms of the GNU General Public License as published by * -# the Free Software Foundation; either version 2 of the License, or * -# (at your option) any later version. * -# * -# This program is distributed in the hope that it will be useful, * -# but WITHOUT ANY WARRANTY; without even the implied warranty of * -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -# GNU General Public License for more details. * -# * -# You should have received a copy of the GNU General Public License * -# along with this program; if not, write to the * -# Free Software Foundation, Inc., * -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * -#**************************************************************************/ - -package NDWeb::Pages::Check; -use strict; -use warnings; -use ND::Include; -use CGI qw/:standard/; -use NDWeb::Include; - -use base qw/NDWeb::XMLPage/; - -$NDWeb::Page::PAGES{check} = __PACKAGE__; - -sub parse { - my $self = shift; - if ($self->{URI} =~ m{^/.*/((\d+)(?: |:)(\d+)(?:(?: |:)(\d+))?(?: |:(\d+))?)$}){ - param('coords',$1); - } -} - -sub render_body { - my $self = shift; - my ($BODY) = @_; - $self->{TITLE} = 'Check planets and galaxies'; - my $DBH = $self->{DBH}; - - return $self->noAccess unless $self->{ATTACKER}; - - $BODY->param(isBC => $self->isMember && ($self->isOfficer || $self->isBC)); - - my ($x,$y,$z); - if (param('coords') =~ /(\d+)(?: |:)(\d+)(?:(?: |:)(\d+))?(?: |:(\d+))?/){ - $x = $1; - $y = $2; - $z = $3; - $BODY->param(Coords => "$x:$y".(defined $z ? ":$z" : '')); - }else{ - $ND::ERROR .= p b q{Couldn't parse coords}; - return $BODY; - } - - if ($self->isMember && defined param('cmd') && param('cmd') eq 'arbiter'){ - my $query = $DBH->prepare(q{SELECT count(*) AS friendlies FROM current_planet_stats WHERE x = ? AND y = ? - AND (planet_status IN ('Friendly','NAP') OR relationship IN ('Friendly','NAP'))}); - my ($count) = $DBH->selectrow_array($query,undef,$x,$y); - if ($count > 0){ - $BODY->param(Arbiter => 'DO NOT ATTACK THIS GAL'); - }else{ - $BODY->param(Arbiter => 'KILL THESE BASTARDS'); - } - log_message $ND::UID,"Arbiter check on $x:$y"; - } - - my $where = ''; - my $extra_columns = ''; - - $where = 'AND z = ?' if defined $z; - if ($self->isMember && $self->isOfficer){ - $extra_columns = ",planet_status,hit_us, alliance,relationship,nick"; - }elsif ($self->isMember && $self->isBC){ - $extra_columns = ", planet_status,hit_us, alliance,relationship"; - } - - my $query = $DBH->prepare(qq{Select p.id,coords(x,y,z), ((ruler || ' OF ') || p.planet) as planet,race,gov, - size, size_gain, size_gain_day, - score,score_gain,score_gain_day, - value,value_gain,value_gain_day, - xp,xp_gain,xp_gain_day, - sizerank,sizerank_gain,sizerank_gain_day, - scorerank,scorerank_gain,scorerank_gain_day, - valuerank,valuerank_gain,valuerank_gain_day, - xprank,xprank_gain,xprank_gain_day, - p.value - p.size*200 - - COALESCE(ps.metal+ps.crystal+ps.eonium,0)/150 - - COALESCE(ss.total ,(SELECT COALESCE(avg(total),0) FROM structure_scans)::int)*1500 AS fleetvalue - ,(metal+crystal+eonium)/100 AS resvalue $extra_columns - FROM current_planet_stats_full p - LEFT OUTER JOIN planet_scans ps ON p.id = ps.planet - LEFT OUTER JOIN structure_scans ss ON p.id = ss.planet - WHERE x = ? AND y = ? $where ORDER BY x,y,z ASC - }); - - if (defined $z){ - $query->execute($x,$y,$z); - }else{ - $query->execute($x,$y); - if ($self->isMember && ($self->isBC || $self->isOfficer) && !$self->isHC){ - log_message $ND::UID,"BC browsing $x:$y"; - } - } - my @planets; - my $planet_id = undef; - while (my $planet = $query->fetchrow_hashref){ - $planet_id = $planet->{id}; - for my $type (qw/size score value xp/){ - $planet->{"${type}img"} = 'stay'; - $planet->{"${type}img"} = 'up' if $planet->{"${type}_gain_day"} > 0; - $planet->{"${type}img"} = 'down' if $planet->{"${type}_gain_day"} < 0; - $planet->{"${type}rankimg"} = 'stay'; - $planet->{"${type}rankimg"} = 'up' if $planet->{"${type}rank_gain_day"} < 0; - $planet->{"${type}rankimg"} = 'down' if $planet->{"${type}rank_gain_day"} > 0; - for my $type ($type,"${type}_gain","${type}_gain_day"){ - $planet->{$type} =~ s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g; #Add comma for ever 3 digits, i.e. 1000 => 1,000 - } - } - if ($self->isMember && ($self->isOfficer || $self->isBC)){ - if ($z && defined $planet->{alliance} && $planet->{alliance} eq 'NewDawn' && not ($self->isHC || $self->isOfficer)){ - log_message $ND::UID,"BC browsing ND planet $planet->{coords} tick $self->{TICK}"; - } - } - delete $planet->{id}; - push @planets,$planet; - } - $BODY->param(GPlanets => \@planets); - - if ($z && $planet_id){ - $BODY->param(OnePlanet => 1); - - my $query = $DBH->prepare(q{ - SELECT i.id,i.mission, i.name, i.tick AS landingtick,MIN(eta) AS eta - , i.amount, coords(x,y,z) AS target - FROM fleets i - LEFT OUTER JOIN (planets - NATURAL JOIN planet_stats) t ON i.target = t.id - AND t.tick = ( SELECT MAX(tick) FROM planet_stats) - WHERE i.uid = -1 - AND i.sender = ? - AND (i.tick > tick() - 14 OR i.mission = 'Full fleet') - GROUP BY i.id,x,y,z,i.mission,i.tick,i.name,i.amount,i.ingal,i.uid - ORDER BY i.tick,x,y,z - }); - $query->execute($planet_id); - my $ships = $DBH->prepare(q{SELECT ship,amount FROM fleet_ships - WHERE id = ? ORDER BY num - }); - my @missions; - while (my $mission = $query->fetchrow_hashref){ - $mission->{CLASS} = $mission->{mission}; - my @ships; - $ships->execute($mission->{id}); - while (my $ship = $ships->fetchrow_hashref){ - push @ships,$ship; - } - push @ships, {ship => 'No', amount => 'ships'} if @ships == 0; - $mission->{ships} = \@ships; - push @missions,$mission; - } - $BODY->param(Missions => \@missions); - - $query = $DBH->prepare(q{ - SELECT i.id,i.mission, i.name, i.tick AS landingtick,MIN(eta) AS eta - , i.amount, coords(x,y,z) AS sender - FROM fleets i - LEFT OUTER JOIN (planets - NATURAL JOIN planet_stats) s ON i.sender = s.id - AND s.tick = ( SELECT MAX(tick) FROM planet_stats) - WHERE i.uid = -1 - AND i.target = ? - AND (i.tick > tick() - 14 OR i.mission = 'Full fleet') - GROUP BY i.id,x,y,z,i.mission,i.tick,i.name,i.amount,i.ingal,i.uid - ORDER BY i.tick,x,y,z - }); - $query->execute($planet_id); - my @incomings; - while (my $mission = $query->fetchrow_hashref){ - $mission->{CLASS} = $mission->{mission}; - my @ships; - $ships->execute($mission->{id}); - while (my $ship = $ships->fetchrow_hashref){ - push @ships,$ship; - } - push @ships, {ship => 'No', amount => 'ships'} if @ships == 0; - $mission->{ships} = \@ships; - push @incomings,$mission; - } - $BODY->param(Incomings => \@incomings); - - $query = $DBH->prepare(q{SELECT value,value_gain AS gain,tick FROM planet_stats - WHERE id = ? AND tick > tick() - 24}); - $query->execute($planet_id); - my @values; - while (my $value = $query->fetchrow_hashref){ - $value->{class} = 'Defend'; - $value->{class} = 'Attack' if $value->{gain} < 0; - push @values, $value; - } - $BODY->param(Values => \@values); - - $query = $DBH->prepare(q{SELECT type,scan_id, tick FROM scans - WHERE planet = ? AND tick > tick() - 168 - ORDER BY tick,type DESC - }); - $query->execute($planet_id); - my @scans; - while (my $scan = $query->fetchrow_hashref){ - push @scans,$scan; - } - $BODY->param(Scans => \@scans); - - $query = $DBH->prepare(q{SELECT x,y,z,tick FROM planet_stats - WHERE id = ? ORDER BY tick ASC}); - $query->execute($planet_id); - my @coords; - my $c = {x => 0, y => 0, z => 0}; - while (my $c2 = $query->fetchrow_hashref){ - if ($c->{x} != $c2->{x} || $c->{y} != $c2->{y} || $c->{z} != $c2->{z}){ - $c = $c2; - push @coords,$c; - } - } - $BODY->param(OldCoords => \@coords); - - $query = $DBH->prepare(q{SELECT DISTINCT ON(rid) tick,category,name,amount - FROM planet_data pd JOIN planet_data_types pdt ON pd.rid = pdt.id - WHERE pd.id = $1 ORDER BY rid,tick DESC - }); - $query->execute($planet_id); - my @pdata; - while (my $data = $query->fetchrow_hashref){ - $data->{amount} =~ s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g; #Add comma for ever 3 digits, i.e. 1000 => 1,000 - push @pdata,$data; - } - $BODY->param(PlanetData => \@pdata); - - } - $query = $DBH->prepare(q{SELECT x,y, - size, size_gain, size_gain_day, - score,score_gain,score_gain_day, - value,value_gain,value_gain_day, - xp,xp_gain,xp_gain_day, - sizerank,sizerank_gain,sizerank_gain_day, - scorerank,scorerank_gain,scorerank_gain_day, - valuerank,valuerank_gain,valuerank_gain_day, - xprank,xprank_gain,xprank_gain_day, - planets,planets_gain,planets_gain_day - FROM galaxies g - WHERE tick = ( SELECT max(tick) AS max FROM galaxies) - AND x = $1 AND y = $2 - }); - $query->execute($x,$y) or $ND::ERROR .= p($DBH->errstr); - - my @galaxies; - while (my $galaxy = $query->fetchrow_hashref){ - for my $type (qw/planets size score xp value/){ - #$galaxy->{$type} = prettyValue($galaxy->{$type}); - next unless defined $galaxy->{"${type}_gain_day"}; - $galaxy->{"${type}img"} = 'stay'; - $galaxy->{"${type}img"} = 'up' if $galaxy->{"${type}_gain_day"} > 0; - $galaxy->{"${type}img"} = 'down' if $galaxy->{"${type}_gain_day"} < 0; - unless( $type eq 'planets'){ - $galaxy->{"${type}rankimg"} = 'stay'; - $galaxy->{"${type}rankimg"} = 'up' if $galaxy->{"${type}rank_gain_day"} < 0; - $galaxy->{"${type}rankimg"} = 'down' if $galaxy->{"${type}rank_gain_day"} > 0; - } - for my $type ($type,"${type}_gain","${type}_gain_day"){ - $galaxy->{$type} =~ s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g; #Add comma for ever 3 digits, i.e. 1000 => 1,000 - } - } - push @galaxies,$galaxy; - } - $BODY->param(Galaxies => \@galaxies); - - return $BODY; -} - -1; diff --git a/database/group_roles.sql b/database/group_roles.sql index 16d6c7c..8a51c2b 100644 --- a/database/group_roles.sql +++ b/database/group_roles.sql @@ -26,11 +26,20 @@ INSERT INTO roles VALUES('calls_list'); INSERT INTO roles VALUES('calls_edit'); INSERT INTO roles VALUES('raids_info'); INSERT INTO roles VALUES('raids_edit'); +INSERT INTO roles VALUES('stats_intel'); +INSERT INTO roles VALUES('stats_details'); +INSERT INTO roles VALUES('stats_missions'); +INSERT INTO roles VALUES('stats_scans'); +INSERT INTO roles VALUES('stats_planetdata'); INSERT INTO group_roles (gid,role) VALUES(2,'member_menu'); INSERT INTO group_roles (gid,role) VALUES(2,'attack_menu'); INSERT INTO group_roles (gid,role) VALUES(2,'members'); INSERT INTO group_roles (gid,role) VALUES(2,'covop'); +INSERT INTO group_roles (gid,role) VALUES(2,'stats_details'); +INSERT INTO group_roles (gid,role) VALUES(2,'stats_missions'); +INSERT INTO group_roles (gid,role) VALUES(2,'stats_scans'); +INSERT INTO group_roles (gid,role) VALUES(2,'stats_planetdata'); INSERT INTO group_roles (gid,role) VALUES(6,'dc_menu'); INSERT INTO group_roles (gid,role) VALUES(6,'calls_list'); @@ -45,6 +54,7 @@ INSERT INTO group_roles (gid,role) VALUES(5,'intel_menu'); INSERT INTO group_roles (gid,role) VALUES(8,'no_fleet_update'); INSERT INTO group_roles (gid,role) VALUES(9,'members_points_nolimit'); +INSERT INTO group_roles (gid,role) VALUES(9,'stats_intel'); INSERT INTO group_roles (gid,role) VALUES(1,'dc_menu'); INSERT INTO group_roles (gid,role) VALUES(1,'bc_menu'); diff --git a/lib/NDWeb/Controller/Root.pm b/lib/NDWeb/Controller/Root.pm index 9bf0dd5..8b4240a 100644 --- a/lib/NDWeb/Controller/Root.pm +++ b/lib/NDWeb/Controller/Root.pm @@ -110,6 +110,7 @@ sub auto : Private { $dbh->do(q{SET timezone = 'GMT'}); $c->stash(TICK =>$dbh->selectrow_array('SELECT tick()',undef)); + $c->stash(STICK =>$dbh->selectrow_array('SELECT max(tick) FROM planet_stats',undef)); $c->stash->{game}->{tick} = $c->stash->{TICK}; if ($c->user_exists){ diff --git a/lib/NDWeb/Controller/Stats.pm b/lib/NDWeb/Controller/Stats.pm new file mode 100644 index 0000000..2579859 --- /dev/null +++ b/lib/NDWeb/Controller/Stats.pm @@ -0,0 +1,235 @@ +package NDWeb::Controller::Stats; + +use strict; +use warnings; +use parent 'Catalyst::Controller'; + +use NDWeb::Include; + +=head1 NAME + +NDWeb::Controller::Stats - Catalyst Controller + +=head1 DESCRIPTION + +Catalyst Controller. + +=head1 METHODS + +=cut + + +=head2 index + +=cut + +sub index :Path :Args(0) { + my ( $self, $c ) = @_; + + $c->response->body('Matched NDWeb::Controller::Stats in Stats.'); +} + +sub galaxy : Local { + my ( $self, $c, $x, $y, $z ) = @_; + my $dbh = $c->model; + + $c->stash( comma => \&comma_value); + + my $query = $dbh->prepare(q{SELECT x,y, + size, size_gain, size_gain_day, + score,score_gain,score_gain_day, + value,value_gain,value_gain_day, + xp,xp_gain,xp_gain_day, + sizerank,sizerank_gain,sizerank_gain_day, + scorerank,scorerank_gain,scorerank_gain_day, + valuerank,valuerank_gain,valuerank_gain_day, + xprank,xprank_gain,xprank_gain_day, + planets,planets_gain,planets_gain_day + ,ticks_roiding, ticks_roided + FROM galaxies g + JOIN (SELECT x,y,count(CASE WHEN size_gain > 0 THEN 1 ELSE NULL END) AS ticks_roiding + ,count(CASE WHEN size_gain < 0 THEN 1 ELSE NULL END) AS ticks_roided + FROM galaxies GROUP BY x,y) ga USING (x,y) + WHERE tick = ( SELECT max(tick) AS max FROM galaxies) + AND x = $1 AND y = $2 + }); + + $query->execute($x,$y); + $c->stash(g => $query->fetchrow_hashref ); + + my $extra_columns = ''; + if ($c->check_user_roles(qw/stats_intel/)){ + $c->stash(intel => 1); + $extra_columns = ",planet_status,hit_us, alliance,relationship,nick"; + } + if ($c->check_user_roles(qw/stats_details/)){ + $c->stash( details => 1); + $extra_columns .= q{ + ,gov, p.value - p.size*200 - + COALESCE(ps.metal+ps.crystal+ps.eonium,0)/150 - + COALESCE(ss.total ,(SELECT COALESCE(avg(total),0) + FROM structure_scans)::int)*1500 AS fleetvalue + ,(metal+crystal+eonium)/100 AS resvalue + }; + } + + $query = $dbh->prepare(qq{SELECT p.id,coords(x,y,z), ruler, p.planet,race, + size, size_gain, size_gain_day, + score,score_gain,score_gain_day, + value,value_gain,value_gain_day, + xp,xp_gain,xp_gain_day, + sizerank,sizerank_gain,sizerank_gain_day, + scorerank,scorerank_gain,scorerank_gain_day, + valuerank,valuerank_gain,valuerank_gain_day, + xprank,xprank_gain,xprank_gain_day + $extra_columns + FROM current_planet_stats_full p + LEFT OUTER JOIN planet_scans ps ON p.id = ps.planet + LEFT OUTER JOIN structure_scans ss ON p.id = ss.planet + WHERE x = ? AND y = ? AND COALESCE(z = ?,TRUE) ORDER BY x,y,z ASC + }); + + $query->execute($x,$y,$z); + $c->stash(planets => $query->fetchall_arrayref({}) ); +} + +sub planet : Local { + my ( $self, $c, $id ) = @_; + my $dbh = $c->model; + + my $p = $dbh->selectrow_hashref(q{SELECT id,x,y,z FROM current_planet_stats + WHERE id = $1},undef,$id); + + $c->forward('galaxy',[$p->{x},$p->{y},$p->{z}]); + $c->stash(p => $p); + + if ($c->check_user_roles(qw/stats_missions/)){ + my $query = $dbh->prepare(q{ + SELECT DISTINCT ON (i.tick,x,y,z,t.id,i.name,i.amount) i.id,i.mission, i.name, i.tick, i.eta AS eta + , i.amount, coords(x,y,z) AS coords, t.id AS planet + FROM (( + SELECT * FROM fleets + WHERE sender = $1 AND tick > tick() - 14 + ) UNION ( + SELECT * FROM fleets WHERE sender = $1 AND mission = 'Full fleet' + ORDER BY tick DESC LIMIT 5 + ) + ) i + LEFT OUTER JOIN (planets + NATURAL JOIN planet_stats) t ON i.target = t.id + AND t.tick = ( SELECT MAX(tick) FROM planet_stats) + WHERE i.uid = -1 + ORDER BY i.tick,x,y,z,t.id,i.name,i.amount,i.eta + }); + $query->execute($id); + my $ships = $dbh->prepare(q{SELECT ship,amount FROM fleet_ships + WHERE id = ? ORDER BY num + }); + my @missions; + while (my $mission = $query->fetchrow_hashref){ + my @ships; + $ships->execute($mission->{id}); + if ($ships->rows != 0){ + while (my $ship = $ships->fetchrow_hashref){ + push @ships,$ship; + } + $mission->{ships} = \@ships; + } + push @missions,$mission; + } + $c->stash(outgoings => \@missions); + + $query = $dbh->prepare(q{ + SELECT DISTINCT ON (i.tick,x,y,z,s.id,i.name,i.amount) i.id,i.mission, i.name, i.tick,eta + , i.amount, coords(x,y,z) AS coords, s.id AS planet + FROM fleets i + LEFT OUTER JOIN (planets + NATURAL JOIN planet_stats) s ON i.sender = s.id + AND s.tick = ( SELECT MAX(tick) FROM planet_stats) + WHERE i.uid = -1 + AND i.target = ? + AND i.tick > tick() - 3 + ORDER BY i.tick,x,y,z,s.id,i.name,i.amount,i.eta + }); + $query->execute($id); + my @incomings; + while (my $mission = $query->fetchrow_hashref){ + my @ships; + $ships->execute($mission->{id}); + if ($ships->rows != 0){ + while (my $ship = $ships->fetchrow_hashref){ + push @ships,$ship; + } + $mission->{ships} = \@ships; + } + push @incomings,$mission; + } + $c->stash(incomings => \@incomings); + } + + if ($c->check_user_roles(qw/stats_scans/)){ + my $query = $dbh->prepare(q{SELECT type,scan_id, tick FROM scans + WHERE planet = ? AND tick > tick() - 168 + ORDER BY tick,type DESC + }); + $query->execute($id); + $c->stash(scans => $query->fetchall_arrayref({}) ); + } + + if ($c->check_user_roles(qw/stats_planetdata/)){ + my $query = $dbh->prepare(q{SELECT DISTINCT ON(rid) tick,category,name,amount + FROM planet_data pd JOIN planet_data_types pdt ON pd.rid = pdt.id + WHERE pd.id = $1 ORDER BY rid,tick DESC + }); + $query->execute($id); + $c->stash(planetdata => $query->fetchall_arrayref({}) ); + } + + my $query = $dbh->prepare(q{SELECT value,value_gain AS gain,tick FROM planet_stats + WHERE id = ? AND tick > tick() - 24}); + $query->execute($id); + $c->stash(values => $query->fetchall_arrayref({}) ); + + $query = $dbh->prepare(q{SELECT x,y,z,tick FROM planet_stats + WHERE id = ? ORDER BY tick ASC}); + $query->execute($id); + my @coords; + my $co = {x => 0, y => 0, z => 0}; + while (my $c2 = $query->fetchrow_hashref){ + if ($co->{x} != $c2->{x} || $co->{y} != $c2->{y} || $co->{z} != $c2->{z}){ + $co = $c2; + push @coords,$co; + } + } + $c->stash(oldcoords => \@coords); + +} + +sub find : Local { + my ( $self, $c, $find ) = @_; + my $dbh = $c->model; + + local $_ = $find || $c->req->param('coords'); + + if (/(\d+)(?: |:)(\d+)(?: |:)(\d+)(?:(?: |:)(\d+))?/){ + my $planet = $dbh->selectrow_array(q{SELECT planetid($1,$2,$3,$4)} + ,undef,$1,$2,$3,$4); + $c->res->redirect($c->uri_for('planet',$planet)); + }elsif (/(\d+)(?: |:)(\d+)/){ + $c->res->redirect($c->uri_for('galaxy',$1,$2)); + } + +} + + +=head1 AUTHOR + +Michael Andreen (harv@ruin.nu) + +=head1 LICENSE + +GPL 2.0, or later. + +=cut + +1; diff --git a/root/lib/inc/missionlist.tt2 b/root/lib/inc/missionlist.tt2 new file mode 100644 index 0000000..870205e --- /dev/null +++ b/root/lib/inc/missionlist.tt2 @@ -0,0 +1,36 @@ + + + [% FOR m IN missions %] + + + + + + + + [% IF m.fleetcatch %] + + [% END %] + + [% IF m.ships %] + + + + [% END %] + [% END %] +
CoordsNameMissionTickETAAmount
+ [% IF m.ships %] + + [% END %] + + [% IF m.planet %] + [% m.coords %] + [% END %] + [% m.name %][% m.mission %][% m.tick %][% m.eta %][% m.amount %]FLEETCATCH!!
diff --git a/root/lib/inc/stats.tt2 b/root/lib/inc/stats.tt2 new file mode 100644 index 0000000..68e0308 --- /dev/null +++ b/root/lib/inc/stats.tt2 @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + [% g.sizerankimg = (g.sizerank_gain_day == 0 ? 'stay' : (g.sizerank_gain_day < 0 ? 'up' : 'down')) %] + + [% g.scorerankimg = (g.scorerank_gain_day == 0 ? 'stay' : (g.scorerank_gain_day < 0 ? 'up' : 'down')) %] + + [% g.valuerankimg = (g.valuerank_gain_day == 0 ? 'stay' : (g.valuerank_gain_day < 0 ? 'up' : 'down')) %] + + [% g.xprankimg = (g.xprank_gain_day == 0 ? 'stay' : (g.xprank_gain_day < 0 ? 'up' : 'down')) %] + + + [% g.planetsimg = (g.planets_gain_day == 0 ? 'stay' : (g.planets_gain_day > 0 ? 'up' : 'down')) %] + + [% g.sizeimg = (g.size_gain_day == 0 ? 'stay' : (g.size_gain_day > 0 ? 'up' : 'down')) %] + + [% g.scoreimg = (g.score_gain_day == 0 ? 'stay' : (g.score_gain_day > 0 ? 'up' : 'down')) %] + + [% g.valueimg = (g.value_gain_day == 0 ? 'stay' : (g.value_gain_day > 0 ? 'up' : 'down')) %] + + [% g.xpimg = (g.xp_gain_day == 0 ? 'stay' : (g.xp_gain_day > 0 ? 'up' : 'down')) %] + + + + +
Rank
SizeScoreValueXPCoordsPlanetsSizeScoreValueXPRoidedRoiding
[% g.sizerank %] [% g.sizerankimg %] [% g.scorerank %] [% g.scorerankimg %] [% g.valuerank %] [% g.valuerankimg %] [% g.xprank %] [% g.xprankimg %] [% g.x %]:[% g.y %][% comma(g.planets) %] [% g.planetsimg %] [% comma(g.size) %] [% g.sizeimg %] [% comma(g.score) %] [% g.scoreimg %] [% comma(g.value) %] [% g.valueimg %] [% comma(g.xp) %] [% g.xpimg %] [% g.ticks_roided %][% g.ticks_roiding %]
+ + + + + + + + [% IF details %][% END %] + [% IF intel %][% END %] + +[% FOR p IN planets %] + + [% p.sizerankimg = (p.sizerank_gain_day == 0 ? 'stay' : (p.sizerank_gain_day < 0 ? 'up' : 'down')) %] + + [% p.scorerankimg = (p.scorerank_gain_day == 0 ? 'stay' : (p.scorerank_gain_day < 0 ? 'up' : 'down')) %] + + [% p.valuerankimg = (p.valuerank_gain_day == 0 ? 'stay' : (p.valuerank_gain_day < 0 ? 'up' : 'down')) %] + + [% p.xprankimg = (p.xprank_gain_day == 0 ? 'stay' : (p.xprank_gain_day < 0 ? 'up' : 'down')) %] + + + + + + [% p.sizeimg = (p.size_gain_day == 0 ? 'stay' : (p.size_gain_day > 0 ? 'up' : 'down')) %] + + [% p.scoreimg = (p.score_gain_day == 0 ? 'stay' : (p.score_gain_day > 0 ? 'up' : 'down')) %] + + [% p.valueimg = (p.value_gain_day == 0 ? 'stay' : (p.value_gain_day > 0 ? 'up' : 'down')) %] + + [% p.xpimg = (p.xp_gain_day == 0 ? 'stay' : (p.xp_gain_day > 0 ? 'up' : 'down')) %] + + [% IF details %] + + + [% END %] + [% IF intel %] + + + + [% END %] + +[% END %] +
Rank
SizeScoreValue XPCoordsPlanetRaceSizeScoreValue XPGovFleet (Resource) valueNickHit usAlliance
[% p.sizerank %] [% p.sizerankimg %] [% p.scorerank %] [% p.scorerankimg %] [% p.valuerank %] [% p.valuerankimg %] [% p.xprank %] [% p.xprankimg %] [% p.coords %][% p.ruler %] OF [% p.planet %][% p.race %][% comma(p.size) %] [% p.sizeimg %] [% comma(p.score) %] [% p.scoreimg %] [% comma(p.value) %] [% p.valueimg %] [% comma(p.xp) %] [% p.xpimg %] [% p.gov %][% p.fleetvalue %] ([% p.resvalue %])[% p.nick %]([% p.planet_stats %])[% p.hit_us %][% p.alliance %]
diff --git a/root/lib/site/html.tt2 b/root/lib/site/html.tt2 index 4c9f5b5..4671c42 100644 --- a/root/lib/site/html.tt2 +++ b/root/lib/site/html.tt2 @@ -11,5 +11,17 @@ [% content %] + + diff --git a/root/lib/site/leftbar.tt2 b/root/lib/site/leftbar.tt2 index 3c1a250..fe04fd0 100644 --- a/root/lib/site/leftbar.tt2 +++ b/root/lib/site/leftbar.tt2 @@ -23,6 +23,11 @@
  • Planet Rankings
  • Alliance Rankings
  • Galaxy Rankings
  • +
  • + + +

    +
  • [% IF c.check_user_roles("member_menu") %] [% IF user.attacker %] @@ -51,10 +56,6 @@ [% IF user.attacker %]

    Attack menu

    - CoordsNameMissionTickETAAmount - [% FOR m IN missions %] - - - [% IF m.ships %] - - [% END %] - - [% IF m.planet %] - [% m.coords %] - [% END %] - - [% m.name %] - [% m.mission %] - [% m.tick %] - [% m.eta %] - [% m.amount %] - [% IF m.fleetcatch %] - FLEETCATCH!! - [% END %] - - [% IF m.ships %] - - - - [% FOR s IN m.ships %] - - - - [% END %] -
    [% s.ship %][% s.amount %]
    - - [% END %] - [% END %] - -[% END %] -

    Call details, call# [% call.id %] @@ -97,10 +58,10 @@ - + [% END %]
    [% a.fleet %]
    @@ -111,10 +72,10 @@
    Member fleet -[% PROCESS missiontable missions=fleets %] +[% PROCESS inc/missionlist.tt2 missions=fleets %]
    Defenders -[% PROCESS missiontable missions=defenders %] +[% PROCESS inc/missionlist.tt2 missions=defenders %]
    @@ -130,11 +91,3 @@
    - - diff --git a/root/src/stats/find.tt2 b/root/src/stats/find.tt2 new file mode 100644 index 0000000..1e7402b --- /dev/null +++ b/root/src/stats/find.tt2 @@ -0,0 +1,10 @@ +[% META title = 'Find' %] + +

    Could not find: "[% c.req.param('coords') | html %]"

    + +

    The following syntaxes are possible:

    + diff --git a/root/src/stats/galaxy.tt2 b/root/src/stats/galaxy.tt2 new file mode 100644 index 0000000..4e27a6b --- /dev/null +++ b/root/src/stats/galaxy.tt2 @@ -0,0 +1,6 @@ +[% META title = 'Galaxy stats' %] +[% PROCESS inc/stats.tt2 %] +
    +stats +ranks +
    diff --git a/root/src/stats/planet.tt2 b/root/src/stats/planet.tt2 new file mode 100644 index 0000000..dfae29a --- /dev/null +++ b/root/src/stats/planet.tt2 @@ -0,0 +1,61 @@ +[% META title = 'Planet stats' %] +[% PROCESS inc/stats.tt2 %] + +[% IF planetdata %] +
    + + + [% FOR pd IN planetdata %] + + + + + + [% END %] +
    TickTypeAmount
    [% pd.tick %][% pd.category %] [% pd.name %][% comma(pd.amount) %]
    +
    +[% END %] +
    + + +[% FOR v IN values %] + + + + +[% END %] +
    TickValueGain
    [% v.tick %][% v.value %][% v.gain %]
    +
    +
    + +[% IF scans %] + + [% FOR s IN scans %] + + + + + [% END %] +[% END %] + +[% FOR coords IN oldcoords %] + + + + +[% END %] +
    TickScan
    [% s.tick %][% s.type %]
    TickCoords
    [% coords.tick %][% coords.x %]:[% coords.y %]:[% coords.z %]
    +
    +[% IF outgoings %] +
    +

    Outgoing fleets

    + [% PROCESS inc/missionlist.tt2 missions=outgoings %] +

    Incoming fleets

    + [% PROCESS inc/missionlist.tt2 missions=incomings %] +
    +[% END %] + +
    +stats +ranks +
    diff --git a/t/controller_Stats.t b/t/controller_Stats.t new file mode 100644 index 0000000..e86e829 --- /dev/null +++ b/t/controller_Stats.t @@ -0,0 +1,10 @@ +use strict; +use warnings; +use Test::More tests => 3; + +BEGIN { use_ok 'Catalyst::Test', 'NDWeb' } +BEGIN { use_ok 'NDWeb::Controller::Stats' } + +ok( request('/stats')->is_success, 'Request should succeed' ); + + diff --git a/templates/check.tmpl b/templates/check.tmpl deleted file mode 100644 index 37be110..0000000 --- a/templates/check.tmpl +++ /dev/null @@ -1,157 +0,0 @@ -

    Do arbiter check on gal

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Rank
    SizeScoreValueXPCoordsPlanetsSizeScoreValueXP
    <TMPL_VAR NAME=SizeImg> <TMPL_VAR NAME=ScoreImg> <TMPL_VAR NAME=ValueImg> <TMPL_VAR NAME=XPImg> : <TMPL_VAR NAME=PlanetsImg> <TMPL_VAR NAME=SizeImg> <TMPL_VAR NAME=ScoreImg> <TMPL_VAR NAME=ValueImg> <TMPL_VAR NAME=XPImg>
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Rank
    SizeScoreValue XPCoordsPlanetRaceGovSizeScoreValue XPFleet (Resource) valueNickHit usAlliance
    <TMPL_VAR NAME=SizeImg> <TMPL_VAR NAME=ScoreImg> <TMPL_VAR NAME=ValueImg> <TMPL_VAR NAME=XPImg> <TMPL_VAR NAME=SizeImg> <TMPL_VAR NAME=ScoreImg> <TMPL_VAR NAME=ValueImg> <TMPL_VAR NAME=XPImg> ()()
    - -
    - -Amount - - - - - - - -
    TickType
    -
    -
    - - - - - - - - -
    TickValueGain
    -
    -
    - - - - - - - - - - - - - - -
    TickScan
    TickCoords
    ::
    -
    -
    - - - - - - - - - - - - - -
    TargetNameMissionLanding tickETAAmount
    - - - - - - - - - - - - - -
    SenderNameMissionLanding tickETAAmount
    -
    -
    -
    -stats -ranks -
    -- 2.39.2