]> ruin.nu Git - ndwebbie.git/blobdiff - lib/NDWeb/Controller/Raids.pm
Show timezone on defenders page
[ndwebbie.git] / lib / NDWeb / Controller / Raids.pm
index 67ce22fd91291986bcab7d7ce415313ac4954d0c..c6c1461520f16e50ca90102481a16ae2edac3d73 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 use parent 'Catalyst::Controller';
 
-use POSIX;
+use POSIX qw/floor pow/;
 use NDWeb::Include;
 use ND::Include;
 
@@ -110,9 +110,9 @@ sub view : Local {
                , p.x,p.y,p.z, race
                , p.value - p.size*200 -
                        COALESCE(ps.metal+ps.crystal+ps.eonium,0)/150 -
-                       COALESCE(ss.total ,(SELECT
+                       COALESCE(ds.total ,(SELECT
                                COALESCE(avg(total),0) FROM
-                               structure_scans)::int)*1500 AS fleetvalue
+                               current_development_scans)::int)*1500 AS fleetvalue
                ,(metal+crystal+eonium)/100 AS resvalue, comment
                , hidden, light, medium, heavy, metal, crystal, eonium
                ,metal_roids, crystal_roids, eonium_roids
@@ -121,15 +121,14 @@ sub view : Local {
                FROM current_planet_stats p
                        JOIN raid_targets r ON p.id = r.planet
                        LEFT OUTER JOIN current_planet_scans ps ON p.id = ps.planet
-                       LEFT OUTER JOIN current_structure_scans ss ON p.id = ss.planet
-                       LEFT OUTER JOIN current_tech_scans ts ON p.id = ts.planet
+                       LEFT OUTER JOIN current_development_scans ds ON p.id = ds.planet
                WHERE r.raid = $1
                        AND NOT COALESCE(p.x = $2 AND p.y = $3,False)
                ORDER BY size});
        $targetquery->execute($raid->{id},$planet->{x},$planet->{y});
        my @targets;
        while (my $target = $targetquery->fetchrow_hashref){
-               if ($planet){
+               if ($planet && $planet->{x}){
                        if ($planet->{x} == $target->{x}){
                                $target->{style} = 'incluster';
                        }
@@ -138,23 +137,22 @@ sub view : Local {
                        #next if ($target->{score}/$planet->{score} < 0.4) && ($target->{value}/$planet->{value} < 0.4);
                }
 
-               my $unitscans = $dbh->prepare(q{ 
-                       SELECT DISTINCT ON (name) i.id,i.name, i.tick, i.amount 
-                       FROM fleets i
-                       WHERE  i.uid = -1
-                               AND i.sender = ?
-                               AND i.mission = 'Full fleet'
-                       GROUP BY i.id,i.tick,i.name,i.amount
-                       ORDER BY name,i.tick DESC
+               my $unitscans = $dbh->prepare(q{
+SELECT DISTINCT ON (name) fid, name, tick, amount
+FROM fleets
+WHERE planet = ?
+       AND mission = 'Full fleet'
+GROUP BY fid,tick,name,amount
+ORDER BY name,tick DESC
                });
                $unitscans->execute($target->{planet});
                my $ships = $dbh->prepare(q{SELECT ship,amount FROM fleet_ships
-                       WHERE id = ? ORDER BY num
+                       WHERE fid = ? ORDER BY num
                });
                my @missions;
                while (my $mission = $unitscans->fetchrow_hashref){
                        my @ships;
-                       $ships->execute($mission->{id});
+                       $ships->execute($mission->{fid});
                        while (my $ship = $ships->fetchrow_hashref){
                                push @ships,$ship;
                        }
@@ -171,7 +169,7 @@ sub view : Local {
                        my $roids = floor(0.25*$size);
                        $size -= $roids;
                        my $xp = 0;
-                       if ($planet){
+                       if ($planet && $planet->{score}){
                                $xp = pa_xp($roids,$planet->{score},$planet->{value},$target->{score},$target->{value});
                        }
                        push @roids,{wave => $i, roids => $roids, xp => $xp};
@@ -193,7 +191,7 @@ sub view : Local {
                        $target->{resvalue} = floor($target->{resvalue}/$num)*$num;
                }
                $target->{comment} = parseMarkup($target->{comment}) if ($target->{comment});
-               $target->{hidden} = int($target->{hidden} / 100);
+               $target->{hidden} = int($target->{hidden} / 100) if $target->{hidden};
 
                push @targets,$target;
        }
@@ -238,7 +236,8 @@ sub edit : Local {
                $order .= 'p.x,p.y,p.z';
        }
 
-       my $targetquery = $dbh->prepare(qq{SELECT r.id,coords(x,y,z),comment,size,score,value,race,planet_status AS planetstatus,relationship,comment,r.planet, s.scans
+       my $targetquery = $dbh->prepare(qq{SELECT r.id,coords(x,y,z),comment,size
+               ,score,value,race,planet_status,relationship,comment,r.planet, s.scans
                FROM raid_targets r
                        JOIN current_planet_stats p ON p.id = r.planet
                        LEFT OUTER JOIN ( SELECT planet, array_accum(s::text) AS scans
@@ -385,6 +384,7 @@ sub posttargetupdates : Local {
                WHERE target = ? AND wave = ? AND uid = -2
                });
        my $remove = $dbh->prepare(q{DELETE FROM raid_targets WHERE raid = ? AND id = ?});
+
        for $_ ($c->req->param()){
                if (/^comment:(\d+)$/){
                        $comment->execute(html_escape $c->req->param($_),$1);
@@ -427,51 +427,61 @@ sub posttargetupdates : Local {
 sub open : Local {
        my ($self, $c, $raid) = @_;
 
+       $c->model->begin_work;
        $c->model->do(q{UPDATE raids SET open = TRUE, removed = FALSE WHERE id = ?}
                ,undef,$raid);
        $c->forward('log',[$raid, "BC opened raid"]);
+       $c->model->commit;
 
-       $c->res->redirect($c->req->referer);
+       $c->forward('/redirect');
 }
 
 sub close : Local {
        my ($self, $c, $raid) = @_;
 
+       $c->model->begin_work;
        $c->model->do(q{UPDATE raids SET open = FALSE WHERE id = ?}
                ,undef,$raid);
        $c->forward('log',[$raid, "BC closed raid"]);
+       $c->model->commit;
 
-       $c->res->redirect($c->req->referer);
+       $c->forward('/redirect');
 }
 
 sub remove : Local {
        my ($self, $c, $raid) = @_;
 
+       $c->model->begin_work;
        $c->model->do(q{UPDATE raids SET open = FALSE, removed = TRUE WHERE id = ?}
                ,undef,$raid);
        $c->forward('log',[$raid, "BC removed raid"]);
+       $c->model->commit;
 
-       $c->res->redirect($c->req->referer);
+       $c->forward('/redirect');
 }
 
 sub showcoords : Local {
        my ($self, $c, $raid) = @_;
 
+       $c->model->begin_work;
        $c->model->do(q{UPDATE raids SET released_coords = TRUE WHERE id = ?}
                ,undef,$raid);
        $c->forward('log',[$raid, "BC released coords"]);
+       $c->model->commit;
 
-       $c->res->redirect($c->req->referer);
+       $c->forward('/redirect');
 }
 
 sub hidecoords : Local {
        my ($self, $c, $raid) = @_;
 
+       $c->model->begin_work;
        $c->model->do(q{UPDATE raids SET released_coords = FALSE WHERE id = ?}
                ,undef,$raid);
        $c->forward('log',[$raid, "BC hid coords"]);
+       $c->model->commit;
 
-       $c->res->redirect($c->req->referer);
+       $c->forward('/redirect');
 }
 
 sub create : Local {
@@ -485,6 +495,7 @@ sub postcreate : Local {
        my ($self, $c) = @_;
        my $dbh = $c->model;
 
+       $dbh->begin_work;
        my $query = $dbh->prepare(q{INSERT INTO raids (tick,waves,message) VALUES(?,?,?) RETURNING (id)});
        $query->execute($c->req->param('tick'),$c->req->param('waves')
                ,html_escape $c->req->param('message'));
@@ -506,6 +517,9 @@ sub postcreate : Local {
                $addtarget->execute($raid,\@targets,\@gals,$c->req->param('sizelimit'));
                $c->forward('log',[$raid,"BC added planets (@targets) and the gals for (@gals)"]);
        }
+       $dbh->do(q{INSERT INTO raid_access (raid,gid) VALUES(?,2)}
+               ,undef,$raid);
+       $dbh->commit;
 
        $c->res->redirect($c->uri_for('edit',$raid));
 }