]> ruin.nu Git - ndwebbie.git/blobdiff - lib/NDWeb/Controller/Members.pm
Converted addintel
[ndwebbie.git] / lib / NDWeb / Controller / Members.pm
index e25a69bb1feeff654b1b92a5e1ea32b8a7b4d4fc..f3a53f4f9ba9df0032cd0f85e6a7488bdaf58899 100644 (file)
@@ -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)