X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=ND%2FWeb%2FPages%2FCalls.pm;h=cbeaa05707301ed1fd71b921a06521ab3f682906;hb=1dd5131f6b4484797de54bd9bd2d67220c921608;hp=208b1a9099174372605531140491208f5d5701b6;hpb=9ce5a8529e75cb109ed9ba3fc788c94ef47b1080;p=ndwebbie.git diff --git a/ND/Web/Pages/Calls.pm b/ND/Web/Pages/Calls.pm index 208b1a9..cbeaa05 100644 --- a/ND/Web/Pages/Calls.pm +++ b/ND/Web/Pages/Calls.pm @@ -23,31 +23,24 @@ use ND::Include; use CGI qw/:standard/; use ND::Web::Include; -$ND::PAGES{calls} = {parse => \&parse, process => \&process, render=> \&render}; +use base qw/ND::Web::XMLPage/; -sub parse { - my ($uri) = @_; - #if ($uri =~ m{^/.*/(\w+)$}){ - # param('list',$1); - #} -} +$ND::Web::Page::PAGES{calls} = __PACKAGE__; -sub process { +sub render_body { + my $self = shift; + my ($BODY) = @_; + $self->{TITLE} = 'Defense Calls'; + my $DBH = $self->{DBH}; -} + return $self->noAccess unless $self->isDC; -sub render { - my ($DBH,$BODY) = @_; my $error; - $ND::TEMPLATE->param(TITLE => 'Defense Calls'); - - return $ND::NOACCESS unless isDC(); - my $call; if (defined param('call') && param('call') =~ /^(\d+)$/){ my $query = $DBH->prepare(q{ - SELECT c.id, coords(p.x,p.y,p.z), c.landing_tick, c.info, covered, open, dc.username AS dc, u.defense_points,c.member + SELECT c.id, coords(p.x,p.y,p.z), c.landing_tick, c.info, covered, open, dc.username AS dc, u.defense_points,c.member,u.planet FROM calls c JOIN users u ON c.member = u.uid LEFT OUTER JOIN users dc ON c.dc = dc.uid @@ -93,7 +86,7 @@ sub render { ,undef,$ND::UID,$call->{id})){ $call->{covered} = (param('cmd') eq 'Cover call'); $call->{open} = (param('cmd') =~ /^(Uncover|Open) call$/); - $call->{DC} = $ND::USER; + $call->{DC} = $self->{USER}; }else{ $error .= "

Something went wrong: ".$DBH->errstr."

"; } @@ -132,8 +125,8 @@ sub render { $BODY->param(Coords => $call->{coords}); $BODY->param(DefensePoints => $call->{defense_points}); $BODY->param(LandingTick => $call->{landing_tick}); - $BODY->param(ETA => $call->{landing_tick}-$ND::TICK); - $BODY->param(Info => $call->{info}); + $BODY->param(ETA => $call->{landing_tick}-$self->{TICK}); + $BODY->param(Info => escapeHTML $call->{info}); $BODY->param(DC => $call->{dc}); if ($call->{covered}){ $BODY->param(Cover => 'Uncover'); @@ -151,13 +144,13 @@ sub render { my $ships = $DBH->prepare('SELECT ship,amount FROM fleet_ships WHERE fleet = ?'); $fleets->execute($call->{member},$call->{landing_tick},$call->{landing_tick}); my @fleets; - my $i = 0; while (my $fleet = $fleets->fetchrow_hashref){ if ($fleet->{back} == $call->{landing_tick}){ $fleet->{Fleetcatch} = 1; } $ships->execute($fleet->{id}); my @ships; + my $i = 0; while (my $ship = $ships->fetchrow_hashref){ $i++; $ship->{ODD} = $i % 2; @@ -168,6 +161,27 @@ sub render { } $BODY->param(Fleets => \@fleets); + + $fleets = $DBH->prepare(q{ + SELECT username, id,back - (landing_tick + eta - 1) AS recalled FROM fleets f JOIN users u USING (uid) WHERE target = $1 and landing_tick = $2 + }); + $fleets->execute($call->{planet},$call->{landing_tick}) or $ND::ERROR .= p $DBH->errstr; + my @defenders; + while (my $fleet = $fleets->fetchrow_hashref){ + $ships->execute($fleet->{id}); + my @ships; + my $i = 0; + while (my $ship = $ships->fetchrow_hashref){ + $i++; + $ship->{ODD} = $i % 2; + push @ships,$ship; + } + $fleet->{Ships} = \@ships; + delete $fleet->{id}; + push @defenders, $fleet; + } + $BODY->param(Defenders => \@defenders); + my $attackers = $DBH->prepare(q{ SELECT coords(p.x,p.y,p.z), p.planet_status, p.race,i.eta,i.amount,i.fleet,i.shiptype,p.relationship,p.alliance,i.id FROM incomings i @@ -176,7 +190,7 @@ sub render { ORDER BY p.x,p.y,p.z}); $attackers->execute($call->{id}); my @attackers; - $i = 0; + my $i = 0; while(my $attacker = $attackers->fetchrow_hashref){ $i++; $attacker->{ODD} = $i % 2; @@ -202,7 +216,7 @@ sub render { SELECT c.id, coords(p.x,p.y,p.z), u.defense_points, c.landing_tick, c.dc, TRIM('/' FROM concat(p2.race||' /')) AS race, TRIM('/' FROM concat(i.amount||' /')) AS amount, TRIM('/' FROM concat(i.eta||' /')) AS eta, TRIM('/' FROM concat(i.shiptype||' /')) AS shiptype, - TRIM('/' FROM concat(c.landing_tick - tick() ||' /')) AS curreta, + (c.landing_tick - tick()) AS curreta, TRIM('/' FROM concat(p2.alliance ||' /')) AS alliance, TRIM('/' FROM concat(coords(p2.x,p2.y,p2.z) ||' /')) AS attackers FROM calls c @@ -217,7 +231,7 @@ sub render { $query->execute or $error .= $DBH->errstr; my @calls; my $i = 0; - my $tick = $ND::TICK; + my $tick = $self->{TICK}; while (my $call = $query->fetchrow_hashref){ if ($call->{defense_points} < $minpoints){ $call->{DefPrio} = 'LowestPrio'; @@ -231,6 +245,7 @@ sub render { push @calls,{}; $i = 0; } + $call->{attackers} =~ s{(\d+:\d+:\d+)}{$1}g; $call->{dc} = 'Hostile' unless defined $call->{dc}; $i++; $call->{ODD} = $i % 2;