]> ruin.nu Git - ndwebbie.git/commitdiff
restructure
authorMichael Andreen <harv@ruin.nu>
Thu, 4 Jan 2007 19:20:30 +0000 (19:20 +0000)
committerMichael Andreen <harv@ruin.nu>
Thu, 4 Jan 2007 19:20:30 +0000 (19:20 +0000)
ND.pm
ND/AuthHandler.pm [deleted file]
ND/Forum.pm [deleted file]
ND/Include.pm [deleted file]
ND/Web/AuthHandler.pm [new file with mode: 0644]
ND/Web/Forum.pm [new file with mode: 0644]
ND/Web/Include.pm [new file with mode: 0644]
apache-conf.conf
forum.pl
intel.pl
startup.pl

diff --git a/ND.pm b/ND.pm
index 7ac8e354487e720876fad29ea593fab385090ad8..7d9c8c08b2677cbc27e4ae5e64fe47e6cc3ab849 100755 (executable)
--- a/ND.pm
+++ b/ND.pm
@@ -24,7 +24,7 @@ use HTML::Template;
 use DBI;
 use DBD::Pg qw(:pg_types);
 use Apache2::Request;
-use ND::Include;
+use ND::Web::Include;
 use ND::DB;
 use Tie::File;
 use Fcntl 'O_RDONLY';
diff --git a/ND/AuthHandler.pm b/ND/AuthHandler.pm
deleted file mode 100644 (file)
index b7cc700..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/perl -w -T
-#**************************************************************************
-#   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 ND::AuthHandler;
-use strict;
-use warnings FATAL => 'all';
-
-use ND::DB;
-use Apache2::Access ();
-
-sub handler {
-       my $r = shift;
-       my($res, $sent_pw) = $r->get_basic_auth_pw;
-       return $res if $res != Apache2::Const::OK;
-
-       my $dbh = ND::DB::DB();
-       my ($count) = $dbh->selectrow_array(q{SELECT count(*) FROM users WHERE
-               lower(username) = lower(?) AND password = MD5(?)},undef,$r->user,$sent_pw);
-       $dbh->disconnect;
-       if ($count == 1){
-               return Apache2::Const::OK;
-       }
-       $r->note_basic_auth_failure();
-       return Apache2::Const::AUTH_REQUIRED;
-}
-
-1;
diff --git a/ND/Forum.pm b/ND/Forum.pm
deleted file mode 100644 (file)
index 78ee5a0..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-#**************************************************************************
-#   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 ND::Forum;
-use strict;
-use warnings FATAL => 'all';
-use CGI qw{:standard};
-use HTML::Template;
-use ND::Include;
-require Exporter;
-
-our @ISA = qw/Exporter/;
-
-our @EXPORT = qw/viewForumThread addForumPost markThreadAsRead/;
-
-sub viewForumThread {
-       my ($thread) = @_;
-
-       my $template = HTML::Template->new(filename => "templates/viewthread.tmpl", global_vars => 1, cache => 1);
-
-       $template->param(Subject => $thread->{subject});
-       $template->param(Id => $thread->{id});
-       $template->param(Post => $thread->{post});
-
-       my $posts = $ND::DBH->prepare(q{SELECT u.username,date_trunc('minute',fp.time::timestamp) AS time,fp.message,COALESCE(fp.time > ftv.time,TRUE) AS unread
-FROM forum_threads ft JOIN forum_posts fp USING (ftid) JOIN users u USING (uid) LEFT OUTER JOIN (SELECT * FROM forum_thread_visits WHERE uid = $2) ftv ON ftv.ftid = ft.ftid
-WHERE ft.ftid = $1
-ORDER BY fp.time ASC
-});
-       $posts->execute($thread->{id},$ND::UID) or $ND::ERROR .= p($ND::DBH->errstr);
-       my @posts;
-       my $old = 1;
-       while (my $post = $posts->fetchrow_hashref){
-               if ($old && $post->{unread}){
-                       $old = 0;
-                       $post->{NewPosts} = 1;
-               }
-               $post->{message} = parseMarkup($post->{message});
-               push @posts,$post;
-       }
-       $template->param(Posts => \@posts);
-
-       markThreadAsRead($thread->{id});
-
-       return $template->output;
-}
-
-sub addForumPost {
-       my ($dbh,$thread,$uid,$message) = @_;
-       my $insert = $dbh->prepare(q{INSERT INTO forum_posts (ftid,message,uid) VALUES($1,$2,$3)});
-       unless ($insert->execute($thread->{id},escapeHTML($message),$uid)){
-               $ND::ERROR .= p($dbh->errstr);
-               return 0;
-       }
-       return 1;
-}
-
-sub markThreadAsRead {
-       my ($thread) = @_;
-       my $rows = $ND::DBH->do(q{UPDATE forum_thread_visits SET time = now() 
-WHERE uid =    $1 AND ftid = $2},undef,$ND::UID,$thread);
-       if ($rows == 0){
-               $ND::DBH->do(q{INSERT INTO forum_thread_visits (uid,ftid) VALUES ($1,$2)}
-                       ,undef,$ND::UID,$thread) or $ND::ERROR .= p($ND::DBH->errstr);
-       }elsif(not defined $rows){
-               $ND::ERROR .= p($ND::DBH->errstr);
-       }
-}
-
-1;
diff --git a/ND/Include.pm b/ND/Include.pm
deleted file mode 100644 (file)
index 5df59fc..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-#**************************************************************************
-#   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 ND::Include;
-use strict;
-use warnings FATAL => 'all';
-use CGI qw{:standard};
-require Exporter;
-
-our @ISA = qw/Exporter/;
-
-our @EXPORT = qw/isMember isHC isDC isBC isOfficer isScanner isIntel isTech parseMarkup min max listTargets
-       alliances intelquery generateClaimXml/;
-
-sub isMember {
-       return exists $ND::GROUPS{Members} || isTech();
-}
-
-sub isHC {
-       return exists $ND::GROUPS{HC} || isTech();
-}
-
-sub isDC {
-       return exists $ND::GROUPS{DC} || isTech();
-}
-
-sub isBC {
-       return exists $ND::GROUPS{BC} || isTech();
-}
-
-sub isOfficer {
-       return exists $ND::GROUPS{Officers} || isTech();
-}
-
-sub isScanner {
-       return exists $ND::GROUPS{Scanners} || isTech();
-}
-
-sub isIntel {
-       return exists $ND::GROUPS{Intel} || isTech();
-}
-
-sub isTech {
-       return exists $ND::GROUPS{Tech};
-}
-
-sub parseMarkup {
-       my ($text) = @_;
-
-       $text =~ s{\n}{\n<br/>}g;
-       $text =~ s{\[B\](.*?)\[/B\]}{<b>$1</b>}gi;
-       return $text;
-}
-
-
-sub min {
-    my ($x,$y) = @_;
-    return ($x > $y ? $y : $x);
-}
-
-sub max {
-    my ($x,$y) = @_;
-    return ($x < $y ? $y : $x);
-}
-
-sub listTargets {
-       my $query = $ND::DBH->prepare(qq{SELECT t.id, r.id AS raid, r.tick+c.wave-1 AS landingtick, released_coords, coords(x,y,z),c.launched,c.wave,c.joinable
-FROM raid_claims c
-       JOIN raid_targets t ON c.target = t.id
-       JOIN raids r ON t.raid = r.id
-       JOIN current_planet_stats p ON t.planet = p.id
-WHERE c.uid = ? AND r.tick+c.wave > ? AND r.open AND not r.removed
-ORDER BY r.tick+c.wave,x,y,z});
-       $query->execute($ND::UID,$ND::TICK);
-       my @targets;
-       while (my $target = $query->fetchrow_hashref){
-               my $coords = "Target $target->{id}";
-               $coords = $target->{coords} if $target->{released_coords};
-               push @targets,{Coords => $coords, Launched => $target->{launched}, Raid => $target->{raid}
-                       , Target => $target->{id}, Tick => $target->{landingtick}, Wave => $target->{wave}
-                       , AJAX => $ND::AJAX, JoinName => $target->{joinable} ? 'N' : 'J'
-                       , Joinable => $target->{joinable} ? 'FALSE' : 'TRUE'};
-       }
-       my $template = HTML::Template->new(filename => "templates/targetlist.tmpl", cache => 1);
-       $template->param(Targets => \@targets);
-       return $template->output;
-}
-
-sub alliances {
-       my ($alliance) = @_;
-       my @alliances;
-       $alliance = -1 unless defined $alliance;
-       push @alliances,{Id => -1, Name => '&nbsp;', Selected => not $alliance};
-       my $query = $ND::DBH->prepare(q{SELECT id,name FROM alliances ORDER BY 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{
-SELECT $columns, i.mission, i.tick AS landingtick,MIN(i.eta) AS eta, i.amount, i.ingal, u.username
-FROM (intel i NATURAL JOIN users u)
-       JOIN current_planet_stats t ON i.target = t.id
-       JOIN current_planet_stats o ON i.sender = o.id
-WHERE $where 
-GROUP BY i.tick,i.mission,t.x,t.y,t.z,o.x,o.y,o.z,i.amount,i.ingal,u.username,t.alliance,o.alliance,t.nick,o.nick
-ORDER BY i.tick DESC, i.mission};
-}
-
-
-sub generateClaimXml {
-       my ($raid, $from, $target) = @_;
-
-       my ($timestamp) = $ND::DBH->selectrow_array("SELECT MAX(modified)::timestamp AS modified FROM raid_targets");
-       $ND::BODY->param(Timestamp => $timestamp);
-       if ($target){
-               $target = "r.id = $target";
-               $_ = listTargets();
-               $ND::BODY->param(TargetList => $_);
-       }else{
-               $target = "r.raid = $raid->{id}";
-       }
-
-       if ($from){
-               $from = "AND modified > '$from'";
-       }else{
-               $from = '';
-       }
-       my $targets = $ND::DBH->prepare(qq{SELECT r.id,r.planet FROM raid_targets r WHERE $target $from});
-       $targets->execute or print p($ND::DBH->errstr);
-       my $claims =  $ND::DBH->prepare(qq{ SELECT username,joinable,launched FROM raid_claims
-               NATURAL JOIN users WHERE target = ? AND wave = ?});
-       my @targets;
-       while (my $target = $targets->fetchrow_hashref){
-               my %target;
-               $target{Id} = $target->{id};
-               $target{Coords} = $target->{id};
-               my @waves;
-               for (my $i = 1; $i <= $raid->{waves}; $i++){
-                       my %wave;
-                       $wave{Id} = $i;
-                       $claims->execute($target->{id},$i);
-                       my $joinable = 0;
-                       my $claimers;
-                       if ($claims->rows != 0){
-                               my $owner = 0;
-                               my @claimers;
-                               while (my $claim = $claims->fetchrow_hashref){
-                                       $owner = 1 if ($ND::USER eq $claim->{username});
-                                       $joinable = 1 if ($claim->{joinable});
-                                       $claim->{username} .= '*' if ($claim->{launched});
-                                       push @claimers,$claim->{username};
-                               }
-                               $claimers = join '/', @claimers;
-                               if ($owner){
-                                       $wave{Command} = 'Unclaim';
-                                       if ($raid->{released_coords}){
-                                               $target{Coords} = $ND::DBH->selectrow_array('SELECT coords(x,y,z) FROM current_planet_stats WHERE id = ?',undef,$target->{planet});
-                                       }
-                               }elsif ($joinable){
-                                       $wave{Command} = 'Join';
-                               }else{
-                                       $wave{Command} = 'none';
-                               }
-                       }else{
-                               #if (!isset($planet) || ($target->value/$planet->value > 0.4 || $target->score/$planet->score > 0.4))
-                               $wave{Command} = 'Claim';
-                       }
-                       $wave{Claimers} = $claimers;
-                       $wave{Joinable} = $joinable;
-                       push @waves,\%wave;
-               }
-               $target{Waves} = \@waves;
-               push @targets,\%target;
-       }
-       $ND::BODY->param(Targets => \@targets);
-}
-
-1;
diff --git a/ND/Web/AuthHandler.pm b/ND/Web/AuthHandler.pm
new file mode 100644 (file)
index 0000000..60204b0
--- /dev/null
@@ -0,0 +1,44 @@
+#!/usr/bin/perl -w -T
+#**************************************************************************
+#   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 ND::Web::AuthHandler;
+use strict;
+use warnings FATAL => 'all';
+
+use ND::DB;
+use Apache2::Access ();
+
+sub handler {
+       my $r = shift;
+       my($res, $sent_pw) = $r->get_basic_auth_pw;
+       return $res if $res != Apache2::Const::OK;
+
+       my $dbh = ND::DB::DB();
+       my ($count) = $dbh->selectrow_array(q{SELECT count(*) FROM users WHERE
+               lower(username) = lower(?) AND password = MD5(?)},undef,$r->user,$sent_pw);
+       $dbh->disconnect;
+       if ($count == 1){
+               return Apache2::Const::OK;
+       }
+       $r->note_basic_auth_failure();
+       return Apache2::Const::AUTH_REQUIRED;
+}
+
+1;
diff --git a/ND/Web/Forum.pm b/ND/Web/Forum.pm
new file mode 100644 (file)
index 0000000..8e19419
--- /dev/null
@@ -0,0 +1,86 @@
+#**************************************************************************
+#   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 ND::Web::Forum;
+use strict;
+use warnings FATAL => 'all';
+use CGI qw{:standard};
+use HTML::Template;
+use ND::Web::Include;
+require Exporter;
+
+our @ISA = qw/Exporter/;
+
+our @EXPORT = qw/viewForumThread addForumPost markThreadAsRead/;
+
+sub viewForumThread {
+       my ($thread) = @_;
+
+       my $template = HTML::Template->new(filename => "templates/viewthread.tmpl", global_vars => 1, cache => 1);
+
+       $template->param(Subject => $thread->{subject});
+       $template->param(Id => $thread->{id});
+       $template->param(Post => $thread->{post});
+
+       my $posts = $ND::DBH->prepare(q{SELECT u.username,date_trunc('minute',fp.time::timestamp) AS time,fp.message,COALESCE(fp.time > ftv.time,TRUE) AS unread
+FROM forum_threads ft JOIN forum_posts fp USING (ftid) JOIN users u USING (uid) LEFT OUTER JOIN (SELECT * FROM forum_thread_visits WHERE uid = $2) ftv ON ftv.ftid = ft.ftid
+WHERE ft.ftid = $1
+ORDER BY fp.time ASC
+});
+       $posts->execute($thread->{id},$ND::UID) or $ND::ERROR .= p($ND::DBH->errstr);
+       my @posts;
+       my $old = 1;
+       while (my $post = $posts->fetchrow_hashref){
+               if ($old && $post->{unread}){
+                       $old = 0;
+                       $post->{NewPosts} = 1;
+               }
+               $post->{message} = parseMarkup($post->{message});
+               push @posts,$post;
+       }
+       $template->param(Posts => \@posts);
+
+       markThreadAsRead($thread->{id});
+
+       return $template->output;
+}
+
+sub addForumPost {
+       my ($dbh,$thread,$uid,$message) = @_;
+       my $insert = $dbh->prepare(q{INSERT INTO forum_posts (ftid,message,uid) VALUES($1,$2,$3)});
+       unless ($insert->execute($thread->{id},escapeHTML($message),$uid)){
+               $ND::ERROR .= p($dbh->errstr);
+               return 0;
+       }
+       return 1;
+}
+
+sub markThreadAsRead {
+       my ($thread) = @_;
+       my $rows = $ND::DBH->do(q{UPDATE forum_thread_visits SET time = now() 
+WHERE uid =    $1 AND ftid = $2},undef,$ND::UID,$thread);
+       if ($rows == 0){
+               $ND::DBH->do(q{INSERT INTO forum_thread_visits (uid,ftid) VALUES ($1,$2)}
+                       ,undef,$ND::UID,$thread) or $ND::ERROR .= p($ND::DBH->errstr);
+       }elsif(not defined $rows){
+               $ND::ERROR .= p($ND::DBH->errstr);
+       }
+}
+
+1;
diff --git a/ND/Web/Include.pm b/ND/Web/Include.pm
new file mode 100644 (file)
index 0000000..9206ba4
--- /dev/null
@@ -0,0 +1,199 @@
+#**************************************************************************
+#   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 ND::Web::Include;
+use strict;
+use warnings FATAL => 'all';
+use CGI qw{:standard};
+require Exporter;
+
+our @ISA = qw/Exporter/;
+
+our @EXPORT = qw/isMember isHC isDC isBC isOfficer isScanner isIntel isTech parseMarkup min max listTargets
+       alliances intelquery generateClaimXml/;
+
+sub isMember {
+       return exists $ND::GROUPS{Members} || isTech();
+}
+
+sub isHC {
+       return exists $ND::GROUPS{HC} || isTech();
+}
+
+sub isDC {
+       return exists $ND::GROUPS{DC} || isTech();
+}
+
+sub isBC {
+       return exists $ND::GROUPS{BC} || isTech();
+}
+
+sub isOfficer {
+       return exists $ND::GROUPS{Officers} || isTech();
+}
+
+sub isScanner {
+       return exists $ND::GROUPS{Scanners} || isTech();
+}
+
+sub isIntel {
+       return exists $ND::GROUPS{Intel} || isTech();
+}
+
+sub isTech {
+       return exists $ND::GROUPS{Tech};
+}
+
+sub parseMarkup {
+       my ($text) = @_;
+
+       $text =~ s{\n}{\n<br/>}g;
+       $text =~ s{\[B\](.*?)\[/B\]}{<b>$1</b>}gi;
+       return $text;
+}
+
+
+sub min {
+    my ($x,$y) = @_;
+    return ($x > $y ? $y : $x);
+}
+
+sub max {
+    my ($x,$y) = @_;
+    return ($x < $y ? $y : $x);
+}
+
+sub listTargets {
+       my $query = $ND::DBH->prepare(qq{SELECT t.id, r.id AS raid, r.tick+c.wave-1 AS landingtick, released_coords, coords(x,y,z),c.launched,c.wave,c.joinable
+FROM raid_claims c
+       JOIN raid_targets t ON c.target = t.id
+       JOIN raids r ON t.raid = r.id
+       JOIN current_planet_stats p ON t.planet = p.id
+WHERE c.uid = ? AND r.tick+c.wave > ? AND r.open AND not r.removed
+ORDER BY r.tick+c.wave,x,y,z});
+       $query->execute($ND::UID,$ND::TICK);
+       my @targets;
+       while (my $target = $query->fetchrow_hashref){
+               my $coords = "Target $target->{id}";
+               $coords = $target->{coords} if $target->{released_coords};
+               push @targets,{Coords => $coords, Launched => $target->{launched}, Raid => $target->{raid}
+                       , Target => $target->{id}, Tick => $target->{landingtick}, Wave => $target->{wave}
+                       , AJAX => $ND::AJAX, JoinName => $target->{joinable} ? 'N' : 'J'
+                       , Joinable => $target->{joinable} ? 'FALSE' : 'TRUE'};
+       }
+       my $template = HTML::Template->new(filename => "templates/targetlist.tmpl", cache => 1);
+       $template->param(Targets => \@targets);
+       return $template->output;
+}
+
+sub alliances {
+       my ($alliance) = @_;
+       my @alliances;
+       $alliance = -1 unless defined $alliance;
+       push @alliances,{Id => -1, Name => '&nbsp;', Selected => not $alliance};
+       my $query = $ND::DBH->prepare(q{SELECT id,name FROM alliances ORDER BY 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{
+SELECT $columns, i.mission, i.tick AS landingtick,MIN(i.eta) AS eta, i.amount, i.ingal, u.username
+FROM (intel i NATURAL JOIN users u)
+       JOIN current_planet_stats t ON i.target = t.id
+       JOIN current_planet_stats o ON i.sender = o.id
+WHERE $where 
+GROUP BY i.tick,i.mission,t.x,t.y,t.z,o.x,o.y,o.z,i.amount,i.ingal,u.username,t.alliance,o.alliance,t.nick,o.nick
+ORDER BY i.tick DESC, i.mission};
+}
+
+
+sub generateClaimXml {
+       my ($raid, $from, $target) = @_;
+
+       my ($timestamp) = $ND::DBH->selectrow_array("SELECT MAX(modified)::timestamp AS modified FROM raid_targets");
+       $ND::BODY->param(Timestamp => $timestamp);
+       if ($target){
+               $target = "r.id = $target";
+               $_ = listTargets();
+               $ND::BODY->param(TargetList => $_);
+       }else{
+               $target = "r.raid = $raid->{id}";
+       }
+
+       if ($from){
+               $from = "AND modified > '$from'";
+       }else{
+               $from = '';
+       }
+       my $targets = $ND::DBH->prepare(qq{SELECT r.id,r.planet FROM raid_targets r WHERE $target $from});
+       $targets->execute or print p($ND::DBH->errstr);
+       my $claims =  $ND::DBH->prepare(qq{ SELECT username,joinable,launched FROM raid_claims
+               NATURAL JOIN users WHERE target = ? AND wave = ?});
+       my @targets;
+       while (my $target = $targets->fetchrow_hashref){
+               my %target;
+               $target{Id} = $target->{id};
+               $target{Coords} = $target->{id};
+               my @waves;
+               for (my $i = 1; $i <= $raid->{waves}; $i++){
+                       my %wave;
+                       $wave{Id} = $i;
+                       $claims->execute($target->{id},$i);
+                       my $joinable = 0;
+                       my $claimers;
+                       if ($claims->rows != 0){
+                               my $owner = 0;
+                               my @claimers;
+                               while (my $claim = $claims->fetchrow_hashref){
+                                       $owner = 1 if ($ND::USER eq $claim->{username});
+                                       $joinable = 1 if ($claim->{joinable});
+                                       $claim->{username} .= '*' if ($claim->{launched});
+                                       push @claimers,$claim->{username};
+                               }
+                               $claimers = join '/', @claimers;
+                               if ($owner){
+                                       $wave{Command} = 'Unclaim';
+                                       if ($raid->{released_coords}){
+                                               $target{Coords} = $ND::DBH->selectrow_array('SELECT coords(x,y,z) FROM current_planet_stats WHERE id = ?',undef,$target->{planet});
+                                       }
+                               }elsif ($joinable){
+                                       $wave{Command} = 'Join';
+                               }else{
+                                       $wave{Command} = 'none';
+                               }
+                       }else{
+                               #if (!isset($planet) || ($target->value/$planet->value > 0.4 || $target->score/$planet->score > 0.4))
+                               $wave{Command} = 'Claim';
+                       }
+                       $wave{Claimers} = $claimers;
+                       $wave{Joinable} = $joinable;
+                       push @waves,\%wave;
+               }
+               $target{Waves} = \@waves;
+               push @targets,\%target;
+       }
+       $ND::BODY->param(Targets => \@targets);
+}
+
+1;
index 16b2864feae6088bc4412bddd9373231177bfc09..6d7738b5ab2a64f4fd2c8cae1ba847e7335cb856 100644 (file)
        AuthName "NewDawn authentication"
        AuthType basic
 
-       PerlAuthenHandler ND::AuthHandler
+       PerlAuthenHandler ND::Web::AuthHandler
 
        Order Deny,Allow
        Require valid-user
index 15116427fbde4adbaa49e300063861db6c339cb4..a9f1be1bd2dfcfaa49cfe3acc9ffcd4b0c647d6e 100644 (file)
--- a/forum.pl
+++ b/forum.pl
@@ -20,7 +20,7 @@
 use strict;
 use warnings FATAL => 'all';
 no warnings 'uninitialized';
-use ND::Forum;
+use ND::Web::Forum;
 
 $ND::TEMPLATE->param(TITLE => 'Forum');
 
index ba63838ebc0588993f5a0bf1acb387ffcdcd332f..7f1ec4a71ded074fc31410ff4e686cbb44b43da6 100644 (file)
--- a/intel.pl
+++ b/intel.pl
@@ -19,7 +19,7 @@
 
 use strict;
 use warnings FATAL => 'all';
-use ND::Forum;
+use ND::Web::Forum;
 
 our $BODY;
 our $DBH;
index 5cb7bcdbd97884ef8376e7014a97bc80c207e194..0597587049e5eea8a5eadd096dcdcab008c129b2 100644 (file)
@@ -11,8 +11,8 @@ use DBI;
 use DBD::Pg qw(:pg_types);
 
 use ND::DB;
-use ND::Include;
-use ND::Forum;
+use ND::Web::Include;
+use ND::Web::Forum;
 
 use Tie::File;