diff --git a/docs/changelog/6.x.x.txt b/docs/changelog/6.x.x.txt
index 2d7954281..dc3b64f81 100644
--- a/docs/changelog/6.x.x.txt
+++ b/docs/changelog/6.x.x.txt
@@ -93,5 +93,5 @@ webgui.
the distribution. If you need those old upgrades you can still get them
from previous distributions or th 5.5 branch in CVS.
- Added Job Listing templates to the USS.
-
+ - Added a view privileges setting to each forum.
diff --git a/docs/upgrades/upgrade_5.9.9-6.0.0.sql b/docs/upgrades/upgrade_5.9.9-6.0.0.sql
index 261bb1f5a..c96921ae8 100644
--- a/docs/upgrades/upgrade_5.9.9-6.0.0.sql
+++ b/docs/upgrades/upgrade_5.9.9-6.0.0.sql
@@ -681,4 +681,5 @@ INSERT INTO help VALUES (80,'WebGUI',1087,1088,'58,WebGUI;81,WebGUI;79,WebGUI;')
INSERT INTO help VALUES (81,'WebGUI',1089,1090,'58,WebGUI;79,WebGUI;80,WebGUI;50,WebGUI;');
INSERT INTO template VALUES (8,'Synopsis','
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n\r\n
','Navigation',1,1);
INSERT INTO Navigation VALUES (18,'Synopsis',99,'self_and_descendants','current',-1,8,0,0,0,0);
+alter table forum add column groupToView int not null default 7;
diff --git a/lib/WebGUI/Forum.pm b/lib/WebGUI/Forum.pm
index 7e21da0c8..818ad38f9 100644
--- a/lib/WebGUI/Forum.pm
+++ b/lib/WebGUI/Forum.pm
@@ -37,6 +37,7 @@ Data management class for forums.
$forum = WebGUI::Forum->new($forumId);
$boolean = $forum->canPost;
+ $boolean = $forum->canView;
$scalar = $forum->get($param);
$obj = $forum->getThread($threadId);
$boolean = $forum->isModerator;
@@ -79,7 +80,29 @@ Defaults to $session{user}{userId}. Specify a user ID to check privileges for.
sub canPost {
my ($self, $userId) = @_;
$userId = $session{user}{userId} unless ($userId);
- return WebGUI::Privilege::isInGroup($self->get("groupToPost"));
+ return (WebGUI::Privilege::isInGroup($self->get("groupToPost"),$userId) || $self->isModerator);
+}
+
+#-------------------------------------------------------------------
+
+=head2 canView ( [ userId ] )
+
+Returns a boolean whether the user has the privileges required to view the forum.
+
+=over
+
+=item userId
+
+Defaults to $session{user}{userId}. Specify a user ID to check privileges for.
+
+=back
+
+=cut
+
+sub canView {
+ my ($self, $userId) = @_;
+ $userId = $session{user}{userId} unless ($userId);
+ return (WebGUI::Privilege::isInGroup($self->get("groupToView"),$userId) || $self->canPost);
}
#-------------------------------------------------------------------
diff --git a/lib/WebGUI/Forum/UI.pm b/lib/WebGUI/Forum/UI.pm
index 890bbb004..3b1f50e60 100644
--- a/lib/WebGUI/Forum/UI.pm
+++ b/lib/WebGUI/Forum/UI.pm
@@ -916,6 +916,12 @@ sub forumProperties {
-value=>($forum->get("karmaPerPost") || 0)
);
}
+ $f->group(
+ -name=>"groupToView",
+ -label=>WebGUI::International::get(872),
+ -value=>[$forum->get("groupToView")],
+ -uiLevel=>5
+ );
$f->group(
-name=>"groupToPost",
-label=>WebGUI::International::get(564),
@@ -962,6 +968,7 @@ sub forumPropertiesSave {
filterPosts=>$session{form}{filterPosts},
postsPerPage=>$session{form}{postsPerPage},
karmaPerPost=>$session{form}{karmaPerPost},
+ groupToView=>$session{form}{groupToView},
groupToPost=>$session{form}{groupToPost},
moderatePosts=>$session{form}{moderatePosts},
groupToModerate=>$session{form}{groupToModerate}
@@ -2270,6 +2277,7 @@ sub www_viewForum {
WebGUI::Session::setScratch("forumSortBy",$session{form}{sortBy});
$forumId = $session{form}{forumId} unless ($forumId);
my $forum = WebGUI::Forum->new($forumId);
+ return WebGUI::Privilege::insufficient() unless ($forum->canView);
my $var = getForumTemplateVars($caller, $forum);
return WebGUI::Template::process(WebGUI::Template::get($forum->get("forumTemplateId"),"Forum"), $var);
}
@@ -2299,6 +2307,7 @@ sub www_viewThread {
WebGUI::Session::setScratch("forumThreadLayout",$session{form}{layout});
$postId = $session{form}{forumPostId} unless ($postId);
my $post = WebGUI::Forum::Post->new($postId);
+ return WebGUI::Privilege::insufficient() unless ($post->getThread->getForum->canView);
my $var = getThreadTemplateVars($caller, $post);
if ($post->get("forumPostId") == $post->getThread->get("rootPostId") && !$post->canView) {
return www_viewForum($caller, $post->getThread->getForum->get("forumId"));
diff --git a/lib/WebGUI/Wobject/MessageBoard.pm b/lib/WebGUI/Wobject/MessageBoard.pm
index 273a687da..213b7348c 100644
--- a/lib/WebGUI/Wobject/MessageBoard.pm
+++ b/lib/WebGUI/Wobject/MessageBoard.pm
@@ -248,6 +248,7 @@ sub www_view {
}
} else {
my $forum = WebGUI::Forum->new($forumMeta->{forumId});
+ next unless ($forum->canView);
if ($count == 1) {
$var{'default.listing'} = WebGUI::Forum::UI::www_viewForum({
callback=>$callback,