+++ /dev/null
-#**************************************************************************
-# Copyright (C) 2006 by Michael Andreen <harvATruinDOTnu> *
-# *
-# 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::Main;
-use strict;
-use warnings;
-use CGI qw/:standard/;
-use ND::Include;
-use NDWeb::Include;
-
-use base qw/NDWeb::XMLPage/;
-
-$NDWeb::Page::PAGES{main} = 'NDWeb::Pages::Main';
-
-sub render_body {
- my $self = shift;
- my ($BODY) = @_;
- $self->{TITLE} = 'Main Page';
- my $DBH = $self->{DBH};
-
- if (defined param('cmd')){
- if (param('cmd') eq 'fleet'){
- my $fleet = param('fleet');
- $fleet =~ s/,//g;
- my $amount = 0;
- my @ships;
- while ($fleet =~ m/((?:[A-Z][a-z]+ )*[A-Z][a-z]+)\s+(\d+)/g){
- $amount += $2;
- push @ships, [$1,$2];
- }
- if ($amount){
- $DBH->begin_work;
- eval{
- my $insert = $DBH->prepare(q{INSERT INTO fleets
- (uid,sender,name,mission,tick,amount)
- VALUES (?,?,'Main','Full fleet',tick(),?) RETURNING id});
- my ($id) = $DBH->selectrow_array($insert,undef,$self->{UID}
- ,$self->{PLANET},$amount) or die $DBH->errstr;
- $insert = $DBH->prepare('INSERT INTO fleet_ships
- (id,ship,amount) VALUES (?,?,?)');
- for my $s (@ships){
- unshift @{$s},$id;
- $insert->execute(@{$s}) or die $DBH->errstr;
- }
- };
- if ($@){
- warn $@;
- $DBH->rollback;
- }else{
- $DBH->commit;
- $self->{RETURN} = 'REDIRECT';
- $self->{REDIR_LOCATION} = "/main";
- return;
- }
- }else{
- warn 'Fleet does not contain any ships';
- }
- }elsif (param('cmd') eq 'Recall Fleets'){
- $DBH->begin_work;
- my $updatefleets = $DBH->prepare('UPDATE fleets SET back = tick() + (tick() - (tick - eta)) WHERE uid = ? AND id = ?');
-
- for my $param (param()){
- if ($param =~ /^change:(\d+)$/){
- if($updatefleets->execute($ND::UID,$1)){
- log_message $ND::UID,"Member recalled fleet $1";
- }else{
- warn $DBH->errstr;
- }
- }
- }
- $DBH->commit or warn $DBH->errstr;
- }elsif (param('cmd') eq 'Change Fleets'){
- $DBH->begin_work;
- my $updatefleets = $DBH->prepare('UPDATE fleets SET back = ? WHERE uid = ? AND id = ?');
- for my $param (param()){
- if ($param =~ /^change:(\d+)$/){
- if($updatefleets->execute(param("back:$1"),$ND::UID,$1)){
- log_message $ND::UID,"Member set fleet $1 to be back tick: ".param("back:$1");
- }else{
- warn $DBH->errstr;
- }
- }
- }
- $DBH->commit or warn $DBH->errstr;
- }
- }
- if (param('sms')){
- my $query = $DBH->prepare('UPDATE users SET sms = ? WHERE uid = ?');
- $query->execute(escapeHTML(param('sms')),$ND::UID);
- }
- if (param('hostname')){
- my $query = $DBH->prepare('UPDATE users SET hostmask = ? WHERE uid = ?');
- $query->execute(escapeHTML(param('hostname')),$ND::UID);
- }
- if ($self->isMember() && !$self->{PLANET} && defined param('planet') && (param('planet') =~ m/(\d+)(?: |:)(\d+)(?: |:)(\d+)/)){
- my $query = $DBH->prepare(q{
- UPDATE users SET planet =
- (SELECT id from current_planet_stats where x = ? AND y = ? AND z = ?)
- WHERE uid = ? });
- $query->execute($1,$2,$3,$ND::UID);
- }
-
- $BODY->param(isMember => $self->isMember());
- my @groups = map {name => $_}, sort keys %{$self->{GROUPS}};
- $BODY->param(Groups => \@groups);
-
-
- my $query = $DBH->prepare(q{SELECT planet,defense_points,attack_points,scan_points,humor_points, (attack_points+defense_points+scan_points/20) as total_points, sms,rank,hostmask FROM users WHERE uid = ?});
-
- my ($planet,$defense_points,$attack_points,$scan_points,$humor_points,$total_points,$sms,$rank,$hostname) = $DBH->selectrow_array($query,undef,$ND::UID);
-
- $self->{PLANET} = $planet unless $self->{PLANET};
-
- $BODY->param(NDRank => $rank);
- $BODY->param(DefensePoints => $defense_points);
- $BODY->param(AttackPoints => $attack_points);
- $BODY->param(ScanPoints => $scan_points);
- $BODY->param(HumorPoints => $humor_points);
- $BODY->param(TotalPoints => $total_points);
-
- $BODY->param(Planet => $planet);
-
- my $calls = $DBH->prepare(qq{
- SELECT id,landing_tick,dc,curreta,covered,
- TRIM('/' FROM concat(DISTINCT race||' /')) AS race, TRIM('/' FROM concat(amount||' /')) AS amount,
- TRIM('/' FROM concat(DISTINCT eta||' /')) AS eta, TRIM('/' FROM concat(DISTINCT shiptype||' /')) AS shiptype,
- TRIM('/' FROM concat(coords||' /')) AS attackers
- FROM (SELECT c.id,p.x,p.y,p.z, u.defense_points, c.landing_tick, dc.username AS dc,covered,
- (c.landing_tick - tick()) AS curreta,p2.race, i.amount, i.eta, i.shiptype, p2.alliance,
- coords(p2.x,p2.y,p2.z), COUNT(DISTINCT f.id) AS fleets
- FROM calls c
- JOIN incomings i ON i.call = c.id
- JOIN users u ON c.member = u.uid
- JOIN current_planet_stats p ON u.planet = p.id
- JOIN current_planet_stats p2 ON i.sender = p2.id
- LEFT OUTER JOIN users dc ON c.dc = dc.uid
- LEFT OUTER JOIN fleets f ON f.target = u.planet AND f.tick = c.landing_tick AND f.back = f.tick + f.eta - 1
- WHERE u.uid = ? AND c.landing_tick >= tick()
- GROUP BY c.id, p.x,p.y,p.z, c.landing_tick, u.defense_points,dc.username,covered,p2.race,i.amount,i.eta,i.shiptype,p2.alliance,p2.x,p2.y,p2.z) a
- GROUP BY id, x,y,z,landing_tick, defense_points,dc,covered,curreta,fleets
- ORDER BY landing_tick DESC
- })or warn $DBH->errstr;
- $calls->execute($ND::UID) or warn $DBH->errstr;
-
- my @calls;
- while (my $call = $calls->fetchrow_hashref){
- $call->{attackers} =~ s{(\d+:\d+:\d+)}{<a href="/check?coords=$1">$1</a>}g;
- unless(defined $call->{dc}){
- $call->{activedc} = 'Hostile';
- $call->{dc} = 'none';
- }
- if($call->{covered}){
- $call->{covered} = 'Friendly';
- }else{
- $call->{covered} = 'Hostile';
- }
- $call->{shiptype} = $call->{shiptype};
- push @calls, $call;
- }
- $BODY->param(Calls => \@calls);
-
- my $planetstats= $DBH->selectrow_hashref(q{SELECT x,y,z, ((ruler || ' OF ') || p.planet) as 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
- from current_planet_stats_full p
- WHERE id = ?},undef,$planet) if $planet;
- if ($planetstats){
- my $planet = $planetstats;
- for my $type (qw/size score value xp/){
- $planet->{$type} =~ s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g; #Add comma for ever 3 digits, i.e. 1000 => 1,000
- $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
- }
- }
- $BODY->param(Planets => [$planet]);
- $BODY->param(PlanetCoords => "$planet->{x}:$planet->{y}:$planet->{z}");
- }
-
-
- $query = $DBH->prepare(q{SELECT f.id, coords(x,y,z) AS target, mission
- , f.amount, tick, back
-FROM fleets f
-LEFT OUTER JOIN current_planet_stats p ON f.target = p.id
-WHERE NOT ingal AND f.uid = ? AND f.sender = ? AND
- (back >= ? OR (tick >= tick() - 24 AND name = 'Main'))
-GROUP BY f.id, x,y,z, mission, tick,back,f.amount
-ORDER BY x,y,z,mission,tick
- });
-
- my $ships = $DBH->prepare(q{SELECT ship,amount FROM fleet_ships
- WHERe id = ? ORDER BY num
- });
-
- $query->execute($self->{UID},$self->{PLANET},$self->{TICK}) or warn $DBH->errstr;
- my @fleets;
- while (my $fleet = $query->fetchrow_hashref){
- my @ships;
- $ships->execute($fleet->{id});
- while (my $ship = $ships->fetchrow_hashref){
- push @ships,$ship;
- }
- $fleet->{ships} = \@ships;
- push @fleets,$fleet;
- }
- $BODY->param(Fleets => \@fleets);
-
- $BODY->param(SMS => $sms);
- $BODY->param(Hostname => $hostname);
-
- if ($self->isMember()){
- my $announcements = $DBH->prepare(q{SELECT ft.ftid AS id,u.username,ft.subject,
- count(NULLIF(COALESCE(fp.time > ftv.time,TRUE),FALSE)) AS unread,count(fp.fpid) AS posts,
- date_trunc('seconds',max(fp.time)::timestamp) as last_post,
- min(fp.time)::date as posting_date, ft.sticky
- FROM forum_threads ft JOIN forum_posts fp USING (ftid)
- JOIN users u ON u.uid = ft.uid
- LEFT OUTER JOIN (SELECT * FROM forum_thread_visits WHERE uid = $1) ftv ON ftv.ftid = ft.ftid
- WHERE ft.fbid = 1
- GROUP BY ft.ftid, ft.subject,ft.sticky,u.username
- HAVING count(NULLIF(COALESCE(ft.sticky OR fp.time > ftv.time,TRUE),FALSE)) >= $2
- ORDER BY sticky DESC,last_post DESC
- });
- $announcements->execute($ND::UID,1) or warn $DBH->errstr;
- my @threads;
- while (my $thread = $announcements->fetchrow_hashref){
- push @threads,$thread;
- }
- $BODY->param(Announcements => \@threads);
- }
-
-
- return $BODY;
-}
-
-
-1;
-
use warnings;
use parent 'Catalyst::Controller';
+use NDWeb::Include;
+
=head1 NAME
NDWeb::Controller::Members - Catalyst Controller
=cut
+sub index : Path : Args(0) {
+ my ( $self, $c, $order ) = @_;
+ my $dbh = $c->model;
+
+ $c->stash(error => $c->flash->{error});
+
+ $c->stash(comma => \&comma_value);
+ $c->stash(u => $dbh->selectrow_hashref(q{SELECT planet,defense_points
+ ,attack_points,scan_points,humor_points
+ , (attack_points+defense_points+scan_points/20) as total_points
+ , sms,rank,hostmask FROM users WHERE uid = ?
+ },undef,$c->user->id)
+ );
+
+ $c->stash(groups => $dbh->selectrow_array(q{SELECT array_accum(groupname)
+ FROM groups g NATURAL JOIN groupmembers gm
+ WHERE uid = $1
+ },undef,$c->user->id)
+ );
+
+ $c->stash(p => $dbh->selectrow_hashref(q{SELECT id,x,y,z, ruler, 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
+ from current_planet_stats_full p
+ WHERE id = ?
+ },undef,$c->user->planet)
+ );
+
+ my $calls = $dbh->prepare(q{
+ SELECT id,landing_tick,dc,curreta
+ ,array_accum(race::text) AS race
+ ,array_accum(amount) AS amount
+ ,array_accum(eta) AS eta
+ ,array_accum(shiptype) AS shiptype
+ ,array_accum(coords) AS attackers
+ FROM (SELECT c.id, c.landing_tick
+ ,dc.username AS dc, (c.landing_tick - tick()) AS curreta
+ ,p2.race, i.amount, i.eta, i.shiptype, p2.alliance
+ ,coords(p2.x,p2.y,p2.z)
+ FROM calls c
+ LEFT OUTER JOIN incomings i ON i.call = c.id
+ LEFT OUTER JOIN current_planet_stats p2 ON i.sender = p2.id
+ LEFT OUTER JOIN users dc ON c.dc = dc.uid
+ WHERE c.member = $1 AND c.landing_tick >= tick()
+ GROUP BY c.id, c.landing_tick, dc.username
+ ,p2.race,i.amount,i.eta,i.shiptype,p2.alliance,p2.x,p2.y,p2.z
+ ) c
+ GROUP BY id, landing_tick,dc,curreta
+ });
+
+ $calls->execute($c->user->id);
+ $c->stash(calls => $calls->fetchall_arrayref({}) );
+
+ my $query = $dbh->prepare(q{SELECT f.id, coords(x,y,z), target, mission
+ , f.amount, tick, back
+FROM fleets f
+LEFT OUTER JOIN current_planet_stats p ON f.target = p.id
+WHERE NOT ingal AND f.uid = ? AND f.sender = ? AND
+ (back >= ? OR (tick >= tick() - 24 AND name = 'Main'))
+GROUP BY f.id, x,y,z, mission, tick,back,f.amount,f.target
+ORDER BY x,y,z,mission,tick
+ });
+
+ my $ships = $dbh->prepare(q{SELECT ship,amount FROM fleet_ships
+ WHERe id = ? ORDER BY num
+ });
+
+ $query->execute($c->user->id,$c->user->planet,$c->stash->{TICK});
+ my @fleets;
+ while (my $fleet = $query->fetchrow_hashref){
+ my @ships;
+ $ships->execute($fleet->{id});
+ while (my $ship = $ships->fetchrow_hashref){
+ push @ships,$ship;
+ }
+ $fleet->{ships} = \@ships;
+ push @fleets,$fleet;
+ }
+ $c->stash(fleets => \@fleets);
+
+ my $announcements = $dbh->prepare(q{SELECT ft.ftid, u.username,ft.subject,
+ count(NULLIF(COALESCE(fp.time > ftv.time,TRUE),FALSE)) AS unread,count(fp.fpid) AS posts,
+ date_trunc('seconds',max(fp.time)::timestamp) as last_post,
+ min(fp.time)::date as posting_date, ft.sticky
+ FROM forum_threads ft JOIN forum_posts fp USING (ftid)
+ JOIN users u ON u.uid = ft.uid
+ LEFT OUTER JOIN (SELECT * FROM forum_thread_visits WHERE uid = $1) ftv ON ftv.ftid = ft.ftid
+ WHERE ft.fbid = 1
+ GROUP BY ft.ftid, ft.subject,ft.sticky,u.username
+ HAVING count(NULLIF(COALESCE(ft.sticky OR fp.time > ftv.time,TRUE),FALSE)) >= 1
+ ORDER BY sticky DESC,last_post DESC
+ });
+ $announcements->execute($c->user->id);
+ $c->stash(announcements => $announcements->fetchall_arrayref({}) );
+}
+
+sub posthostupdate : Local {
+ my ( $self, $c ) = @_;
+ my $dbh = $c->model;
+
+ $dbh->do(q{UPDATE users SET hostmask = ? WHERE uid = ?
+ },undef, html_escape $c->req->param('hostname'), $c->user->id);
+
+ $c->res->redirect($c->uri_for(''));
+}
+
+sub postsmsupdate : Local {
+ my ( $self, $c ) = @_;
+ my $dbh = $c->model;
+
+ $dbh->do(q{UPDATE users SET sms = ? WHERE uid = ?
+ },undef, html_escape $c->req->param('sms'), $c->user->id);
+
+ $c->res->redirect($c->uri_for(''));
+}
+
+sub postfleetupdate : Local {
+ my ( $self, $c ) = @_;
+ my $dbh = $c->model;
+
+ my $fleet = $c->req->param('fleet');
+ $fleet =~ s/,//g;
+ my $amount = 0;
+ my @ships;
+ while ($fleet =~ m/((?:[A-Z][a-z]+ )*[A-Z][a-z]+)\s+(\d+)/g){
+ $amount += $2;
+ push @ships, [$1,$2];
+ }
+ if ($amount){
+ $dbh->begin_work;
+ eval{
+ my $insert = $dbh->prepare(q{INSERT INTO fleets
+ (uid,sender,name,mission,tick,amount)
+ VALUES (?,?,'Main','Full fleet',tick(),?) RETURNING id});
+ my ($id) = $dbh->selectrow_array($insert,undef,$c->user->id
+ ,$c->user->planet,$amount);
+ $insert = $dbh->prepare(q{INSERT INTO fleet_ships
+ (id,ship,amount) VALUES (?,?,?)});
+ for my $s (@ships){
+ unshift @{$s},$id;
+ $insert->execute(@{$s});
+ }
+ $dbh->commit;
+ };
+ if ($@){
+ if ($@ =~ m/insert or update on table "fleet_ships" violates foreign key constraint "fleet_ships_ship_fkey"\s+DETAIL:\s+Key \(ship\)=\(([^)]+)\)/){
+ $c->flash( error => "'$1' is NOT a valid ship");
+ }else{
+ $c->flash( error => $@);
+ }
+ $dbh->rollback;
+ }
+ }else{
+ $c->flash( error => 'Fleet does not contain any ships');
+ }
+
+ $c->res->redirect($c->uri_for(''));
+}
+
+sub postfleetsupdates : Local {
+ my ( $self, $c ) = @_;
+ my $dbh = $c->model;
+
+ my $log = $dbh->prepare(q{INSERT INTO forum_posts (ftid,uid,message) VALUES(
+ (SELECT ftid FROM users WHERE uid = $1),$1,$2)
+ });
+ $dbh->begin_work;
+ if ($c->req->param('cmd') eq 'Recall Fleets'){
+ my $updatefleets = $dbh->prepare(q{UPDATE fleets
+ SET back = tick() + (tick() - (tick - eta))
+ WHERE uid = ? AND id = ? AND back > tick()+eta
+ });
+
+ for my $param ($c->req->param()){
+ if ($param =~ /^change:(\d+)$/){
+ $updatefleets->execute($c->user->id,$1);
+ $log->execute($c->user->id,"Member recalled fleet $1");
+ }
+ }
+ }elsif ($c->req->param('cmd') eq 'Change Fleets'){
+ my $updatefleets = $dbh->prepare(q{UPDATE fleets
+ SET back = ? WHERE uid = ? AND id = ?});
+
+ for my $param ($c->req->param()){
+ if ($param =~ /^change:(\d+)$/){
+ my $back = $c->req->param("back:$1");
+ $updatefleets->execute($back,$c->user->id,$1);
+ $log->execute($c->user->id,"Member set fleet $1 to be back tick: $back");
+ }
+ }
+ }
+ $dbh->commit;
+
+ $c->res->redirect($c->uri_for(''));
+}
+
+
sub points : Local {
my ( $self, $c, $order ) = @_;
my $dbh = $c->model;
<ul class="linkbar">
- <li><a href="/index">Main page</a></li>
+ <li><a href="[% c.check_user_roles("member_menu") ? '/members' : '/index' %]">Main page</a></li>
<li><a href="/forum">Forum</a></li>
<li><a href="/forum/search">Forum search</a></li>
[% META title = 'Main' %]
-<p>
-Hello [% user.name %]
-</p>
-
--- /dev/null
+[% META title = 'Main' %]
+<div class="leftinfo">
+<table class="boards">
+[% FOR a IN announcements %]
+ <tr class="[% loop.count % 2 ? 'even' : 'odd' %]">
+ <td align="center">[% a.unread %]</td>
+ <td align="center">[% a.posts %]</td>
+ <td[% IF a.sticky %] class="sticky"[% END %]><a href="[% c.uri_for('/forum/thread',a.ftid) %]"> [% a.subject %] </a></td>
+ <td align="left">[% a.posting_date %]</td>
+ <td align="center">[% a.username %]</td>
+ <td align="left">[% a.last_post %]</td>
+ </tr>
+[% END %]
+</table>
+</div>
+[% IF c.user.planet %]
+<img class="graph" src="[% c.uri_for('/graphs/planetvsnd',c.user.planet,STICK) %]" alt="Your planet vs ND avg" height="300" width="500">
+[% END %]
+<div class="clear"></div>
+
+[% IF c.user.planet %]
+<table class="stats">
+ <tr align="center"><th colspan="4">Rank</th>
+ </tr>
+ <tr><th>Size</th><th>Score</th><th>Value</th><th>XP</th><th>X</th><th>Y</th><th>Z</th><th>Planet</th><th>Race</th><th>Size</th><th>Score</th><th>Value</th>
+ <th>XP</th>
+ </tr>
+ <tr class="odd">
+ [% p.sizerankimg = (p.sizerank_gain_day == 0 ? 'stay' : (p.sizerank_gain_day < 0 ? 'up' : 'down')) %]
+ <td title="[% p.sizerank_gain_day %] Today | [% p.sizerank_gain %] Tick">[% p.sizerank %] <img src="/static/images/[% p.sizerankimg %].png" alt="[% p.sizerankimg %]"> </td>
+ [% p.scorerankimg = (p.scorerank_gain_day == 0 ? 'stay' : (p.scorerank_gain_day < 0 ? 'up' : 'down')) %]
+ <td title="[% p.scorerank_gain_day %] Today | [% p.scorerank_gain %] Tick">[% p.scorerank %] <img src="/static/images/[% p.scorerankimg %].png" alt="[% p.scorerankimg %]"> </td>
+ [% p.valuerankimg = (p.valuerank_gain_day == 0 ? 'stay' : (p.valuerank_gain_day < 0 ? 'up' : 'down')) %]
+ <td title="[% p.valuerank_gain_day %] Today | [% p.valuerank_gain %] Tick">[% p.valuerank %] <img src="/static/images/[% p.valuerankimg %].png" alt="[% p.valuerankimg %]"> </td>
+ [% p.xprankimg = (p.xprank_gain_day == 0 ? 'stay' : (p.xprank_gain_day < 0 ? 'up' : 'down')) %]
+ <td title="[% p.xprank_gain_day %] Today | [% p.xprank_gain %] Tick">[% p.xprank %] <img src="/static/images/[% p.xprankimg %].png" alt="[% p.xprankimg %]"> </td>
+
+ <td>[% p.x %] </td>
+ <td><a href="[% c.uri_for('/stats','galaxy',p.x,p.y) %]">[% p.y %]</a></td>
+ <td><a href="[% c.uri_for('/stats','planet',p.id) %]">[% p.z %]</a></td>
+ <td align="center">[% p.ruler %] <b>OF</b> [% p.planet %]</td>
+ <td align="center">[% p.race %]</td>
+ [% p.sizeimg = (p.size_gain_day == 0 ? 'stay' : (p.size_gain_day > 0 ? 'up' : 'down')) %]
+ <td title="[% p.size_gain_day %] Today | [% p.size_gain %] Tick">[% comma(p.size) %] <img src="/static/images/[% p.sizeimg %].png" alt="[% p.sizeimg %]"> </td>
+ [% p.scoreimg = (p.score_gain_day == 0 ? 'stay' : (p.score_gain_day > 0 ? 'up' : 'down')) %]
+ <td title="[% comma(p.score_gain_day) %] Today | [% comma(p.score_gain) %] Tick">[% comma(p.score) %] <img src="/static/images/[% p.scoreimg %].png" alt="[% p.scoreimg %]"> </td>
+ [% p.valueimg = (p.value_gain_day == 0 ? 'stay' : (p.value_gain_day > 0 ? 'up' : 'down')) %]
+ <td title="[% comma(p.value_gain_day) %] Today | [% comma(p.value_gain) %] Tick">[% comma(p.value) %] <img src="/static/images/[% p.valueimg %].png" alt="[% p.valueimg %]"> </td>
+ [% p.xpimg = (p.xp_gain_day == 0 ? 'stay' : (p.xp_gain_day > 0 ? 'up' : 'down')) %]
+ <td title="[% comma(p.xp_gain_day) %] Today | [% comma(p.xp_gain) %] Tick">[% comma(p.xp) %] <img src="/static/images/[% p.xpimg %].png" alt="[% p.xpimg %]"> </td>
+ </tr>
+</table>
+[% END %]
+[% IF calls %]
+<table>
+ <tr><th>Call</th><th>DC</th><th>Landing tick</th><th>Races</th><th>Amount</th><th>Shiptypes</th><th>Current eta</th><th>Inital eta</th><th>Attackers</th></tr>
+ [% FOR call IN calls %]
+ <tr align="center" class="[% loop.count % 2 == 0 ? 'even' : 'odd' %]">
+ <td class="[% UNLESS call.dc %]Hostile[%END%]"><a href="[% c.uri_for('/calls/edit',call.id) %]">[% call.id %]</a></td>
+ <td>[% call.dc %]</td>
+ <td>[% call.landing_tick %]</td>
+ <td>[% call.race.unique.join('/') %]</td>
+ <td>[% call.amount.join('/') %]</td>
+ <td>[% call.shiptype.unique.join('/') | html %]</td>
+ <td>[% call.curreta %]</td>
+ <td>[% call.eta.unique.join('/') %]</td>
+ <td>[% FOR a IN call.attackers %]
+ <a href="[% c.uri_for('/stats/find',a) %]">[% a %]</a>
+ [% UNLESS loop.last %]/[%END%]
+ [%END%]</td>
+ </tr>
+ [% END %]
+</table>
+[% END %]
+<div class="leftinfo">
+<fieldset class="forum-post"> <legend>Account details</legend>
+ <ul>
+ <li> ND rank (by score): [% u.rank %] </li>
+ <li> Defense points: [% u.defense_points %] </li>
+ <li> Attack points: [% u.attack_points %] </li>
+ <li> Scan points: [% u.scan_points %] </li>
+ <li> Humor points: [% u.humor_points %] </li>
+ <li> Total points: [% u.total_points %] </li>
+ <li> Member of the following groups: [% groups.join(',') %]</li>
+ </ul>
+</fieldset>
+
+<fieldset class="forum-post"> <legend>Fleets</legend>
+<form action="[% c.uri_for('postfleetsupdates') %]" method="post">
+ <table>
+ <tr><td></td><th>Target</th><th>Mission</th><th>Amount</th><th>Landing Tick</th><th>Back home</th><th>change?</th></tr>
+[% FOR f IN fleets %]
+ <tr class="[% loop.count % 2 == 0 ? 'even' : 'odd' %]">
+ <td><input type="button" onclick="$('#fleet[% f.id %]').toggle()" value="⇓" title="Show fleets"></td>
+ <td>[% IF f.target %]<a href="[% c.uri_for('/stats/planet',f.target) %]">[% f.coords %]</a>[% END %]</td>
+ <td>[% f.mission %]</td>
+ <td>[% f.amount %]</td><td>[% f.tick %]</td>
+ <td>[% IF f.back %]<input style="width:5em" type="text" name="back:[% f.id %]" value="[% f.back %]">[% END %]</td>
+ <td>[% IF f.back %]<input type="checkbox" name="change:[% f.id %]">[% END %]</td>
+ </tr>
+ <tr id="fleet[% f.id %]" class="hidden">
+ <td>
+ <td colspan="5"><table>
+ [% FOR s IN f.ships %]
+ <tr class="[% loop.count % 2 == 0 ? 'even' : 'odd' %]">
+ <td>[% s.ship %]</td><td>[% s.amount %]</td>
+ </tr>
+ [% END %]
+ </table></td>
+ </tr>
+[% END %]
+ </table>
+ <p>
+ <input type="submit" name="cmd" value="Change Fleets">
+ <input type="submit" name="cmd" value="Recall Fleets">
+ </p>
+</form>
+</fieldset>
+<form action="[% c.uri_for('posthostupdate') %]" method="post">
+<fieldset class="forum-post"> <legend>Hostname</legend>
+ <p>Hostname:
+ <input style="width:25em" type="text" name="hostname" value="[% u.hostmask %]">
+ <input type="submit" value="Submit">
+ </p>
+</fieldset>
+</form>
+<form action="[% c.uri_for('postsmsupdate') %]" method="post">
+<fieldset class="forum-post"> <legend>SMS</legend>
+ <p>Number:
+ <input type="text" name="sms" value="[% u.sms %]">
+ <input type="submit" value="Submit">
+ </p>
+</fieldset>
+</form>
+[% IF c.user.planet %]
+<form action="[% c.uri_for('postfleetupdate') %]" method="post">
+<fieldset class="forum-post"> <legend>Fleet</legend>
+ <p>Paste your total fleet from ships section on overview here (do it daily to see the menus):</p>
+ <textarea rows="15" cols="50" name="fleet"></textarea>
+ <br><input type="submit" value="Submit">
+</fieldset>
+</form>
+[% END %]
+</div>
+[% IF c.user.planet %]
+<img class="graph" src="[% c.uri_for('/graphs/planetstats',c.user.planet,STICK) %]" alt="stats for your planet" height="300" width="500">
+<img class="graph" src="[% c.uri_for('/graphs/planetranks',c.user.planet,STICK) %]" alt="ranks for your planet" height="300" width="500">
+[% END %]
border-width: 2px;
border-color: red;
}
+
+div#error {
+ font-weight: bold;
+ font-size: larger;
+ color: red;
+ border-style: solid;
+ border-width: 1px;
+}
+++ /dev/null
-<div class="leftinfo">
-<table class="boards">
- <TMPL_LOOP Announcements>
- <tr class="<TMPL_IF __odd__>odd<TMPL_ELSE>even</TMPL_IF>">
- <td align="center"><TMPL_VAR NAME=Unread></td>
- <td align="center"><TMPL_VAR NAME=Posts></td>
- <td<TMPL_IF Sticky> class="sticky"</TMPL_IF>><a href="/forum?t=<TMPL_VAR NAME=Id>#NewPosts"> <TMPL_VAR NAME=Subject> </a></td>
- <td align="left"><TMPL_VAR NAME=Posting_date></td>
- <td align="center"><TMPL_VAR NAME=Username></td>
- <td align="left"><TMPL_VAR NAME=Last_post></td>
- </tr>
- </TMPL_LOOP>
-</table>
-</div>
-<TMPL_IF PLANET>
-<img class="graph" src="/graph/planetvsnd/<TMPL_VAR NAME=PLANET>" alt="Your planet vs ND avg" height="300" width="500"/>
-</TMPL_IF>
-<div class="clear"></div>
-
-<TMPL_IF PLANET>
-<table class="stats">
- <tr align="center"><th colspan="4">Rank</th>
- </tr>
- <tr><th>Size</th><th>Score</th><th>Value </th><th>XP</th><th>X</th><th>Y</th><th>Z</th><th>Planet</th><th>Race</th><th>Size</th><th>Score</th><th>Value</th>
- <th>XP</th>
- </tr>
-<TMPL_LOOP Planets>
- <tr class="<TMPL_IF __odd__>odd<TMPL_ELSE>even</TMPL_IF>">
-
- <td title="<TMPL_VAR NAME=SizeRank_Gain_day> Today | <TMPL_VAR NAME=SizeRank_Gain> Tick"><TMPL_VAR NAME=SizeRank> <img src="/images/<TMPL_VAR NAME=SizeRankImg>.png" alt="<TMPL_VAR NAME=SizeImg>"/> </td>
- <td title="<TMPL_VAR NAME=ScoreRank_Gain_day> Today | <TMPL_VAR NAME=ScoreRank_Gain> Tick"><TMPL_VAR NAME=ScoreRank> <img src="/images/<TMPL_VAR NAME=ScoreRankImg>.png" alt="<TMPL_VAR NAME=ScoreImg>"/> </td>
- <td title="<TMPL_VAR NAME=ValueRank_Gain_day> Today | <TMPL_VAR NAME=ValueRank_Gain> Tick"><TMPL_VAR NAME=ValueRank> <img src="/images/<TMPL_VAR NAME=ValueRankImg>.png" alt="<TMPL_VAR NAME=ValueImg>"/> </td>
- <td title="<TMPL_VAR NAME=XPRank_Gain_day> Today | <TMPL_VAR NAME=XPRank_Gain> Tick"><TMPL_VAR NAME=XPRank> <img src="/images/<TMPL_VAR NAME=XPRankImg>.png" alt="<TMPL_VAR NAME=XPImg>"/> </td>
-
- <td><TMPL_VAR NAME=X></td>
- <td><a href="/check?coords=<TMPL_VAR NAME=X>:<TMPL_VAR NAME=Y>"><TMPL_VAR NAME=Y></a></td>
- <td><a href="/check?coords=<TMPL_VAR NAME=X>:<TMPL_VAR NAME=Y>:<TMPL_VAR NAME=Z>"><TMPL_VAR NAME=Z></a></td>
- <td align="center"><TMPL_VAR NAME=Planet></td>
- <td align="center"><TMPL_VAR NAME=Race></td>
- <td title="<TMPL_VAR NAME=Size_Gain_day> Today | <TMPL_VAR NAME=Size_Gain> Tick"><TMPL_VAR NAME=Size> <img src="/images/<TMPL_VAR NAME=SizeImg>.png" alt="<TMPL_VAR NAME=SizeImg>"/> </td>
- <td title="<TMPL_VAR NAME=Score_Gain_day> Today | <TMPL_VAR NAME=Score_Gain> Tick"><TMPL_VAR NAME=Score> <img src="/images/<TMPL_VAR NAME=ScoreImg>.png" alt="<TMPL_VAR NAME=ScoreImg>"/> </td>
- <td title="<TMPL_VAR NAME=Value_Gain_day> Today | <TMPL_VAR NAME=Value_Gain> Tick"><TMPL_VAR NAME=Value> <img src="/images/<TMPL_VAR NAME=ValueImg>.png" alt="<TMPL_VAR NAME=ValueImg>"/> </td>
- <td title="<TMPL_VAR NAME=XP_Gain_day> Today | <TMPL_VAR NAME=XP_Gain> Tick"><TMPL_VAR NAME=XP> <img src="/images/<TMPL_VAR NAME=XPImg>.png" alt="<TMPL_VAR NAME=XPImg>"/> </td>
- </tr>
- </TMPL_LOOP>
- </table>
-</TMPL_IF>
-<TMPL_IF Calls>
-<table>
- <tr><th>Call</th><th>DC</th><th>Landing tick</th><th>Races</th><th>Amount</th><th>Shiptypes</th><th>Current eta</th><th>Inital eta</th><th>Attackers</th></tr>
-<TMPL_LOOP Calls>
- <tr align="center" class="<TMPL_IF __odd__>odd<TMPL_ELSE>even</TMPL_IF>">
- <td class="<TMPL_VAR NAME=Covered>"><a href="/calls?call=<TMPL_VAR NAME=Id>"><TMPL_VAR NAME=Id></a></td>
- <td class="<TMPL_VAR NAME=ActiveDC>"><TMPL_VAR NAME=DC></td>
- <td><TMPL_VAR NAME=Landing_Tick></td>
- <td><TMPL_VAR NAME=Race></td>
- <td><TMPL_VAR NAME=Amount></td>
- <td><TMPL_VAR NAME=Shiptype></td>
- <td><TMPL_VAR NAME=Curreta></td>
- <td><TMPL_VAR NAME=Eta></td>
- <td><TMPL_VAR ESCAPE=NONE NAME=Attackers></td>
- </tr>
-</TMPL_LOOP>
-</table>
-</TMPL_IF>
-<div class="leftinfo">
-<fieldset class="forum-post"> <legend>Account details</legend>
- <ul>
- <TMPL_IF isMEMBER>
- <li> ND rank (by score): <TMPL_VAR NAME=NDRank> </li>
- <li> Defense points: <TMPL_VAR NAME=DefensePoints> </li>
- <li> Attack points: <TMPL_VAR NAME=AttackPoints> </li>
- <li> Scan points: <TMPL_VAR NAME=ScanPoints> </li>
- <li> Humor points: <TMPL_VAR NAME=HumorPoints> </li>
- <li> Total points: <TMPL_VAR NAME=TotalPoints> </li>
- </TMPL_IF>
- <li> Member of the following groups: <TMPL_LOOP Groups><TMPL_VAR NAME=Name><TMPL_UNLESS __last__>, </TMPL_UNLESS></TMPL_LOOP></li>
- </ul>
-</fieldset>
-
-<fieldset class="forum-post"> <legend>Fleets</legend>
-<form action="<TMPL_VAR NAME=PAGE>" method="post">
- <table>
- <tr><th>Target</th><th>Mission</th><th>Amount</th><th>Landing Tick</th><th>Back home</th><th>change?</th></tr>
- <TMPL_LOOP Fleets>
- <tr class="<TMPL_IF __odd__>odd<TMPL_ELSE>even</TMPL_IF>" onclick="toggleVisibility('fleet<TMPL_VAR NAME=Id>')">
- <td><TMPL_VAR NAME=Target></td>
- <td><a href="javascript://" onclick="toggleVisibility('fleet<TMPL_VAR NAME=Id>')"><TMPL_VAR NAME=Mission></a></td>
- <td><TMPL_VAR NAME=Amount></td><td><TMPL_VAR NAME=Tick></td>
- <td><TMPL_IF Back><input class="coordsinput" type="text" name="back:<TMPL_VAR NAME=Id>" value="<TMPL_VAR NAME=Back>"/></TMPL_IF></td>
- <td><TMPL_IF Back><input type="checkbox" name="change:<TMPL_VAR NAME=Id>"/></TMPL_IF></td>
- </tr>
- <tr id="fleet<TMPL_VAR NAME=Id>" style="z-index:1; display:none;">
- <td/>
- <td colspan="5"><table>
- <TMPL_LOOP Ships>
- <tr class="<TMPL_IF __odd__>odd<TMPL_ELSE>even</TMPL_IF>">
- <td><TMPL_VAR NAME=Ship></td><td><TMPL_VAR NAME=Amount></td>
- </tr>
- </TMPL_LOOP>
- </table></td></tr>
- </TMPL_LOOP>
- </table>
- <p>
- <input type="hidden" name="page" value="<TMPL_VAR NAME=PAGE>"/>
- <input type="submit" name="cmd" value="Change Fleets"/>
- <input type="submit" name="cmd" value="Recall Fleets"/>
- </p>
-</form>
-</fieldset>
-<form action="<TMPL_VAR NAME=PAGE>" method="post">
-<fieldset class="forum-post"> <legend>Hostname</legend>
- <p>Hostname:
- <input style="width:25em" type="text" name="hostname" value="<TMPL_VAR NAME=Hostname>"/>
- <input type="submit" value="Submit"/>
- </p>
-</fieldset>
-</form>
-<form action="<TMPL_VAR NAME=PAGE>" method="post">
-<fieldset class="forum-post"> <legend>SMS</legend>
- <p>Number:
- <input type="text" name="sms" value="<TMPL_VAR NAME=SMS>"/>
- <input type="submit" value="Submit"/>
- </p>
-</fieldset>
-</form>
-<TMPL_IF PLANET>
-<form action="<TMPL_VAR NAME=PAGE>" method="post">
-<fieldset class="forum-post"> <legend>Fleet</legend>
- <p>Paste your total fleet from ships section on overview here (do it daily to see the menus):</p>
- <textarea rows="15" cols="50" name="fleet"></textarea>
- <input type="hidden" name="cmd" value="fleet"/>
- <input type="hidden" name="page" value="<TMPL_VAR NAME=PAGE>"/>
- <br/><input type="submit" value="Submit"/>
-</fieldset>
-</form>
-</TMPL_IF>
-</div>
-<TMPL_IF PlanetCoords>
-<img class="graph" src="/graph/stats/<TMPL_VAR NAME=PlanetCoords>" alt="stats for your planet" height="300" width="500"/>
-<img class="graph" src="/graph/ranks/<TMPL_VAR NAME=PlanetCoords>" alt="ranks for your planet" height="300" width="500"/>
-</TMPL_IF>