From 44b35c3412ee125f6d9a0240c3a4c7c9bb483ed3 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Sun, 5 Oct 2003 00:30:29 +0000 Subject: [PATCH] updating discussion --- docs/upgrades/upgrade_5.4.4-5.5.0.sql | 1 + lib/WebGUI/Forum/Post.pm | 17 ++++++++++++ lib/WebGUI/Forum/Thread.pm | 35 ++++++++++++++++++++---- lib/WebGUI/Forum/Web.pm | 38 ++++++++++++++++++++++++--- 4 files changed, 82 insertions(+), 9 deletions(-) diff --git a/docs/upgrades/upgrade_5.4.4-5.5.0.sql b/docs/upgrades/upgrade_5.4.4-5.5.0.sql index ad64d3308..0dfd2808e 100644 --- a/docs/upgrades/upgrade_5.4.4-5.5.0.sql +++ b/docs/upgrades/upgrade_5.4.4-5.5.0.sql @@ -159,4 +159,5 @@ delete from international where languageId=1 and namespace='WebGUI' and internat insert into international (internationalId,languageId,namespace,message,lastUpdated,context) values (1018,1,'WebGUI','Start a new thread.', 1065279960,'Add a new line of discussion to a forum.'); delete from international where languageId=1 and namespace='WebGUI' and internationalId=1020; insert into international (internationalId,languageId,namespace,message,lastUpdated,context) values (1020,1,'WebGUI','Rating', 1065280882,'How useful/interesting a user thinks another poster\'s post is.'); +alter table forumThread add column status varchar(30) not null default 'approved'; diff --git a/lib/WebGUI/Forum/Post.pm b/lib/WebGUI/Forum/Post.pm index 754cf44b1..dba17a5ac 100644 --- a/lib/WebGUI/Forum/Post.pm +++ b/lib/WebGUI/Forum/Post.pm @@ -12,6 +12,13 @@ sub addView { $self->getThread->addView; } +sub canEdit { + my ($self, $userId) = @_; + $userId = $session{user}{userId} unless ($userId); + return ($self->getThread->getForum->isModerator || ($self->get("userId") == $userId && $userId != 1 + && $self->getThread->getForum->get("editTimeout") < (WebGUI::DateTime::time() - $self->get("dateOfPost")))); +} + sub create { my ($self, $data) = @_; $data->{dateOfPost} = WebGUI::DateTime::time(); @@ -54,6 +61,7 @@ sub getThread { sub incrementViews { my ($self) = @_; WebGUI::SQL->write("update forumPost set views=views+1 where forumPostId=".$self->get("forumPostId")); + $self->getThread->incrementViews; } sub isMarkedRead { @@ -89,16 +97,25 @@ sub set { sub setStatusApproved { my ($self) = @_; $self->set({status=>'approved'}); + $self->getThread->setStatusApproved if ($self->getThread->get("rootPostId") == $self->get("forumPostId")); +} + +sub setStatusDeleted { + my ($self) = @_; + $self->set({status=>'deleted'}); + $self->getThread->setStatusDeleted if ($self->getThread->get("rootPostId") == $self->get("forumPostId")); } sub setStatusDenied { my ($self) = @_; $self->set({status=>'denied'}); + $self->getThread->setStatusDenied if ($self->getThread->get("rootPostId") == $self->get("forumPostId")); } sub setStatusPending { my ($self) = @_; $self->set({status=>'pending'}); + $self->getThread->setStatusPending if ($self->getThread->get("rootPostId") == $self->get("forumPostId")); } sub unmarkRead { diff --git a/lib/WebGUI/Forum/Thread.pm b/lib/WebGUI/Forum/Thread.pm index abfdde646..93c9d3520 100644 --- a/lib/WebGUI/Forum/Thread.pm +++ b/lib/WebGUI/Forum/Thread.pm @@ -82,6 +82,11 @@ sub isLocked { return $self->get("isLocked"); } +sub incrementViews { + my ($self) = @_; + WebGUI::SQL->write("update forumThread set views=views+1 where forumThreadId=".$self->get("forumThreadId")); +} + sub isSticky { my ($self) = @_; return $self->get("isSticky"); @@ -100,11 +105,6 @@ sub lock { $self->set({isLocked=>1}); } -sub stick { - my ($self) = @_; - $self->set({isSticky=>1}); -} - sub new { my ($class, $forumThreadId) = @_; my $properties = WebGUI::SQL->getRow("forumThread","forumThreadId",$forumThreadId); @@ -122,6 +122,31 @@ sub set { $self->{_properties} = $data; } +sub setStatusApproved { + my ($self) = @_; + $self->set({status=>'approved'}); +} + +sub setStatusDeleted { + my ($self) = @_; + $self->set({status=>'deleted'}); +} + +sub setStatusDenied { + my ($self) = @_; + $self->set({status=>'denied'}); +} + +sub setStatusPending { + my ($self) = @_; + $self->set({status=>'pending'}); +} + +sub stick { + my ($self) = @_; + $self->set({isSticky=>1}); +} + sub subscribe { my ($self, $userId) = @_; $userId = $session{user}{userId} unless ($userId); diff --git a/lib/WebGUI/Forum/Web.pm b/lib/WebGUI/Forum/Web.pm index 5f9e20a29..7ef4c82a2 100644 --- a/lib/WebGUI/Forum/Web.pm +++ b/lib/WebGUI/Forum/Web.pm @@ -101,8 +101,7 @@ sub _getPostTemplateVars { $var->{'post.status.label'} = WebGUI::International::get(553); $var->{'post.isLocked'} = $thread->isLocked; $var->{'post.isModerator'} = $forum->isModerator; - $var->{'post.canEdit'} = ($forum->isModerator || ($post->get("userId") == $session{user}{userId} - && $session{user}{userId} != 1 && $forum->get("editTimeout") < (WebGUI::DateTime::time()-$post->get("dateOfPost")))); + $var->{'post.canEdit'} = $post->canEdit($session{user}{userId}); $var->{'post.user.isVisitor'} = ($post->get("userId") == 1); $var->{'post.user.label'} = WebGUI::International::get(244); $var->{'post.user.name'} = $post->get("username"); @@ -202,9 +201,40 @@ sub viewForum { return WebGUI::Template::process(WebGUI::Template::get(1,"Forum"), \%var); } -sub www_deleteThread { +sub www_approvePost { my ($callback) = @_; - + my $post = WebGUI::Forum::Post->new($session{form}{forumPostId}); + return WebGUI::Privilege::insufficient() unless ($post->getThread->getForum->isModerator); + $post->setStatusApproved; + return www_viewThread($callback); +} + +sub www_deletePost { + my ($callback) = @_; + my $post = WebGUI::Forum::Post->new($session{form}{forumPostId}); + return WebGUI::Privilege::insufficient() unless ($post->canEdit); + my $output = '

'.WebGUI::International::get(42).'

'; + $output .= WebGUI::International::get(401).'

'; + $output .= '

'.WebGUI::International::get(44).''; + $output .= '   '.WebGUI::International::get(45).'
'; + return $output; +} + +sub www_deletePostConfirm { + my ($callback) = @_; + my $post = WebGUI::Forum::Post->new($session{form}{forumPostId}); + return WebGUI::Privilege::insufficient() unless ($post->getThread->getForum->isModerator); + $post->setStatusDeleted; + return viewForum($callback,$post->getThread->get("forumId")); +} + +sub www_denyPost { + my ($callback) = @_; + my $post = WebGUI::Forum::Post->new($session{form}{forumPostId}); + return WebGUI::Privilege::insufficient() unless ($post->canEdit($session{user}{userId})); + $post->setStatusDenied; + return www_viewThread($callback); } sub www_nextThread {