]> ruin.nu Git - ndwebbie.git/blobdiff - ND/Web/Pages/EditRaid.pm
possible to hide targets below bash limits, if we chose to
[ndwebbie.git] / ND / Web / Pages / EditRaid.pm
index f7f8a9fbc640a57cc03f8582da517f04a748c40b..4ed3981c9fe33bba91e6d8a786d411719778ad52 100644 (file)
@@ -23,27 +23,19 @@ use ND::Include;
 use CGI qw/:standard/;
 use ND::Web::Include;
 
-$ND::PAGES{editRaid} = {parse => \&parse, process => \&process, render=> \&render};
+use base qw/ND::Web::XMLPage/;
 
-sub parse {
-       my ($uri) = @_;
-       #if ($uri =~ m{^/.*/(\w+)$}){
-       #       param('list',$1);
-       #}
-}
-
-sub process {
+$ND::Web::Page::PAGES{editRaid} = __PACKAGE__;
 
-}
+sub render_body {
+       my $self = shift;
+       my ($BODY) = @_;
+       $self->{TITLE} = 'Create/Edit Raids';
+       my $DBH = $self->{DBH};
 
-sub render {
-       my ($DBH,$BODY) = @_;
+       return $self->noAccess unless $self->isBC;
        my $error;
 
-       $ND::TEMPLATE->param(TITLE => 'Create/Edit Raids');
-
-       return $ND::NOACCESS unless isBC();
-
        my @alliances = alliances();
        $BODY->param(Alliances => \@alliances);
 
@@ -88,7 +80,7 @@ sub render {
                                ,undef,escapeHTML(param('comment')),param('target'))
                                or $error .= p($DBH->errstr);
 
-               }elsif (param('cmd') eq 'change'){
+               }elsif (param('cmd') eq 'change' || param('cmd') eq 'submit'){
                        $DBH->begin_work;
                        my $message = escapeHTML(param('message'));
                        $raid->{message} = $message;
@@ -111,7 +103,7 @@ sub render {
                                SELECT ?, id FROM current_planet_stats p WHERE x = ? AND y = ? AND COALESCE(z = ?,TRUE) $sizelimit)});
                        while ($targets =~ m/(\d+):(\d+)(?::(\d+))?/g){
                                unless ($addtarget->execute($raid->{id},$1,$2,$3)){
-                                       $error .= "<p> Something went wrong: ".$DBH->errstr."</p>";
+                                       $error .= "<p> Something went wrong when adding $1:$2".($3 ? ":$3" : '').": ".$DBH->errstr."</p>";
                                }
                        }
                        if (param('alliance') =~ /^(\d+)$/ && $1 != 1){
@@ -143,13 +135,25 @@ sub render {
                        unless ($DBH->commit){
                                $error .= "<p> Something went wrong: ".$DBH->errstr."</p>";
                        }
-               }
-       }
-       if ($raid && param('removeTarget')){
-               $error .= "test";
-               unless($DBH->do(q{DELETE FROM raid_targets WHERE raid = ? AND id = ?}
-                               ,undef,$raid->{id},param('removeTarget'))){
-                       $error .= "<p> Something went wrong: ".$DBH->errstr."</p>";
+               }elsif (param('cmd') eq 'targets'){
+                       $DBH->begin_work;
+                       my $comment = $DBH->prepare(q{UPDATE raid_targets SET comment = ? WHERE id = ?});
+                       my $unclaim =  $DBH->prepare(q{DELETE FROM raid_claims WHERE target = ? AND wave = ?});
+                       my $block = $DBH->prepare(q{INSERT INTO raid_claims (target,uid,wave) VALUES(?,-2,?)});
+                       my $remove = $DBH->prepare(q{DELETE FROM raid_targets WHERE raid = ? AND id = ?});
+                       for $_ (param()){
+                               if (/^comment:(\d+)$/){
+                                       $comment->execute(escapeHTML(param($_)),$1) or $error .= p($DBH->errstr);
+                               }elsif(/^unclaim:(\d+):(\d+)$/){
+                                       $unclaim->execute($1,$2) or $error .= p($DBH->errstr);
+                                       log_message $ND::UID,"BC unclaimed target $1 wave $2.";
+                               }elsif(/^block:(\d+):(\d+)$/){
+                                       $block->execute($1,$2) or $error .= p($DBH->errstr);
+                               }elsif(/^remove:(\d+)$/){
+                                       $remove->execute($raid->{id},$1) or $error .= p($DBH->errstr);
+                               }
+                       }
+                       $DBH->commit or $error .= p($DBH->errstr);
                }
        }
 
@@ -193,19 +197,62 @@ sub render {
                        $order = "$1 DESC";
                }
 
-               my $targetquery = $DBH->prepare(qq{SELECT r.id,coords(x,y,z),raid,comment,size,score,value,race,planet_status AS planetstatus,relationship,comment
+               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
                        FROM current_planet_stats p JOIN raid_targets r ON p.id = r.planet 
                        WHERE r.raid = ?
                        ORDER BY $order});
+               my $claims =  $DBH->prepare(qq{ SELECT username,launched FROM raid_claims
+                       NATURAL JOIN users WHERE target = ? AND wave = ?});
                $targetquery->execute($raid->{id}) or $error .= $DBH->errstr;
                my @targets;
                while (my $target = $targetquery->fetchrow_hashref){
+                       my @waves;
+                       for my $i (1 .. $raid->{waves}){
+                               $claims->execute($target->{id},$i);
+                               my $claimers;
+                               if ($claims->rows != 0){
+                                       my $owner = 0;
+                                       my @claimers;
+                                       while (my $claim = $claims->fetchrow_hashref){
+                                               $claim->{username} .= '*' if ($claim->{launched});
+                                               push @claimers,$claim->{username};
+                                       }
+                                       $claimers = join '/', @claimers;
+                               }
+                               push @waves,{Wave => $i, Claimers => $claimers};
+                       }
+                       $target->{waves} = \@waves;
+
+                       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});
+                       delete $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;
+                               }
+                               push @scans,{Scan => $scan->{scan}};
+                       }
+                       $target->{Scans} = \@scans;
                        push @targets,$target;
                }
                $BODY->param(Targets => \@targets);
        }else{
                $BODY->param(Waves => 3);
-               $BODY->param(LandingTick => $ND::TICK+12);
+               $BODY->param(LandingTick => $self->{TICK}+12);
        }
        $BODY->param(Error => $error);
        return $BODY;