]> ruin.nu Git - ndwebbie.git/blobdiff - lib/NDWeb/Controller/Raids.pm
Update calc links for new structure
[ndwebbie.git] / lib / NDWeb / Controller / Raids.pm
index 6b4f16c3081a96527a4c89284af2035ed2ea5f16..ef7127742b481ab973f5383e01946455d06ce39b 100644 (file)
@@ -6,7 +6,6 @@ use parent 'Catalyst::Controller';
 use feature ':5.10';
 
 use POSIX qw/floor pow/;
-use List::Util qw/min/;
 use NDWeb::Include;
 use ND::Include;
 
@@ -110,12 +109,12 @@ sub view : Local {
        $c->stash(raid => $raid->{id});
        my $planet;
        if ($c->user->planet){
-               my $query = $dbh->prepare("SELECT value, score,x,y FROM current_planet_stats WHERE id = ?");
+               my $query = $dbh->prepare(q{SELECT value, score,x,y FROM current_planet_stats WHERE pid = ?});
                $planet = $dbh->selectrow_hashref($query,undef,$c->user->planet);
        }
        $c->stash(message => parseMarkup($raid->{message}));
        $c->stash(landingtick => $raid->{tick});
-       my $targetquery = $dbh->prepare(q{SELECT r.id, r.planet, size, score, value
+       my $targetquery = $dbh->prepare(q{SELECT r.id, pid AS planet, size, score, value
                , p.x,p.y,p.z, race
                , p.value - p.size*200 -
                        COALESCE(ps.metal+ps.crystal+ps.eonium,0)/150 -
@@ -128,9 +127,9 @@ sub view : Local {
                ,amps, distorters, light_fac, medium_fac, heavy_fac
                ,hulls, waves
                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_development_scans ds ON p.id = ds.planet
+                       JOIN raid_targets r USING (pid)
+                       LEFT OUTER JOIN current_planet_scans ps USING (pid)
+                       LEFT OUTER JOIN current_development_scans ds USING (pid)
                WHERE r.raid = $1
                        AND NOT COALESCE(p.x = $2 AND p.y = $3,False)
                ORDER BY size});
@@ -150,7 +149,7 @@ sub view : Local {
                my $unitscans = $dbh->prepare(q{
 SELECT DISTINCT ON (name) fid, name, tick, amount
 FROM fleets
-WHERE planet = ?
+WHERE pid = ?
        AND mission = 'Full fleet'
 GROUP BY fid,tick,name,amount
 ORDER BY name,tick DESC
@@ -223,7 +222,12 @@ sub edit : Local {
 
        $c->stash(errors => $c->flash->{errors});
 
-       my $groups = $dbh->prepare(q{SELECT g.gid,g.groupname,raid FROM groups g LEFT OUTER JOIN (SELECT gid,raid FROM raid_access WHERE raid = ?) AS ra ON g.gid = ra.gid WHERE g.attack});
+       my $groups = $dbh->prepare(q{
+SELECT g.gid,g.groupname,raid
+FROM groups g
+       LEFT OUTER JOIN (SELECT gid,raid FROM raid_access WHERE raid = ?) AS ra USING (gid)
+WHERE gid IN (SELECT gid FROM group_roles WHERE role = 'attack_menu')
+               });
        $groups->execute($raid ? $raid->{id} : undef);
 
        my @addgroups;
@@ -247,22 +251,22 @@ sub edit : Local {
        }
 
        my $targetquery = $dbh->prepare(qq{SELECT r.id,coords(x,y,z),comment,size
-               ,score,value,race,planet_status,relationship,r.planet, s.scans
+               ,score,value,race,planet_status,relationship,pid AS planet, s.scans
                ,COALESCE(max(rc.wave),0) AS waves
                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
-                               FROM ( SELECT DISTINCT ON (planet,type) planet,scan_id,type, tick
+                       JOIN current_planet_stats p USING (pid)
+                       LEFT OUTER JOIN ( SELECT pid, array_agg(s::text) AS scans
+                               FROM ( SELECT DISTINCT ON (pid,type) pid,scan_id,type, tick
                                        FROM scans
                                        WHERE tick > tick() - 24
-                                       ORDER BY planet,type ,tick DESC
+                                       ORDER BY pid,type ,tick DESC
                                        ) s
-                               GROUP BY planet
-                       ) s ON s.planet = r.planet
+                               GROUP BY pid
+                       ) s USING (pid)
                        LEFT OUTER JOIN raid_claims rc ON r.id = rc.target
                WHERE r.raid = ?
                GROUP BY r.id,x,y,z,comment,size,score,value,race
-                       ,planet_status,relationship,comment,r.planet, s.scans
+                       ,planet_status,relationship,comment,pid, s.scans
                        ,sizerank,scorerank,xprank,valuerank
                ORDER BY $order
                });
@@ -312,24 +316,19 @@ sub postraidupdate : Local {
 
        $c->forward('log',[$raid, 'BC updated raid']);
 
-       my $groups = $dbh->prepare(q{SELECT gid,groupname FROM groups WHERE attack});
-       my $delgroup = $dbh->prepare(q{DELETE FROM raid_access WHERE raid = ? AND gid = ?});
-       my $addgroup = $dbh->prepare(q{INSERT INTO raid_access (raid,gid) VALUES(?,?)});
+       my $delgroups = $dbh->prepare(q{DELETE FROM raid_access WHERE raid = $1 AND gid = ANY($2)});
+       my $addgroups = $dbh->prepare(q{INSERT INTO raid_access (raid,gid) VALUES($1,unnest($2::text[]))});
 
-       $groups->execute();
-       while (my $group = $groups->fetchrow_hashref){
-               my $query;
-               next unless defined $c->req->param($group->{gid});
-               my $command = $c->req->param($group->{gid});
-               if ( $command eq 'remove'){
-                       $query = $delgroup;
-               }elsif($command eq 'add'){
-                       $query = $addgroup;
-               }
-               if ($query){
-                       $query->execute($raid,$group->{gid});
-                       $c->forward('log',[$raid, "BC '$command' access for $group->{gid} ($group->{groupname})"]);
-               }
+       if ($c->req->param('add_group')){
+               my @groups = $c->req->param('add_group');
+               warn "GROUPS!!!!: @groups";
+               $addgroups->execute($raid,\@groups);
+               $c->forward('log',[$raid, "BC added access to groups: @groups"]);
+       }
+       if ($c->req->param('remove_group')){
+               my @groups = $c->req->param('remove_group');
+               $delgroups->execute($raid,\@groups);
+               $c->forward('log',[$raid, "BC removed access for groups: @groups"]);
        }
        $dbh->commit;
 
@@ -344,8 +343,8 @@ sub postaddtargets : Local {
        $sizelimit = -1 unless $sizelimit;
 
        my $targets = $c->req->param('targets');
-       my $addtarget = $dbh->prepare(qq{INSERT INTO raid_targets(raid,planet) (
-               SELECT ?, id FROM current_planet_stats p
+       my $addtarget = $dbh->prepare(q{INSERT INTO raid_targets(raid,pid) (
+               SELECT ?, pid FROM current_planet_stats p
                WHERE x = ? AND y = ? AND COALESCE(z = ?,TRUE)
                AND p.size > ?
                )});
@@ -367,13 +366,13 @@ sub postaddtargets : Local {
                        push @errors, $@;
                }
        }
-       if ($c->req->param('alliance') =~ /^(\d+)$/ && $1 != 1){
-               my $addtarget = $dbh->prepare(qq{INSERT INTO raid_targets(raid,planet) (
-                       SELECT ?,id FROM current_planet_stats p WHERE alliance_id = ? AND p.size > ?)
+       if ($c->req->param('alliance') =~ /^(\d+)$/ && $1 ne 'NewDawn'){
+               my $addtarget = $dbh->prepare(q{INSERT INTO raid_targets(raid,pid) (
+                       SELECT ?,pid FROM current_planet_stats p WHERE aid= ? AND p.size > ?)
                        });
                eval {
                        $addtarget->execute($raid,$1,$sizelimit);
-                       $c->forward('log',[$raid,"BC adding alliance $1 to raid"]);
+                       $c->forward('log',[$raid,"BC adding alliance '$1' to raid"]);
                };
                if ($@ =~ /duplicate key value violates unique constraint "raid_targets_raid_key"/){
                        push @errors, "A planet from this alliance has already been added to the raid,"
@@ -524,18 +523,18 @@ sub postcreate : Local {
                my @gals = $c->req->param('gal');
                my @targets = $c->req->param('target');
 
-               my $addtarget = $dbh->prepare(q{INSERT INTO raid_targets(raid,planet) (
-                       SELECT $1,id FROM current_planet_stats p WHERE (planet_status IN ('','Hostile')
+               my $addtarget = $dbh->prepare(q{INSERT INTO raid_targets(raid,pid) (
+                       SELECT $1,pid FROM current_planet_stats p WHERE (planet_status IN ('','Hostile')
                                AND (relationship IS NULL OR relationship IN ('','Hostile')))
-                               AND (id = ANY ($2) OR ( size > $4 AND (x,y) IN (
-                                       SELECT x,y FROM current_planet_stats WHERE id = ANY ($3)))
+                               AND (pid = ANY ($2) OR ( size > $4 AND (x,y) IN (
+                                       SELECT x,y FROM current_planet_stats WHERE pid = ANY ($3)))
                                )
                        )
                });
                $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)}
+       $dbh->do(q{INSERT INTO raid_access (raid,gid) VALUES(?,'M')}
                ,undef,$raid);
        $dbh->commit;
 
@@ -560,7 +559,7 @@ sub targetlist : Local {
        $order = "p.$order" if $order =~ /rank$/;
 
        my $query = $dbh->prepare(q{
-SELECT p.id, coords(p.x,p.y,p.z),p.x,p.y,p.alliance, p.score, p.value, p.size, p.xp,nfvalue, nfvalue - sum(pa.value) AS nfvalue2, p.race
+SELECT p.pid AS id, coords(p.x,p.y,p.z),p.x,p.y,p.alliance, p.score, p.value, p.size, p.xp,nfvalue, nfvalue - sum(pa.value) AS nfvalue2, p.race
 FROM current_planet_stats p
        JOIN (SELECT g.x,g.y, sum(p.value) AS nfvalue
                FROM galaxies g join current_planet_stats p on g.x = p.x AND g.y = p.y
@@ -568,13 +567,12 @@ FROM current_planet_stats p
                        AND (planet_status IN ('','Hostile')
                                AND (relationship IS NULL OR relationship IN ('','Hostile')))
                GROUP BY g.x,g.y
-       ) g ON p.x = g.x AND p.y = g.y
-       JOIN current_planet_stats pa ON pa.x = g.x AND pa.y = g.y
+       ) g USING (x,y)
+       JOIN current_planet_stats pa USING (x,y,aid)
 WHERE p.x <> 200
-       AND p.alliance_id = ANY ($1)
-       AND pa.alliance_id = ANY ($1)
+       AND aid = ANY ($1)
        AND p.relationship IN ('','Hostile')
-GROUP BY p.id, p.x,p.y,p.z,p.alliance, p.score, p.value, p.size, p.xp, nfvalue,p.race
+GROUP BY p.pid, p.x,p.y,p.z,p.alliance, p.score, p.value, p.size, p.xp, nfvalue,p.race
        ,p.scorerank,p.valuerank,p.sizerank,p.xprank
 ORDER BY
                } . $order);
@@ -594,18 +592,18 @@ sub targetcalc : Local {
        my $dbh = $c->model;
 
        $target = $dbh->selectrow_hashref(q{
-SELECT p.id,p.value,p.score,metal_roids, crystal_roids, eonium_roids, ds.total, race
+SELECT pid,p.value,p.score,metal_roids, crystal_roids, eonium_roids, ds.total, race
 FROM raids r
        JOIN raid_targets rt ON r.id = rt.raid
-       JOIN current_planet_stats p ON rt.planet = p.id
-       LEFT OUTER JOIN current_planet_scans ps ON p.id = ps.planet
-       LEFT OUTER JOIN current_development_scans ds ON p.id = ds.planet
+       JOIN current_planet_stats p USING (pid)
+       LEFT OUTER JOIN current_planet_scans ps USING (pid)
+       LEFT OUTER JOIN current_development_scans ds USING (pid)
 WHERE rt.id = ? AND r.open AND not r.removed
        AND r.id IN (SELECT raid FROM raid_access NATURAL JOIN groupmembers WHERE uid = ?)
                },undef,$target,$c->user->id);
 
        my $planet = $dbh->selectrow_hashref(q{
-SELECT score,value FROM current_planet_stats WHERE id = $1
+SELECT score,value FROM current_planet_stats WHERE pid = $1
                },undef,$c->user->planet);
 
        my %races = (Ter => 1, Cat => 2, Xan => 3, Zik => 4, Etd => 5);
@@ -623,7 +621,7 @@ SELECT score,value FROM current_planet_stats WHERE id = $1
 
        my $fleets = $dbh->prepare(q{
 SELECT DISTINCT ON (name) name, tick, fid FROM fleets
-WHERE planet = $1 AND mission = 'Full fleet'
+WHERE pid = $1 AND mission = 'Full fleet'
 ORDER BY name ASC, tick DESC
                });
        my $ships = $dbh->prepare(q{
@@ -633,7 +631,7 @@ WHERE fid = $1
 
        for ('def','att'){
                my $planet = $c->user->planet;
-               $planet = $target->{id} if /^def/;
+               $planet = $target->{pid} if /^def/;
                $fleets->execute($planet);
                my $nrfleets = 0;
                my $tick = 0;
@@ -657,13 +655,13 @@ WHERE fid = $1
 sub listAlliances : Private {
        my ($self, $c) = @_;
        my @alliances;
-       my $query = $c->model->prepare(q{SELECT id,name FROM alliances
+       my $query = $c->model->prepare(q{SELECT aid AS id,alliance AS name FROM alliances
                WHERE relationship IN ('','Hostile')
-                       AND id IN (SELECT alliance_id FROM planets)
-                ORDER BY LOWER(name)
+                       AND alliance IN (SELECT alliance FROM planets)
+                ORDER BY LOWER(alliance)
                });
        $query->execute;
-       push @alliances,{id => -1, name => ''};
+       push @alliances,{id => '', name => ''};
        while (my $ally = $query->fetchrow_hashref){
                push @alliances,$ally;
        }