+++ /dev/null
-#**************************************************************************
-# Copyright (C) 2006 by Michael Andreen <harvATruinDOTnu> *
-# *
-# This program is free software; you can redistribute it and/or modify *
-# it under the terms of the GNU General Public License as published by *
-# the Free Software Foundation; either version 2 of the License, or *
-# (at your option) any later version. *
-# *
-# This program is distributed in the hope that it will be useful, *
-# but WITHOUT ANY WARRANTY; without even the implied warranty of *
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-# GNU General Public License for more details. *
-# *
-# You should have received a copy of the GNU General Public License *
-# along with this program; if not, write to the *
-# Free Software Foundation, Inc., *
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
-#**************************************************************************/
-package NDWeb::Pages::EditRaid;
-use strict;
-use warnings FATAL => 'all';
-use ND::Include;
-use CGI qw/:standard/;
-use NDWeb::Include;
-
-use base qw/NDWeb::XMLPage/;
-
-$NDWeb::Page::PAGES{editRaid} = __PACKAGE__;
-
-sub render_body {
- my $self = shift;
- my ($BODY) = @_;
- $self->{TITLE} = 'Create/Edit Raids';
- my $DBH = $self->{DBH};
-
- return $self->noAccess unless $self->isBC;
- my $error;
-
- my @alliances = alliances();
- $BODY->param(Alliances => \@alliances);
-
- my $raid;
- if (defined param 'raid' and param('raid') =~ /^(\d+)$/){
- my $query = $DBH->prepare(q{SELECT id,tick,waves,message,released_coords,open FROM raids WHERE id = ?});
- $raid = $DBH->selectrow_hashref($query,undef,$1);
- }
- if (defined param('cmd') && param('cmd') eq 'submit'){
- my $query = $DBH->prepare(q{INSERT INTO raids (tick,waves,message) VALUES(?,?,'')});
- if ($query->execute(param('tick'),param('waves'))){
- $raid = $DBH->last_insert_id(undef,undef,undef,undef,"raids_id_seq");
- my $query = $DBH->prepare(q{SELECT id,tick,waves,message,released_coords,open FROM raids WHERE id = ?});
- $raid = $DBH->selectrow_hashref($query,undef,$raid);
- }else{
- $error .= "<p> Something went wrong: ".$DBH->errstr."</p>";
- }
- }
-
- if ($raid && defined param('cmd')){
- if (param('cmd') eq 'remove'){
- $DBH->do(q{UPDATE raids SET open = FALSE, removed = TRUE WHERE id = ?},undef,$raid->{id});
- }elsif (param('cmd') eq 'Open'){
- if($DBH->do(q{UPDATE raids SET open = TRUE, removed = FALSE WHERE id = ?},undef,$raid->{id})){
- $raid->{open} = 1;
- $raid->{removed} = 0;
- }
- }elsif (param('cmd') eq 'Close'){
- if ($DBH->do(q{UPDATE raids SET open = FALSE WHERE id = ?},undef,$raid->{id})){
- $raid->{open} = 0;
- }
- }elsif (param('cmd') eq 'showcoords'){
- if($DBH->do(q{UPDATE raids SET released_coords = TRUE WHERE id = ?},undef,$raid->{id})){
- $raid->{released_coords} = 1;
- }
- }elsif (param('cmd') eq 'hidecoords'){
- if($DBH->do(q{UPDATE raids SET released_coords = FALSE WHERE id = ?},undef,$raid->{id})){
- $raid->{released_coords} = 0;
- }
- }elsif (param('cmd') eq 'comment'){
- $DBH->do(q{UPDATE raid_targets SET comment = ? WHERE id = ?}
- ,undef,escapeHTML(param('comment')),param('target'))
- or $error .= p($DBH->errstr);
-
- }elsif (param('cmd') eq 'change' || param('cmd') eq 'submit'){
- $DBH->begin_work;
- my $message = escapeHTML(param('message'));
- $raid->{message} = $message;
- $raid->{waves} = param('waves');
- $raid->{tick} = param('tick');
- unless ($DBH->do(qq{UPDATE raids SET message = ?, tick = ?, waves = ? WHERE id = ?}
- ,undef,$message,param('tick'),param('waves'),$raid->{id})){
- $error .= "<p> Something went wrong: ".$DBH->errstr."</p>";
- }
- my $sizelimit = '';
- if (param('sizelimit') =~ /^(\d+)$/){
- $sizelimit = "AND p.size >= $1";
- unless ($DBH->do(qq{DELETE FROM raid_targets WHERE id IN (SELECT t.id FROM current_planet_stats p
- JOIN raid_targets t ON p.id = t.planet WHERE p.size < ? AND t.raid = ?)},undef,$1,$raid->{id})){
- $error .= "<p> Something went wrong: ".$DBH->errstr."</p>";
- }
- }
- my $targets = param('targets');
- my $addtarget = $DBH->prepare(qq{INSERT INTO raid_targets(raid,planet) (
- 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 when adding $1:$2".($3 ? ":$3" : '').": ".$DBH->errstr."</p>";
- }
- }
- if (param('alliance') =~ /^(\d+)$/ && $1 != 1){
- log_message $ND::UID,"BC adding alliance $1 to raid";
- my $addtarget = $DBH->prepare(qq{INSERT INTO raid_targets(raid,planet) (
- SELECT ?,id FROM current_planet_stats p WHERE alliance_id = ? $sizelimit)});
- unless ($addtarget->execute($raid->{id},$1)){
- $error .= "<p> Something went wrong: ".$DBH->errstr."</p>";
- }
- }
- my $groups = $DBH->prepare('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(?,?)});
- $groups->execute();
- while (my $group = $groups->fetchrow_hashref){
- my $query;
- next unless defined param $group->{gid};
- if (param($group->{gid}) eq 'remove'){
- $query = $delgroup;
- }elsif(param($group->{gid}) eq 'add'){
- $query = $addgroup;
- }
- if ($query){
- unless ($query->execute($raid->{id},$group->{gid})){
- $error .= "<p> Something went wrong: ".$DBH->errstr."</p>";
- }
- }
- }
- unless ($DBH->commit){
- $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 $claim = $DBH->prepare(q{INSERT INTO raid_claims (target,uid,wave)
- VALUES($1,(SELECT uid FROM users WHERE username ILIKE $3),$2)
- });
- my $unblock = $DBH->prepare(q{DELETE FROM raid_claims WHERE target = ? AND wave = ? AND uid = -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(/^claim:(\d+):(\d+)$/){
- my $target = $1;
- my $wave = $2;
- my @claims = split /[, ]+/, param($_);
- $unblock->execute($target,$wave) if @claims;
- for (@claims){
- $claim->execute($target,$wave,$_) or warn $DBH->errstr;
- }
- }elsif(/^remove:(\d+)$/){
- $remove->execute($raid->{id},$1) or $error .= p($DBH->errstr);
- }
- }
- $DBH->commit or $error .= p($DBH->errstr);
- }
- }
-
- 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});
- $groups->execute($raid ? $raid->{id} : undef);
-
- my @addgroups;
- my @remgroups;
- while (my $group = $groups->fetchrow_hashref){
- if ($group->{raid}){
- push @remgroups,{Id => $group->{gid}, Name => $group->{groupname}};
- }else{
- push @addgroups,{Id => $group->{gid}, Name => $group->{groupname}};
- }
- }
- $BODY->param(RemoveGroups => \@remgroups);
- $BODY->param(AddGroups => \@addgroups);
-
-
- if ($raid){
-
- $BODY->param(Raid => $raid->{id});
- if($raid->{open}){
- $BODY->param(Open => 'Close');
- }else{
- $BODY->param(Open => 'Open');
- }
- if($raid->{released_coords}){
- $BODY->param(ShowCoords => 'hidecoords');
- $BODY->param(ShowCoordsName => 'Hide');
- }else{
- $BODY->param(ShowCoords => 'showcoords');
- $BODY->param(ShowCoordsName => 'Show');
- }
- $BODY->param(Waves => $raid->{waves});
- $BODY->param(LandingTick => $raid->{tick});
- $BODY->param(Message => $raid->{message});
-
- my $order = "p.x,p.y,p.z";
- if (param('order') && param('order') =~ /^(score|size|value|xp|race)$/){
- $order = "$1 DESC";
- }
-
- 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) scan_id,type, tick FROM scans
- WHERE planet = ? AND type ~ 'Unit|Planet|Advanced Unit|.* Analysis' AND tick + 24 > tick()
- ORDER BY type ,tick DESC});
- $scans->execute($target->{planet});
- delete $target->{planet};
-
- my @scans;
- while (my $scan = $scans->fetchrow_hashref){
- push @scans,$scan;
- }
- $target->{Scans} = \@scans;
- push @targets,$target;
- }
- $BODY->param(Targets => \@targets);
- }else{
- $BODY->param(Waves => 3);
- my @time = gmtime;
- $BODY->param(LandingTick => $self->{TICK} + 24 - $time[2] + 12);
- }
- $BODY->param(Error => $error);
- return $BODY;
-}
-
-1;
-INSERT INTO forum_boards (fcid,fbid,board) VALUES(9,-5,'Raid logs');
+INSERT INTO forum_boards (fcid,fbid,board) VALUES(7,-5,'Raid logs');
+INSERT INTO forum_access (fbid,gid) VALUES(-5,1);
+INSERT INTO forum_access (fbid,gid) VALUES(-5,3);
ALTER TABLE raids ADD COLUMN ftid INTEGER;
__PACKAGE__->deny_access_unless('/calls/postcallcomment',[qw/calls_edit/]);
__PACKAGE__->deny_access_unless('/calls/postcallupdate',[qw/calls_edit/]);
__PACKAGE__->deny_access_unless('/calls/postattackerupdate',[qw/calls_edit/]);
+__PACKAGE__->deny_access_unless('/raids',[qw/raids_edit/]);
+__PACKAGE__->allow_access_if('/raids/index',1);
+__PACKAGE__->allow_access_if('/raids/view',1);
+__PACKAGE__->allow_access_if('/raids/findRaid',1);
+__PACKAGE__->allow_access_if('/raids/log',1);
=head1 NAME
$c->stash(targets => \@targets);
}
+sub edit : Local {
+ my ($self, $c, $raid, $order) = @_;
+ my $dbh = $c->model;
+
+ my $query = $dbh->prepare(q{SELECT id,tick,waves,message,released_coords,open,ftid
+ FROM raids WHERE id = ?
+ });
+ $raid = $dbh->selectrow_hashref($query,undef,$raid);
+
+ $c->stash(raid => $raid);
+
+ $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});
+ $groups->execute($raid ? $raid->{id} : undef);
+
+ my @addgroups;
+ my @remgroups;
+ while (my $group = $groups->fetchrow_hashref){
+ if ($group->{raid}){
+ push @remgroups,$group;
+ }else{
+ push @addgroups,$group;
+ }
+ }
+ $c->stash(removegroups => \@remgroups);
+ $c->stash(addgroups => \@addgroups);
+
+ if ($order =~ /^(score|size|value|xp)rank$/){
+ $order .= " ASC";
+ }elsif ($order eq 'race'){
+ $order .= ' ASC';
+ }else {
+ $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
+ 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
+ FROM scans
+ WHERE tick > tick() - 24
+ ORDER BY planet,type ,tick DESC
+ ) s
+ GROUP BY planet
+ ) s ON s.planet = r.planet
+ WHERE r.raid = ?
+ ORDER BY $order
+ });
+ my $claims = $dbh->prepare(q{ SELECT username,launched FROM raid_claims
+ NATURAL JOIN users WHERE target = ? AND wave = ?});
+
+ $targetquery->execute($raid->{id});
+ 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;
+
+ $target->{scans} = array_expand $target->{scans};
+ push @targets,$target;
+ }
+ $c->stash(targets => \@targets);
+
+ $c->forward('/listAlliances');
+}
+
+sub postraidupdate : Local {
+ my ($self, $c, $raid) = @_;
+ my $dbh = $c->model;
+
+ $dbh->begin_work;
+ $dbh->do(q{UPDATE raids SET message = ?, tick = ?, waves = ? WHERE id = ?}
+ ,undef,html_escape $c->req->param('message')
+ ,$c->req->param('tick'),$c->req->param('waves')
+ ,$raid);
+
+ $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(?,?)});
+
+ $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})"]);
+ }
+ }
+ $dbh->commit;
+
+ $c->res->redirect($c->uri_for('edit',$raid));
+}
+
+sub postaddtargets : Local {
+ my ($self, $c, $raid) = @_;
+ my $dbh = $c->model;
+
+ my $sizelimit = $c->req->param('sizelimit');
+ $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
+ WHERE x = ? AND y = ? AND COALESCE(z = ?,TRUE)
+ AND p.size > ?
+ )});
+ my @errors;
+ while ($targets =~ m/(\d+):(\d+)(?::(\d+))?/g){
+ my ($x,$y,$z) = ($1, $2, $3);
+ eval {
+ $addtarget->execute($raid,$1,$2,$3,$sizelimit);
+ };
+
+ if ($@ =~ /duplicate key value violates unique constraint "raid_targets_raid_key"/){
+ if ($z){
+ push @errors, "Planet already exists: $x:$y:$z";
+ }else{
+ push @errors, "A planet from $x:$y already exists in the raid,"
+ ." either remove it or add the planets separately.";
+ }
+ }else {
+ 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 > ?)
+ });
+ eval {
+ $addtarget->execute($raid,$1,$sizelimit);
+ $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,"
+ ." either remove it or add the planets separately.";
+ }else {
+ push @errors, $@;
+ }
+ }
+
+ $c->flash(errors => \@errors) if @errors;
+ $c->res->redirect($c->uri_for('edit',$raid));
+}
+
+sub posttargetupdates : Local {
+ my ($self, $c, $raid) = @_;
+ my $dbh = $c->model;
+
+ my @errors;
+ 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 $claim = $dbh->prepare(q{INSERT INTO raid_claims (target,uid,wave)
+ VALUES($1,(SELECT uid FROM users WHERE username ILIKE $3),$2)
+ });
+ my $unblock = $dbh->prepare(q{DELETE FROM raid_claims
+ 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);
+ }elsif(/^unclaim:(\d+):(\d+)$/){
+ $unclaim->execute($1,$2);
+ $c->forward('log',[$raid,"BC unclaimed target $1 wave $2."]);
+ }elsif(/^block:(\d+):(\d+)$/){
+ $block->execute($1,$2);
+ $c->forward('log',[$raid,"BC blocked target $1 wave $2."]);
+ }elsif(/^claim:(\d+):(\d+)$/){
+ my $target = $1;
+ my $wave = $2;
+ my @claims = split /[, ]+/, $c->req->param($_);
+ for (@claims){
+ eval {
+ $claim->execute($target,$wave,$_);
+ };
+ if ($@ =~ /null value in column "uid"/){
+ push @errors, "Could not find user: " . html_escape $_;
+ }elsif ($@ =~ /more than one row returned by a subquery/){
+ push @errors, "This matched several users, please refine: " . html_escape $_;
+ }else {
+ push @errors, $@;
+ }
+ }
+ if(@claims){
+ $unblock->execute($target,$wave);
+ $c->forward('log',[$raid,"BC claimed target $1 wave $2 for @claims."]);
+ }
+ }elsif(/^remove:(\d+)$/){
+ $remove->execute($raid,$1);
+ $c->forward('log',[$raid,"BC removed target $1"]);
+ }
+ }
+
+ $c->flash(errors => \@errors) if @errors;
+ $c->res->redirect($c->uri_for('edit',$raid));
+}
+
+sub open : Local {
+ my ($self, $c, $raid) = @_;
+
+ $c->model->do(q{UPDATE raids SET open = TRUE, removed = FALSE WHERE id = ?}
+ ,undef,$raid);
+ $c->forward('log',[$raid, "BC opened raid"]);
+
+ $c->res->redirect($c->req->referer);
+}
+
+sub close : Local {
+ my ($self, $c, $raid) = @_;
+
+ $c->model->do(q{UPDATE raids SET open = FALSE WHERE id = ?}
+ ,undef,$raid);
+ $c->forward('log',[$raid, "BC closed raid"]);
+
+ $c->res->redirect($c->req->referer);
+}
+
+sub remove : Local {
+ my ($self, $c, $raid) = @_;
+
+ $c->model->do(q{UPDATE raids SET open = FALSE, removed = TRUE WHERE id = ?}
+ ,undef,$raid);
+ $c->forward('log',[$raid, "BC removed raid"]);
+
+ $c->res->redirect($c->req->referer);
+}
+
+sub showcoords : Local {
+ my ($self, $c, $raid) = @_;
+
+ $c->model->do(q{UPDATE raids SET released_coords = TRUE WHERE id = ?}
+ ,undef,$raid);
+ $c->forward('log',[$raid, "BC released coords"]);
+
+ $c->res->redirect($c->req->referer);
+}
+
+sub hidecoords : Local {
+ my ($self, $c, $raid) = @_;
+
+ $c->model->do(q{UPDATE raids SET released_coords = FALSE WHERE id = ?}
+ ,undef,$raid);
+ $c->forward('log',[$raid, "BC hid coords"]);
+
+ $c->res->redirect($c->req->referer);
+}
+
+sub create : Local {
+ my ($self, $c) = @_;
+ $c->stash(waves => 3);
+ my @time = gmtime;
+ $c->stash(landingtick => $c->stash->{TICK} + 24 - $time[2] + 12);
+}
+
+sub postcreate : Local {
+ my ($self, $c) = @_;
+ my $dbh = $c->model;
+
+ 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'));
+ my $raid = $query->fetchrow_array;
+ $c->forward('log',[$raid,"Created raid landing at tick: ".$c->req->param('tick')]);
+ $c->res->redirect($c->uri_for('edit',$raid));
+}
+
sub log : Private {
my ($self, $c, $raid, $message) = @_;
my $dbh = $c->model;
$c->stash(claimedtargets => \@targets);
}
+sub listAlliances : Private {
+ my ($self, $c) = @_;
+ my @alliances;
+ push @alliances,{id => -1, name => ''};
+ my $query = $c->model->prepare(q{SELECT id,name FROM alliances ORDER BY LOWER(name)});
+ $query->execute;
+ while (my $ally = $query->fetchrow_hashref){
+ push @alliances,$ally;
+ }
+ $c->stash(alliances => \@alliances);
+}
+
sub auto : Private {
my ($self, $c) = @_;
my $dbh = $c ->model;
our @ISA = qw/Exporter/;
our @EXPORT = qw/parseMarkup min max
- alliances intelquery html_escape
- comma_value/;
+ intelquery html_escape
+ comma_value array_expand/;
sub html_escape($) {
return CGI::escapeHTML @_;
return ($x < $y ? $y : $x);
}
-
-sub alliances {
- my ($alliance) = @_;
- my @alliances;
- $alliance = -1 unless defined $alliance;
- push @alliances,{Id => -1, Name => '', Selected => not $alliance};
- my $query = $ND::DBH->prepare(q{SELECT id,name FROM alliances ORDER BY LOWER(name)});
- $query->execute;
- while (my $ally = $query->fetchrow_hashref){
- push @alliances,{Id => $ally->{id}, Name => $ally->{name}, Selected => $alliance == $ally->{id}};
- }
- return @alliances;
-}
-
sub intelquery {
my ($columns,$where) = @_;
return qq{
ORDER BY i.tick DESC, i.mission};
}
+sub array_expand ($) {
+ my ($array) = @_;
+
+ my @arrays;
+ for my $string (@{$array}){
+ $string =~ s/^\((.*)\)$/$1/;
+ $string =~ s/"//g;
+ my @array = split /,/, $string;
+ push @arrays,\@array;
+ }
+ return \@arrays;
+}
+
1;
[% IF c.check_user_roles("bc_menu") %]
<p>BC menu</p>
<ul class="linkbar">
- <li><a href="/editRaid">Create raid</a></li>
+ <li><a href="/raids/create">Create raid</a></li>
</ul>
[% END %]
[% IF c.check_user_roles("dc_menu") %]
--- /dev/null
+[% META title = 'Create raid' %]
+<form action="[% c.uri_for('postcreate') %]" method="post">
+ <fieldset> <legend>Create raid</legend>
+ <div class="leftinfo">
+ <p>Landing tick: <input type="text" name="tick" value="[% landingtick %]"></p>
+ <p>Number of waves: <input type="text" name="waves" value="[% waves %]"></p>
+ <p><input type="submit" value="Create"></p>
+ </div>
+ <p>Raid message here</p>
+ <textarea rows="15" cols="40" name="message"></textarea>
+ </fieldset>
+</form>
--- /dev/null
+[% META title = 'Edit raid' %]
+[% FOR e IN errors %]
+<h3 style="color: red">[% e %]</h3>
+[% END %]
+<div class="leftinfo">
+<form action="[% c.uri_for('postraidupdate',raid.id) %]" method="post">
+ <fieldset> <legend>Edit raid</legend>
+ <div class="leftinfo">
+ <p><a href="[% c.uri_for((raid.open ? 'close' : 'open'),raid.id) %]">[% raid.open ? 'Close' : 'Open'%] raid.</a></p>
+ <p><a href="[% c.uri_for((raid.released_coords ? 'hidecoords' : 'showcoords'),raid.id) %]">[% raid.released_coords ? 'Hide' : 'Show' %] coords.</a></p>
+ <p><a href="[% c.uri_for('remove',raid.id) %]">Remove raid</a></p>
+ <p>Landing tick: <input type="text" name="tick" value="[% raid.tick %]"></p>
+ <p>Number of waves: <input type="text" name="waves" value="[% raid.waves %]"></p>
+ [% IF removegroups.size > 0 %]
+ <p>The following groups has access to the raid</p>
+ <table>
+ <tr><th>Group</th><th>Remove</th></tr>
+ [% FOR g IN removegroups %]
+ <tr><td>[% g.groupname %]</td><td><input type="checkbox"
+ name="[% g.gid %]" value="remove"></td>
+ </tr>
+ [% END %]
+ </table>
+ [% END %]
+ [% IF addgroups.size > 0 %]
+ <p>These does not have access to the raid</p>
+ <table>
+ <tr><th>Group</th><th>Add</th></tr>
+ [% FOR g IN addgroups %]
+ <tr><td>[% g.groupname %]</td><td><input type="checkbox"
+ name="[% g.gid %]" value="add"></td>
+ </tr>
+ [% END %]
+ </table>
+ [% END %]
+ </div>
+ <p>Raid message here</p>
+ <textarea rows="15" cols="40" name="message">[% raid.message %]</textarea>
+ <p><input type="submit" value="Change"></p>
+ </fieldset>
+</form>
+</div>
+<div class="leftinfo">
+<form action="[% c.uri_for('postaddtargets',raid.id) %]" method="post">
+ <fieldset> <legend>Add targets</legend>
+ <p>List all target coords here</p>
+ <textarea rows="15" cols="40" name="targets"></textarea>
+ <p>Add all coords from: <select name="alliance">
+ [% FOR a IN alliances %]
+ <option value="[% a.id %]" [% IF selected %]selected="selected"[% END %]>[% a.name %]</option>
+ [% END %]
+ </select>
+ <br>Size limit (Filters out smaller planets):
+ <input type="text" name="sizelimit" value="">
+ <br><input type="submit" value="Add">
+ </p>
+ </fieldset>
+</form>
+</div>
+<div class="clear"> </div>
+<p>Sort by:
+ <a href="[% c.uri_for('edit',raid.id,'coords') %]">Coords</a>
+ <a href="[% c.uri_for('edit',raid.id,'race') %]">Race</a>
+ <a href="[% c.uri_for('edit',raid.id,'sizerank') %]">Size</a>
+ <a href="[% c.uri_for('edit',raid.id,'scorerank') %]">Score</a>
+ <a href="[% c.uri_for('edit',raid.id,'valuerank') %]">Value</a>
+ <a href="[% c.uri_for('edit',raid.id,'xprank') %]">XP</a>
+</p>
+<div class="leftinfo">
+<form action="[% c.uri_for('posttargetupdates',raid.id) %]" method="post">
+[% FOR t IN targets %]
+ <fieldset> <legend>Target: #[% t.id %] [% t.coords %]</legend>
+ <div class="leftinfo">
+ <p style="color:red;font-weight:bold">Remove target: <input type="checkbox" name="remove:[% t.id %]" value="remove"></p>
+ <ul>
+ <li>Size: [% t.size %]</li>
+ <li>Score: [% t.score %]</li>
+ <li>Value: [% t.value %]</li>
+ <li>Race: [% t.race %]</li>
+ </ul>
+ <table>
+ <tr><th>Planet status</th><th>Alliance relationship</th></tr>
+ <tr>
+ <td class="[% t.planet_status %]">[% t.planet_status %]</td>
+ <td class="[% t.relationship %]">[% t.relationship %]</td>
+ </tr>
+ </table>
+ </div>
+ <div class="leftinfo">
+ <p> Comment:<br>
+ <textarea rows="5" cols="20" name="comment:[% t.id %]">[% t.comment %]</textarea>
+ </p>
+ [% t.planetscan %]
+ </div>
+ <table>
+ <tr><th>Tick</th><th>Scan</th></tr>
+ [% FOR s IN t.scans %]
+ <tr class="[% loop.count % 2 == 0 ? 'even' : 'odd' %]">
+ <td>[% s.3 %]</td>
+ <td><a href="http://game.planetarion.com/showscan.pl?scan_id=[% s.1 %]">[% s.2 %]</a></td>
+ </tr>
+ [% END %]
+ </table>
+ <div class="clear"> </div>
+ <table>
+ [% FOR w IN t.waves %]
+ <tr>
+ <td>
+ [% IF w.claimers %]
+ Unclaim wave [% w.wave %] ([% w.claimers %]): <input type="checkbox" name="unclaim:[% t.id %]:[% w.wave %]" value="unclaim">
+ [% ELSE %]
+ Block wave [% w.wave %]: <input type="checkbox" name="block:[% t.id %]:[% w.wave %]" value="block">
+ [% END %]
+ </td>
+ <td><input type="text" name="claim:[% t.id %]:[% w.wave %]" value=""></td>
+ </tr>
+ [% END %]
+ </table>
+ </fieldset>
+[% END %]
+<p><input type="submit" value="Submit target changes"></p>
+</form>
+</div>
+++ /dev/null
-<TMPL_VAR NAME=Error>
-<form action="<TMPL_VAR NAME=PAGE>" method="post">
- <fieldset> <legend><TMPL_IF Raid>Edit raid<TMPL_ELSE>New raid</TMPL_IF></legend>
- <input type="hidden" name="page" value="<TMPL_VAR NAME=PAGE>"/>
- <input type="hidden" name="raid" value="<TMPL_VAR NAME=Raid>"/>
- <div class="leftinfo">
- <TMPL_IF Raid>
- <input type="hidden" name="cmd" value="change"/>
- <input type="hidden" name="raid" value="<TMPL_VAR NAME=Raid>"/>
- <p><a href="/<TMPL_VAR NAME=PAGE>?raid=<TMPL_VAR NAME=Raid>&cmd=<TMPL_VAR NAME=Open>"><TMPL_VAR NAME=Open> raid.</a></p>
- <p><a href="/<TMPL_VAR NAME=PAGE>?raid=<TMPL_VAR NAME=Raid>&cmd=<TMPL_VAR NAME=ShowCoords>"><TMPL_VAR NAME=ShowCoordsName> coords.</a></p>
- <p><a href="/<TMPL_VAR NAME=PAGE>?raid=<TMPL_VAR NAME=Raid>&cmd=remove">Remove raid</a></p>
- <TMPL_ELSE>
- <input type="hidden" name="cmd" value="submit"/>
- </TMPL_IF>
- <p>Landing tick: <input type="text" name="tick" value="<TMPL_VAR NAME=LandingTick>"/></p>
- <p>Number of waves: <input type="text" name="waves" value="<TMPL_VAR NAME=Waves>"/></p>
- <TMPL_IF RemoveGroups>
- <p>The following groups has access to the raid</p>
- <table>
- <tr><th>Group</th><th>Remove</th></tr>
- <TMPL_LOOP RemoveGroups>
- <tr><td><TMPL_VAR NAME=Name></td><td><input type="checkbox" name="<TMPL_VAR NAME=Id>" value="remove"/></td></tr>
- </TMPL_LOOP>
- </table>
- </TMPL_IF>
- <TMPL_IF AddGroups>
- <p>These does not have access to the raid</p>
- <table>
- <tr><th>Group</th><th>Add</th></tr>
- <TMPL_LOOP AddGroups>
- <tr><td><TMPL_VAR NAME=Name></td><td><input type="checkbox" name="<TMPL_VAR NAME=Id>" value="add"/></td></tr>
- </TMPL_LOOP>
- </table>
- </TMPL_IF>
- </div>
- <div class="leftinfo">
- <p>Raid message here</p>
- <textarea rows="15" cols="40" name="message"><TMPL_VAR ESCAPE=NONE NAME=Message></textarea>
- </div>
- <div class="leftinfo">
- <p>List all target coords here</p>
- <textarea rows="15" cols="40" name="targets"></textarea>
- </div>
- <div class="clear"> </div>
- <p class="claimlinks">Add all coords from: <select name="alliance">
- <TMPL_LOOP Alliances>
- <option value="<TMPL_VAR NAME=Id>" <TMPL_IF NAME=Selected>selected="selected"</TMPL_IF>><TMPL_VAR NAME=Name></option>
- </TMPL_LOOP>
- </select>
- <br/>Size limit (Filters out smaller planets):
- <input type="text" name="sizelimit" value=""/>
- <br/><input type="submit" value="Submit"/>
- </p>
- </fieldset>
-</form>
-<TMPL_IF Raid>
- <p>Sort by:
- <a href="/<TMPL_VAR NAME=PAGE>?raid=<TMPL_VAR NAME=Raid>&order=coords">Coords</a>
- <a href="/<TMPL_VAR NAME=PAGE>?raid=<TMPL_VAR NAME=Raid>&order=race">Race</a>
- <a href="/<TMPL_VAR NAME=PAGE>?raid=<TMPL_VAR NAME=Raid>&order=size">Size</a>
- <a href="/<TMPL_VAR NAME=PAGE>?raid=<TMPL_VAR NAME=Raid>&order=score">Score</a>
- <a href="/<TMPL_VAR NAME=PAGE>?raid=<TMPL_VAR NAME=Raid>&order=value">Value</a>
- <a href="/<TMPL_VAR NAME=PAGE>?raid=<TMPL_VAR NAME=Raid>&order=xp">XP</a>
- </p>
-<form action="<TMPL_VAR NAME=PAGE>" method="post">
-<input type="hidden" name="page" value="<TMPL_VAR NAME=PAGE>"/>
-<input type="hidden" name="raid" value="<TMPL_VAR NAME=Raid>"/>
-<input type="hidden" name="cmd" value="targets"/>
-<TMPL_LOOP Targets>
- <fieldset> <legend>Target: #<TMPL_VAR NAME=Id> <TMPL_VAR NAME=Coords></legend>
- <div class="leftinfo">
- <p style="color:red;font-weight:bold">Remove target: <input type="checkbox" name="remove:<TMPL_VAR NAME=Id>" value="remove"/></p>
- <ul>
- <li>Size: <TMPL_VAR NAME=Size></li>
- <li>Score: <TMPL_VAR NAME=Score></li>
- <li>Value: <TMPL_VAR NAME=Value></li>
- <li>Race: <TMPL_VAR NAME=Race></li>
- </ul>
- <table>
- <tr><th>Planet status</th><th>Alliance relationship</th></tr>
- <tr>
- <td class="<TMPL_VAR NAME=PlanetStatus>"><TMPL_VAR NAME=PlanetStatus></td>
- <td class="<TMPL_VAR NAME=Relationship>"><TMPL_VAR NAME=Relationship></td>
- </tr>
- </table>
- <table>
- <TMPL_LOOP Waves>
- <tr>
- <td>
- <TMPL_IF Claimers>
- Unclaim wave <TMPL_VAR NAME=Wave> (<TMPL_VAR NAME=Claimers>): <input type="checkbox" name="unclaim:<TMPL_VAR NAME=Id>:<TMPL_VAR NAME=Wave>" value="unclaim"/>
- <TMPL_ELSE>
- Block wave <TMPL_VAR NAME=Wave>: <input type="checkbox" name="block:<TMPL_VAR NAME=Id>:<TMPL_VAR NAME=Wave>" value="block"/>
- </TMPL_IF>
- </td>
- <td><input type="text" name="claim:<TMPL_VAR NAME=Id>:<TMPL_VAR NAME=Wave>" value=""/></td>
- </tr>
- </TMPL_LOOP>
- </table>
- </div>
- <div class="leftinfo">
- <p> Comment:<br/>
- <textarea rows="5" cols="20" name="comment:<TMPL_VAR NAME=Id>"><TMPL_VAR ESCAPE=NONE NAME=Comment></textarea>
- </p>
- <TMPL_VAR NAME=PlanetScan>
- </div>
- <table>
- <tr><th>Tick</th><th>Scan</th></tr>
- <TMPL_LOOP Scans>
- <tr class="<TMPL_IF __odd__>odd<TMPL_ELSE>even</TMPL_IF>">
- <td><TMPL_VAR NAME=Tick></td>
- <td><a href="http://game.planetarion.com/showscan.pl?scan_id=<TMPL_VAR NAME=Scan_id>"><TMPL_VAR NAME=Type></a></td>
- </tr>
- </TMPL_LOOP>
- </table>
- </fieldset>
-</TMPL_LOOP>
-<br/><input type="submit" value="Submit target changes"/>
-</form>
-</TMPL_IF>