From 3a845e90271f70931beeb8b2bf1f1a464b24d315 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Thu, 4 Mar 2004 00:25:02 +0000 Subject: [PATCH] added a view privileges setting to each forum --- docs/changelog/6.x.x.txt | 2 +- docs/upgrades/upgrade_5.9.9-6.0.0.sql | 1 + lib/WebGUI/Forum.pm | 25 ++++++++++++++++++++++++- lib/WebGUI/Forum/UI.pm | 9 +++++++++ lib/WebGUI/Wobject/MessageBoard.pm | 1 + 5 files changed, 36 insertions(+), 2 deletions(-) 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
\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,