$threads->execute($ND::UID) or warn $DBH->errstr;
my @categories;
my $category = {fcid => 0};
- my $board = {fbid => 0};
+ my $board = {id => 0};
while (my $thread = $threads->fetchrow_hashref){
if ($category->{fcid} != $thread->{fcid}){
delete $category->{fcid};
$category = {fcid => $thread->{fcid}, category => $thread->{category}};
push @categories,$category;
}
- if ($board->{fbid} != $thread->{fbid}){
- delete $board->{fbid};
- $board = {fbid => $thread->{fbid}, board => $thread->{board}};
+ if ($board->{id} != $thread->{fbid}){
+ $board = {id => $thread->{fbid}, board => $thread->{board}};
push @{$category->{Boards}},$board;
}
delete $thread->{fcid};
push @{$board->{Threads}},$thread;
}
delete $category->{fcid};
- delete $board->{fbid};
$BODY->param(Categories => \@categories);
}elsif($board){ #List threads in this board
}else{ #List boards
$BODY->param(Overview => 1);
my $boards = $DBH->prepare(q{SELECT fcid,category,fb.fbid AS id,fb.board
- ,count(NULLIF(COALESCE(fp.time > ftv.time,TRUE),FALSE)) AS unread
+ ,count(NULLIF(COALESCE(fp.fpid::BOOLEAN,FALSE)
+ AND COALESCE(fp.time > ftv.time,TRUE),FALSE)) AS unread
,date_trunc('seconds',max(fp.time)::timestamp) as last_post
FROM forum_categories
JOIN forum_boards fb USING (fcid)
- JOIN forum_threads ft USING (fbid)
- JOIN forum_posts fp USING (ftid)
+ LEFT OUTER JOIN forum_threads ft USING (fbid)
+ LEFT OUTER JOIN forum_posts fp USING (ftid)
LEFT OUTER JOIN (SELECT * FROM forum_thread_visits WHERE uid = $1) ftv USING (ftid)
WHERE EXISTS (SELECT fbid FROM forum_access WHERE fbid = fb.fbid AND gid IN (SELECT groups($1)))
GROUP BY fcid,category,fb.fbid, fb.board