]> ruin.nu Git - ndwebbie.git/blobdiff - NDWeb/Pages/Raids.pm
Converted calls page, also using jquery.
[ndwebbie.git] / NDWeb / Pages / Raids.pm
index 139b76204e6351f9b9e3059c2148248f5ec1b12b..31be782d6b6000cb8efcdd66cf7faf29ebf71ace 100644 (file)
@@ -119,13 +119,18 @@ sub render_body {
                my $target = param('target');
                my $wave = param('wave');
 
-               my $findtarget = $DBH->prepare("SELECT rt.id FROM raid_targets rt NATURAL JOIN raid_access ra NATURAL JOIN groupmembers where uid = ? AND id = ?");
+               $DBH->begin_work;
+               my $findtarget = $DBH->prepare(q{SELECT rt.id FROM raid_targets rt 
+                       NATURAL JOIN raid_access ra NATURAL JOIN groupmembers 
+                       WHERE uid = ? AND id = ?
+                       FOR UPDATE
+               });
                my $result = $DBH->selectrow_array($findtarget,undef,$ND::UID,$target);
                if ($result != $target){
+                       $DBH->rollback;
                        return $self->noAccess; 
                }
 
-               $DBH->begin_work;
                if (param('cmd') eq 'Claim'){
                        my $claims = $DBH->prepare(qq{SELECT username FROM raid_claims NATURAL JOIN users WHERE target = ? AND wave = ?});
                        $claims->execute($target,$wave);
@@ -192,15 +197,25 @@ sub render_body {
                }
                $BODY->param(Message => parseMarkup($raid->{message}));
                $BODY->param(LandingTick => $raid->{tick});
-               my $targetquery = $DBH->prepare(qq{SELECT r.id, r.planet, size, score, value, p.x,p.y,p.z, race, p.value - p.size*200 -coalesce(c.metal+c.crystal+c.eonium,0)/150 - coalesce(c.structures,(SELECT avg(structures) FROM covop_targets)::int)*1500 AS fleetvalue,(c.metal+c.crystal+c.eonium)/100 AS resvalue, comment
+               my $targetquery = $DBH->prepare(qq{SELECT r.id, r.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 - 
+                               COALESCE(ss.total ,(SELECT
+                                       COALESCE(avg(total),0) FROM
+                                       structure_scans)::int)*1500 AS fleetvalue
+                       ,(metal+crystal+eonium)/100 AS resvalue, comment
+                       , hidden, light, medium, heavy
                        FROM current_planet_stats p 
                        JOIN raid_targets r ON p.id = r.planet 
-                       LEFT OUTER JOIN covop_targets c ON p.id = c.planet
+                       LEFT OUTER JOIN planet_scans ps ON p.id = ps.planet
+                       LEFT OUTER JOIN structure_scans ss ON p.id = ss.planet
                        WHERE r.raid = ?
                        $noingal
                        ORDER BY size});
                $targetquery->execute($raid->{id});
                my @targets;
+               my %production = (0 => 'None', 35 => 'Light', 65 => 'Medium', 100 => 'High');
                while (my $target = $targetquery->fetchrow_hashref){
                        my %target;
                        if ($planet){
@@ -214,9 +229,9 @@ sub render_body {
                        $target{Id} = $target->{id};
                        $target{Race} = $target->{race};
                        my $num = pow(10,length($target->{score})-2);
-                       $target{Score} = ceil($target->{score}/$num)*$num;
+                       $target{Score} = "Hidden"; #ceil($target->{score}/$num)*$num;
                        $num = pow(10,length($target->{value})-2);
-                       $target{Value} = ceil($target->{value}/$num)*$num;
+                       $target{Value} = "Hidden"; #ceil($target->{value}/$num)*$num;
                        $num = pow(10,length($target->{size})-2);
                        $target{Size} = floor($target->{size}/$num)*$num;
                        $num = pow(10,length($target->{fleetvalue})-2);
@@ -226,31 +241,50 @@ sub render_body {
                                $target{ResValue} = floor($target->{resvalue}/$num)*$num;
                        }
                        $target{comment} = parseMarkup($target->{comment}) if ($target->{comment});
+                       
+                       $target{Hidden} = int($target->{hidden} / 100);
+                       $target{Light} = $production{$target->{light}};
+                       $target{Medium} = $production{$target->{medium}};
+                       $target{Heavy} = $production{$target->{heavy}};
 
-                       my $scans = $DBH->prepare(q{SELECT DISTINCT ON (type) type, tick, scan FROM scans 
-                               WHERE planet = ? AND type ~ 'Unit|Planet|Advanced Unit|.* Analysis' AND tick + 24 > tick() AND scan is not null
-                               GROUP BY type, tick, scan ORDER BY type ,tick DESC});
-                       $scans->execute($target->{planet});
-                       my %scans;
-                       while (my $scan = $scans->fetchrow_hashref){
-                               $scans{$scan->{type}} = $scan;
-                       }
-
-                       my @scans;
-                       for my $type ('Planet','Unit','Advanced Unit','Surface Analysis','Technology Analysis'){
-                               next unless exists $scans{$type};
-                               my $scan = $scans{$type};
-                               if ($self->{TICK} - $scan->{tick} > 5){
-                                       $scan->{scan} =~ s{<table( cellpadding="\d+")?>}{<table class="old">};
-                               }
-                               if ($type eq 'Planet'){
-                                       $target{PlanetScan} = $scan->{scan};
-                                       next;
+                       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
+                       });
+                       $unitscans->execute($target->{planet}) or warn $DBH->errstr;
+                       my $ships = $DBH->prepare(q{SELECT ship,amount FROM fleet_ships
+                               WHERE id = ? ORDER BY num
+                       });
+                       my @missions;
+                       while (my $mission = $unitscans->fetchrow_hashref){
+                               my @ships;
+                               $ships->execute($mission->{id});
+                               while (my $ship = $ships->fetchrow_hashref){
+                                       push @ships,$ship;
                                }
-                               push @scans,{Scan => $scan->{scan}};
+                               push @ships, {ship => 'No', amount => 'ships'} if @ships == 0;
+                               $mission->{ships} = \@ships;
+                               $mission->{amount} =~ s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g; #Add comma for ever 3 digits, i.e. 1000 => 1,000
+                               delete $mission->{id};
+                               push @missions,$mission;
                        }
-                       $target{Scans} = \@scans;
+                       $target{missions} = \@missions;
 
+                       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 AND rid in (1,2,3,4,5,6,9,10,14,15,16,17,18)
+                               ORDER BY rid,tick DESC
+                       });
+                       $query->execute($target->{planet});
+                       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
+                               $target{$data->{category}.$data->{name}} = $data->{amount};
+                       }
 
                        my @roids;
                        my @claims;
@@ -260,7 +294,7 @@ sub render_body {
                                $size -= $roids;
                                my $xp = 0;
                                if ($planet){
-                                       $xp = pa_xp($roids,$planet->{score},$planet->{value},$target{Score},$target{Value});
+                                       $xp = pa_xp($roids,$planet->{score},$planet->{value},$target->{score},$target->{value});
                                }
                                push @roids,{Wave => $i, Roids => $roids, XP => $xp};
                                if ($self->{AJAX}){