]> ruin.nu Git - ndwebbie.git/blobdiff - ND/Web/Forum.pm
restructure
[ndwebbie.git] / ND / Web / Forum.pm
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;