X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=ND%2FWeb%2FPages%2FEditRaid.pm;h=4ed3981c9fe33bba91e6d8a786d411719778ad52;hb=103c3c2ed9ccd4f5ef95a1f8ea7f700a7a38e2cd;hp=8b46508bb63d06d681b556f07a0f1428dfcafd5a;hpb=d70994d68636adec6d1a4e2f7bacf0e418a2493a;p=ndwebbie.git diff --git a/ND/Web/Pages/EditRaid.pm b/ND/Web/Pages/EditRaid.pm index 8b46508..4ed3981 100644 --- a/ND/Web/Pages/EditRaid.pm +++ b/ND/Web/Pages/EditRaid.pm @@ -23,7 +23,7 @@ use ND::Include; use CGI qw/:standard/; use ND::Web::Include; -our @ISA = qw/ND::Web::XMLPage/; +use base qw/ND::Web::XMLPage/; $ND::Web::Page::PAGES{editRaid} = __PACKAGE__; @@ -80,7 +80,7 @@ sub render_body { ,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; @@ -103,7 +103,7 @@ sub render_body { 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 .= "

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

"; + $error .= "

Something went wrong when adding $1:$2".($3 ? ":$3" : '').": ".$DBH->errstr."

"; } } if (param('alliance') =~ /^(\d+)$/ && $1 != 1){ @@ -135,13 +135,25 @@ sub render_body { unless ($DBH->commit){ $error .= "

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

"; } - } - } - if ($raid && param('removeTarget')){ - $error .= "test"; - unless($DBH->do(q{DELETE FROM raid_targets WHERE raid = ? AND id = ?} - ,undef,$raid->{id},param('removeTarget'))){ - $error .= "

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

"; + }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); } } @@ -185,13 +197,56 @@ sub render_body { $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{}{}; + } + if ($type eq 'Planet'){ + $target->{PlanetScan} = $scan->{scan}; + next; + } + push @scans,{Scan => $scan->{scan}}; + } + $target->{Scans} = \@scans; push @targets,$target; } $BODY->param(Targets => \@targets);