X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=lib%2FNDWeb%2FController%2FMembers.pm;h=f3a53f4f9ba9df0032cd0f85e6a7488bdaf58899;hb=95365cc1a5b8827230e5213bf4dd3377949af7f0;hp=e25a69bb1feeff654b1b92a5e1ea32b8a7b4d4fc;hpb=02c7aaff53da28137793c89c32d9994b93db61fb;p=ndwebbie.git diff --git a/lib/NDWeb/Controller/Members.pm b/lib/NDWeb/Controller/Members.pm index e25a69b..f3a53f4 100644 --- a/lib/NDWeb/Controller/Members.pm +++ b/lib/NDWeb/Controller/Members.pm @@ -50,6 +50,102 @@ sub points : Local { $c->stash(members => \@members); } +sub addintel : Local { + my ( $self, $c, $order ) = @_; + + $c->stash(intel => $c->flash->{intel}); + $c->stash(scans => $c->flash->{scans}); + $c->stash(intelmessage => $c->flash->{intelmessage}); +} + +sub postintel : Local { + my ( $self, $c, $order ) = @_; + + $c->forward('insertintel'); + + $c->res->redirect($c->uri_for('addintel')); +} + +sub postintelmessage : Local { + my ( $self, $c, $order ) = @_; + + unless ($c->req->param('subject')){ + if ($c->req->param('message') =~ /(.*\w.*)/){ + $c->req->param(subject => $1); + } + } + + $c->forward('/forum/insertThread',[12]); + $c->forward('/forum/insertPost',[$c->stash->{thread}]); + $c->flash(intelmessage => 1); + + $c->forward('insertintel'); + + $c->res->redirect($c->uri_for('addintel')); +} + +sub insertintel : Private { + my ( $self, $c, $order ) = @_; + my $dbh = $c->model; + + $dbh->begin_work; + my $findscan = $dbh->prepare(q{SELECT scan_id FROM scans + WHERE scan_id = ? AND tick >= tick() - 168 AND groupscan = ? + }); + my $addscan = $dbh->prepare(q{INSERT INTO scans (scan_id,tick,uid,groupscan) + VALUES (?,tick(),?,?) + }); + my $addpoint = $dbh->prepare(q{UPDATE users SET scan_points = scan_points + 1 + WHERE uid = ? + }); + my @scans; + my $intel = $c->req->param('message'); + while ($intel =~ m{http://[\w.]+/.+?scan(_id|_grp)?=(\d+)}g){ + my $groupscan = (defined $1 && $1 eq '_grp') || 0; + my %scan; + $scan{id} = $2; + $scan{group} = $groupscan; + $findscan->execute($2,$groupscan); + if ($findscan->rows == 0){ + if ($addscan->execute($2,$c->user->id,$groupscan)){ + $addpoint->execute($c->user->id) unless $groupscan; + $scan{added} = 1; + } + }else{ + $scan{message} = 'already exists'; + } + push @scans,\%scan; + } + my $tick = $c->req->param('tick'); + unless ($tick =~ /^(\d+)$/){ + $tick = $c->stash->{game}->{tick}; + } + my $addintel = $dbh->prepare(q{INSERT INTO fleets + (name,mission,tick,target,sender,eta,amount,ingal,back,uid) + VALUES($1,$2,$3,planetid($4,$5,$6,$10),planetid($7,$8,$9,$10) + ,$11,$12,$13,$14,$15) + }); + my @intel; + while ($intel =~ m/(\d+):(\d+):(\d+)\*?\s+(\d+):(\d+):(\d+) + \*?\s+(.+)(?:Ter|Cat|Xan|Zik|Etd)? + \s+(\d+)\s+(Attack|Defend)\s+(\d+)/gx){ + my $ingal = ($1 == $4 && $2 == $5) || 0; + my $lt = $tick + $10; + my $back = ($ingal ? $lt + 4 : undef); + eval { + $addintel->execute($7,$9,$lt,$1,$2,$3,$4,$5,$6,$tick,$10,$8 + ,$ingal,$back, $c->user->id); + push @intel,"Added $&"; + }; + if ($@){ + push @intel,"Couldn't add $&: ".$dbh->errstr; + } + } + $dbh->commit; + $c->flash(intel => \@intel); + $c->flash(scans => \@scans); +} + =head1 AUTHOR Michael Andreen (harv@ruin.nu)