]> ruin.nu Git - ndwebbie.git/blobdiff - ND.pm
Added model and renamed submodule
[ndwebbie.git] / ND.pm
diff --git a/ND.pm b/ND.pm
index 7ac8e354487e720876fad29ea593fab385090ad8..e9bc401f83138574447f6e1b9855782effd3d753 100755 (executable)
--- a/ND.pm
+++ b/ND.pm
 
 package ND;
 use CGI qw/:standard/;
-use HTML::Template;
 use DBI;
 use DBD::Pg qw(:pg_types);
 use Apache2::Request;
-use ND::Include;
+use Apache2::Response;
+use Apache2::RequestUtil;
 use ND::DB;
-use Tie::File;
-use Fcntl 'O_RDONLY';
+use NDWeb::Page;
 use strict;
-use warnings FATAL => 'all';
+use warnings;
 
+$SIG{__WARN__} = sub {$ND::ERROR .= p $_[0]};
+
+chdir '/var/www/ndawn';
 
 sub handler {
-       local $ND::r = shift;
-       local $ND::req = Apache2::Request->new($ND::r, POST_MAX => "1M");
-       local $ND::DBH;
-       local $ND::USER;
+       my $r = shift;
+       my $req = Apache2::Request->new($r, POST_MAX => "1M");
+       local $ND::DBH = ND::DB::DB();
        local $ND::UID;
-       local $ND::PLANET;
-       local $ND::TEMPLATE;
-       local $ND::BODY;
-       local $ND::TICK;
-       local %ND::GROUPS;
        local $ND::ERROR;
-       local $ND::PAGE = $ND::req->param('page');
+       my $page = $req->param('page');
+       $r->no_cache;
 
        if ($ENV{'SCRIPT_NAME'} =~ /(\w+)(\.(pl|php|pm))?$/){
-               $ND::PAGE = $1 unless $1 eq 'index' and $3 eq 'pl';
-       }
-       $ND::PAGE = '' unless defined $ND::PAGE;
-       page();
-       return Apache2::Const::OK;
-}
-
-sub page {
-       our $DBH = ND::DB::DB();
-       $DBH->do(q{SET timezone = 'GMT'});
-
-       our $ERROR = '';
-
-       chdir '/var/www/ndawn/code';
-
-       our $TEMPLATE = HTML::Template->new(filename => 'templates/skel.tmpl', global_vars => 1, cache => 1);
-
-       our ($UID,$PLANET,$USER) = $DBH->selectrow_array('SELECT uid,planet,username FROM users WHERE username ILIKE ?'
-               ,undef,$ENV{'REMOTE_USER'});
-
-       our ($TICK) = $DBH->selectrow_array('SELECT tick()',undef);
-       $TICK = 0 unless defined $TICK;
-
-
-       my $query = $DBH->prepare('SELECT groupname,attack,gid from groupmembers NATURAL JOIN groups WHERE uid = ?');
-       $query->execute($UID);
-
-       our $ATTACKER = 0;
-       undef our %GROUPS;
-       while (my ($name,$attack,$gid) = $query->fetchrow()){
-               $GROUPS{$name} = $gid;
-               $ATTACKER = 1 if $attack;
-       }
-
-
-       our $LOG = $DBH->prepare('INSERT INTO log (uid,text) VALUES(?,?)');
-
-       tie my @pages, 'Tie::File', "/var/www/ndawn/code/pages", mode => O_RDONLY, memory => 0 or die $!;
-       $ND::PAGE = 'main' unless grep { /^$ND::PAGE$/ } @pages;
-
-       our $XML = 0;
-       $XML = 1 if param('xml') and $ND::PAGE =~ /^(raids)$/;
-
-       our $AJAX = 1;
-
-       my $type = 'text/html';
-       if ($XML){
-               $type = 'text/xml';
-               $ND::TEMPLATE = HTML::Template->new(filename => "templates/xml.tmpl", cache => 1);
-               $ND::BODY = HTML::Template->new(filename => "templates/$ND::PAGE.xml.tmpl", cache => 1);
-       }else{
-               $ND::BODY = HTML::Template->new(filename => "templates/$ND::PAGE.tmpl", global_vars => 1, cache => 1);
-               $ND::BODY->param(PAGE => $ND::PAGE);
-       }
-
-       unless (my $return = do "$ND::PAGE.pl"){
-               $ERROR .= "<p><b>couldn't parse $ND::PAGE: $@</b></p>" if $@;
-               $ERROR .= "<p><b>couldn't do $ND::PAGE: $!</b></p>"    unless defined $return && defined $!;
-               $ERROR .= "<p><b>couldn't run $ND::PAGE</b></p>"       unless $return;
+               $page = $1 unless $1 eq 'index' and $3 eq 'pl';
        }
+       $page = NDWeb::Page->new(PAGE => $page, DBH => $ND::DBH, URI => $ENV{REQUEST_URI}, USER_AGENT => $ENV{HTTP_USER_AGENT}, HTTP_ACCEPT => $ENV{HTTP_ACCEPT}, R => $r);
+       $page->render;
 
-       unless ($XML){
-               my $fleetupdate = $DBH->selectrow_array('SELECT landing_tick FROM fleets WHERE uid = ? AND fleet = 0',undef,$UID);
-
-               $fleetupdate = 0 unless defined $fleetupdate;
+       $ND::DBH->rollback unless $ND::DBH->{AutoCommit};
+       $ND::DBH->disconnect;
 
-               my ($unread) = $DBH->selectrow_array(q{
-                       SELECT count(*) AS unread
-FROM forum_boards fb NATURAL JOIN forum_threads ft 
-       JOIN forum_posts fp USING (ftid) LEFT OUTER JOIN 
-               (SELECT * FROM forum_thread_visits WHERE uid = $1) ftv ON ftv.ftid = ft.ftid
-WHERE ftv.time IS NULL OR fp.time > ftv.time AND
-       fbid IN (SELECT fbid FROM forum_access WHERE gid IN (SELECT groups($1)))
-                       },undef,$UID) or $ERROR .= p($DBH->errstr);
-
-               $TEMPLATE->param(UnreadPosts => $unread);
-               $TEMPLATE->param(Tick => $TICK);
-               $TEMPLATE->param(isMember => (($TICK - $fleetupdate < 24) || isScanner()) && $PLANET && isMember());
-               $TEMPLATE->param(isHC => isHC());
-               $TEMPLATE->param(isDC => isDC());
-               $TEMPLATE->param(isBC => isBC());
-               $TEMPLATE->param(isIntel => isBC());
-               $TEMPLATE->param(isAttacker => $ATTACKER && (!isMember() || ((($TICK - $fleetupdate < 24) || isScanner()) && $PLANET)));
-               if ($ATTACKER && (!isMember() || ((($TICK - $fleetupdate < 24) || isScanner()) && $PLANET))){
-                       $ND::TEMPLATE->param(Targets => listTargets());
+       if ($page->{RETURN}){
+               if($page->{RETURN} eq 'REDIRECT'){
+                       $r->headers_out->set(Location => $page->{REDIR_LOCATION});
+                       $r->status(Apache2::Const::REDIRECT);
+                       $r->rflush;
                }
-               $TEMPLATE->param(Coords => param('coords') ? param('coords') : '1:1:1');
-
        }
-       $TEMPLATE->param(Error => $ERROR);
-       $ND::TEMPLATE->param(BODY => $ND::BODY->output);
-       my $output = $TEMPLATE->output;
-       print header(-type=> $type, -charset => 'utf-8', -Content_Length => length $output);
-       print $output;
-
-
-       $DBH->rollback;
-       $DBH->disconnect;
-       $DBH = undef;
-       $UID = undef;
-       $USER = undef;
-       $PLANET = undef;
-       $TEMPLATE = undef;
-       $TICK = undef;
-       undef %GROUPS;
-       $ND::BODY = undef;
+       return Apache2::Const::OK;
 }
 
 1;