$c->forward('findBoard');
$board = $c->stash->{board};
+ if ( !defined $board->{fbid}){
+ $c->detach('/default');
+ }
my $threads = $dbh->prepare(q{SELECT ft.ftid,u.username,ft.subject
,count(NULLIF(COALESCE(fp.time > ftv.time,TRUE),FALSE)) AS unread,count(fp.fpid) AS posts
while (my $thread = $threads->fetchrow_hashref){
push @threads,$thread;
}
- $c->stash(threads => \@threads);
- if ($board->{moderate}){
- my $categories = $dbh->prepare(q{SELECT fcid,category FROM forum_categories ORDER BY fcid});
- my $boards = $dbh->prepare(q{SELECT fb.fbid,fb.board, bool_or(fa.post) AS post
- FROM forum_boards fb NATURAL JOIN forum_access fa
- WHERE fb.fcid = $1 AND
- gid IN (SELECT groups($2))
- GROUP BY fb.fbid,fb.board
- ORDER BY fb.fbid
- });
- $categories->execute;
- my @categories;
- while (my $category = $categories->fetchrow_hashref){
- $boards->execute($category->{fcid},$c->stash->{UID});
-
- my @boards;
- while (my $b = $boards->fetchrow_hashref){
- next if (not $b->{post} or $b->{fbid} == $board->{fbid});
- push @boards,$b;
- }
- $category->{boards} = \@boards;
- push @categories,$category if @boards;
- }
- $c->stash(categories => \@categories);
+ if ( !(defined $board->{post}) && @threads == 0){
+ $c->acl_access_denied('test',$c->action,'No access to board')
}
-}
+ $c->stash(threads => \@threads);
+ $c->forward('listModeratorBoards', [$board->{fbid}]) if $board->{moderate};
+
+}
sub thread : Local {
my ( $self, $c, $thread ) = @_;
$c->forward('findThread');
unless ($c->stash->{thread}){
- $c->stash(template => 'access_denied.tt2');
+ $c->stash(template => 'default.tt2');
+ $c->res->status(404);
return;
}
my $query = $dbh->prepare(q{SELECT uid,username FROM users u
JOIN forum_priv_access fta USING (uid) WHERE fta.ftid = $1});
$query->execute($thread);
$c->stash(access => $query->fetchall_arrayref({}) );
- $c->forward('findUsers') if $c->stash->{thread}->{moderate};
$c->forward('findPosts');
$c->forward('markThreadAsRead') if $c->user_exists;
+ if ($c->stash->{thread}->{moderate}) {
+ $c->forward('findUsers');
+ $c->forward('listModeratorBoards', [$c->stash->{thread}->{fbid}]);
+ }
}
sub findPosts :Private {
$c->forward('markThreadAsRead',[$thread->{ftid}]);
}
$dbh->commit;
- $c->res->redirect($c->req->referer);
+ $c->forward('/redirect');
}
sub markThreadAsRead : Private {
$c->res->redirect($c->uri_for('allUnread'));
}
+sub privmsg : Local {
+ my ( $self, $c, $uid ) = @_;
+
+ $uid ||= 0;
+ $c->stash(uid => $uid);
+
+ $c->forward('findUsers');
+}
+
+sub postprivmsg : Local {
+ my ( $self, $c ) = @_;
+ my $dbh = $c->model;
+
+ $dbh->begin_work;
+ $c->forward('insertThread',[-1999]);
+
+ $c->req->parameters->{uid} = [$c->req->parameters->{uid}]
+ unless ref $c->req->parameters->{uid} eq 'ARRAY';
+ push @{$c->req->parameters->{uid}}, $c->user->id;
+ $c->forward('addaccess',[$c->stash->{thread}]);
+
+ $c->forward('addPost',[$c->stash->{thread}]);
+ $dbh->commit;
+}
+
sub addaccess : Private {
my ( $self, $c, $thread) = @_;
my $dbh = $c->model;
$insert->execute($thread,html_escape($c->req->param('message')),$c->stash->{UID});
}
+sub listModeratorBoards : Private {
+ my ( $self, $c, $fbid ) = @_;
+ my $dbh = $c->model;
+
+ my $categories = $dbh->prepare(q{SELECT fcid,category FROM forum_categories ORDER BY fcid});
+ my $boards = $dbh->prepare(q{SELECT fb.fbid,fb.board, bool_or(fa.post) AS post
+ FROM forum_boards fb NATURAL JOIN forum_access fa
+ WHERE fb.fcid = $1
+ AND gid IN (SELECT groups($2))
+ AND moderate
+ GROUP BY fb.fbid,fb.board
+ ORDER BY fb.fbid
+ });
+ $categories->execute;
+ my @categories;
+ while (my $category = $categories->fetchrow_hashref){
+ $boards->execute($category->{fcid},$c->stash->{UID});
+
+ my @boards;
+ while (my $b = $boards->fetchrow_hashref){
+ next if ($b->{fbid} == $fbid);
+ push @boards,$b;
+ }
+ $category->{boards} = \@boards;
+ push @categories,$category if @boards;
+ }
+ $c->stash(categories => \@categories);
+}
+
=head1 AUTHOR
Michael Andreen (harv@ruin.nu)