X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=ND.pm;h=997914241086d75eb46541e06dbd2e8b20121356;hb=c9e0c080884b28042ccca193dd91c8d55a3c3855;hp=8539d1e5256df0199a78331d009fd86ea5051514;hpb=3fbdd3816ab065ed3ac2b5f77e7617b2c09ea00c;p=ndwebbie.git diff --git a/ND.pm b/ND.pm index 8539d1e..9979142 100755 --- a/ND.pm +++ b/ND.pm @@ -26,16 +26,22 @@ use DBD::Pg qw(:pg_types); use Apache2::Request; use ND::Web::Include; use ND::DB; +use ND::Include; use Tie::File; use Fcntl 'O_RDONLY'; use strict; -use warnings FATAL => 'all'; +use warnings; +$SIG{__WARN__} = sub {$ND::ERROR .= p $_[0]}; + +chdir '/var/www/ndawn/code'; +our %PAGES; +our $NOACCESS = HTML::Template->new(filename => 'templates/NoAccess.tmpl', global_vars => 1, cache => 1); sub handler { local $ND::r = shift; local $ND::req = Apache2::Request->new($ND::r, POST_MAX => "1M"); - local $ND::DBH; + local $ND::DBH = ND::DB::DB(); local $ND::USER; local $ND::UID; local $ND::PLANET; @@ -44,21 +50,30 @@ sub handler { local $ND::TICK; local %ND::GROUPS; local $ND::ERROR; + local $ND::USETEMPLATE = 1; local $ND::PAGE = $ND::req->param('page'); 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(); + $ND::PAGE = 'main' unless (defined $ND::PAGE and exists $PAGES{$ND::PAGE}); + + $PAGES{$ND::PAGE}->{parse}->($ENV{REQUEST_URI}); + + if ($ND::USETEMPLATE){ + page($ND::DBH,$ND::PAGE); + }else{ + $PAGES{$ND::PAGE}->{render}->($ND::DBH,$ENV{REQUEST_URI}); + } + return Apache2::Const::OK; } sub page { - our $DBH = ND::DB::DB(); + my ($DBH,$PAGE) = @_; $DBH->do(q{SET timezone = 'GMT'}); - our $ERROR = ''; + our $ERROR; chdir '/var/www/ndawn/code'; @@ -81,14 +96,11 @@ sub page { $ATTACKER = 1 if $attack; } - 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; + $PAGES{$PAGE}->{process}->(); + my $type = 'text/html'; if ($XML){ $type = 'text/xml'; @@ -99,27 +111,20 @@ sub page { $ND::BODY->param(PAGE => $ND::PAGE); } - unless (my $return = do "$ND::PAGE.pl"){ - $ERROR .= "

couldn't parse $ND::PAGE: $@

" if $@; - $ERROR .= "

couldn't do $ND::PAGE: $!

" unless defined $return && defined $!; - $ERROR .= "

couldn't run $ND::PAGE

" unless $return; - } + $ND::BODY = $PAGES{$PAGE}->{render}->($DBH,$ND::BODY); unless ($XML){ my $fleetupdate = $DBH->selectrow_array('SELECT landing_tick FROM fleets WHERE uid = ? AND fleet = 0',undef,$UID); $fleetupdate = 0 unless defined $fleetupdate; - 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); - + my ($last_forum_visit) = $DBH->selectrow_array(q{SELECT last_forum_visit FROM users WHERE uid = $1} + ,undef,$UID) or $ERROR .= p($DBH->errstr); + my ($unread,$newposts) = $DBH->selectrow_array(unread_query,undef,$UID,$last_forum_visit) + or $ERROR .= p($DBH->errstr); + $TEMPLATE->param(UnreadPosts => $unread); + $TEMPLATE->param(NewPosts => $newposts); $TEMPLATE->param(Tick => $TICK); $TEMPLATE->param(isMember => (($TICK - $fleetupdate < 24) || isScanner()) && $PLANET && isMember()); $TEMPLATE->param(isHC => isHC()); @@ -131,6 +136,8 @@ WHERE ftv.time IS NULL OR fp.time > ftv.time AND $ND::TEMPLATE->param(Targets => listTargets()); } $TEMPLATE->param(Coords => param('coords') ? param('coords') : '1:1:1'); + my ($css) = $DBH->selectrow_array(q{SELECT css FROM users WHERE uid = $1},undef,$ND::UID); + $TEMPLATE->param(CSS => $css); } $TEMPLATE->param(Error => $ERROR);