From 247166baf2ec338faed65b8372e6282906f5caa1 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 2 Oct 2009 12:45:03 -0700 Subject: [PATCH] In the CS, do not show a profile link unless the user is not a visitor. Fixes bug #11084 If the post is owned by Visitor, do not show the link because no one is allowed to see Visitor's profile. If the current user is Visitor, do not show the link because Visitor is not allowed to view anyone's profile. --- docs/changelog/7.x.x.txt | 1 + .../root_import_collaboration.wgpkg | Bin 0 -> 38883 bytes lib/WebGUI/Asset/Post.pm | 45 ++++----- lib/WebGUI/Asset/Wobject/Collaboration.pm | 28 +++--- lib/WebGUI/Help/Asset_Collaboration.pm | 5 +- .../i18n/English/Asset_Collaboration.pm | 17 +++- lib/WebGUI/i18n/English/Asset_Template.pm | 4 +- t/Asset/Post.t | 52 +++++++--- .../Wobject/Collaboration/templateVariables.t | 92 ++++++++++++++++++ 9 files changed, 194 insertions(+), 50 deletions(-) create mode 100644 docs/upgrades/packages-7.7.22/root_import_collaboration.wgpkg create mode 100644 t/Asset/Wobject/Collaboration/templateVariables.t diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index a71892a55..31f97fa8c 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -35,6 +35,7 @@ - fixed #11083: TGC template bug fixes, round #1 - fixed #10544: Child assets under uncommitted parents - fixed failure in test 250 of t/00_compile.t + - fixed #11084: option to view private profiles 7.8.0 - upgraded YUI to 2.8.0r4 diff --git a/docs/upgrades/packages-7.7.22/root_import_collaboration.wgpkg b/docs/upgrades/packages-7.7.22/root_import_collaboration.wgpkg new file mode 100644 index 0000000000000000000000000000000000000000..ec10bf3e75d16529fb51c9f790723d3bc1d2fcf1 GIT binary patch literal 38883 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 z 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ʆWG|OlFWl@3v=S5M!|F& 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 literal 0 HcmV?d00001 diff --git a/lib/WebGUI/Asset/Post.pm b/lib/WebGUI/Asset/Post.pm index ad8d9e113..6f1dd7c22 100644 --- a/lib/WebGUI/Asset/Post.pm +++ b/lib/WebGUI/Asset/Post.pm @@ -710,30 +710,31 @@ Returns a hash reference of template variables for this Post. =cut sub getTemplateVars { - my $self = shift; + my $self = shift; my $session = $self->session; - my %var = %{$self->get}; + my %var = %{$self->get}; my $postUser = WebGUI::User->new($session, $self->get("ownerUserId")); - $var{"userId"} = $self->get("ownerUserId"); - $var{"user.isPoster"} = $self->isPoster; - $var{"avatar.url"} = $self->getAvatarUrl; - $var{"userProfile.url"} = $postUser->getProfileUrl($self->getUrl()); - $var{"dateSubmitted.human"} =$self->session->datetime->epochToHuman($self->get("creationDate")); - $var{"dateUpdated.human"} =$self->session->datetime->epochToHuman($self->get("revisionDate")); - $var{'title.short'} = $self->chopTitle; - $var{content} = $self->formatContent if ($self->getThread); - $var{'user.canEdit'} = $self->canEdit if ($self->getThread); - $var{"delete.url"} = $self->getDeleteUrl; - $var{"edit.url"} = $self->getEditUrl; - $var{"status"} = $self->getStatus; - $var{"reply.url"} = $self->getReplyUrl; - $var{'reply.withquote.url'} = $self->getReplyUrl(1); - $var{'url'} = $self->getUrl.'#id'.$self->getId; - $var{'url.raw'} = $self->getUrl; - $var{'rating.value'} = $self->get("rating")+0; - $var{'rate.url.thumbsUp'} = $self->getRateUrl(1); - $var{'rate.url.thumbsDown'} = $self->getRateUrl(-1); - $var{'hasRated'} = $self->hasRated; + $var{"userId"} = $self->get("ownerUserId"); + $var{"user.isPoster"} = $self->isPoster; + $var{"avatar.url"} = $self->getAvatarUrl; + $var{"userProfile.url"} = $postUser->getProfileUrl($self->getUrl()); + $var{"hideProfileUrl" } = $self->get('ownerUserId') eq '1' || $session->user->isVisitor; + $var{"dateSubmitted.human"} = $self->session->datetime->epochToHuman($self->get("creationDate")); + $var{"dateUpdated.human"} = $self->session->datetime->epochToHuman($self->get("revisionDate")); + $var{'title.short'} = $self->chopTitle; + $var{content} = $self->formatContent if ($self->getThread); + $var{'user.canEdit'} = $self->canEdit if ($self->getThread); + $var{"delete.url"} = $self->getDeleteUrl; + $var{"edit.url"} = $self->getEditUrl; + $var{"status"} = $self->getStatus; + $var{"reply.url"} = $self->getReplyUrl; + $var{'reply.withquote.url'} = $self->getReplyUrl(1); + $var{'url'} = $self->getUrl.'#id'.$self->getId; + $var{'url.raw'} = $self->getUrl; + $var{'rating.value'} = $self->get("rating")+0; + $var{'rate.url.thumbsUp'} = $self->getRateUrl(1); + $var{'rate.url.thumbsDown'} = $self->getRateUrl(-1); + $var{'hasRated'} = $self->hasRated; my $gotImage; my $gotAttachment; @{$var{'attachment_loop'}} = (); diff --git a/lib/WebGUI/Asset/Wobject/Collaboration.pm b/lib/WebGUI/Asset/Wobject/Collaboration.pm index 0f3efef69..8d13c67a4 100644 --- a/lib/WebGUI/Asset/Wobject/Collaboration.pm +++ b/lib/WebGUI/Asset/Wobject/Collaboration.pm @@ -100,14 +100,16 @@ A reference to a WebGUI::Paginator object. =cut sub appendPostListTemplateVars { - my $self = shift; - my $var = shift; - my $p = shift; - my $page = $p->getPageData; - my $i = 0; - my ($icon, $datetime) = $self->session->quick(qw(icon datetime)); + my $self = shift; + my $session = $self->session; + my $var = shift; + my $p = shift; + my $page = $p->getPageData; + my $i = 0; + my ($icon, $datetime) = $session->quick(qw(icon datetime)); + my $isVisitor = $session->user->isVisitor; foreach my $row (@$page) { - my $post = WebGUI::Asset->new($self->session,$row->{assetId}, $row->{className}, $row->{revisionDate}); + my $post = WebGUI::Asset->new($session,$row->{assetId}, $row->{className}, $row->{revisionDate}); $post->{_parent} = $self; # caching parent for efficiency my $controls = $icon->delete('func=delete',$post->get("url"),"Delete") . $icon->edit('func=edit',$post->get("url")); if ($self->get("sortBy") eq "lineage") { @@ -132,6 +134,7 @@ sub appendPostListTemplateVars { "lastReply.title" => $lastPost->get("title"), "lastReply.user.isVisitor" => $lastPost->get("ownerUserId") eq "1", "lastReply.username" => $lastPost->get("username"), + "lastReply.hideProfileUrl" => $lastPost->get("ownerUserId") eq "1" || $isVisitor, "lastReply.userProfile.url" => $lastPost->getPosterProfileUrl(), "lastReply.dateSubmitted.human" => $datetime->epochToHuman($lastPost->get("creationDate"),"%z"), "lastReply.timeSubmitted.human" => $datetime->epochToHuman($lastPost->get("creationDate"),"%Z"), @@ -158,6 +161,7 @@ sub appendPostListTemplateVars { "dateUpdated.human" => $datetime->epochToHuman($post->get("revisionDate"),"%z"), "timeSubmitted.human" => $datetime->epochToHuman($post->get("creationDate"),"%Z"), "timeUpdated.human" => $datetime->epochToHuman($post->get("revisionDate"),"%Z"), + "hideProfileUrl" => $post->get('ownerUserId') eq '1' || $isVisitor, "userProfile.url" => $post->getPosterProfileUrl, "user.isVisitor" => $post->get("ownerUserId") eq "1", "edit.url" => $post->getEditUrl, @@ -175,7 +179,7 @@ sub appendPostListTemplateVars { if ($row->{className} =~ m/^WebGUI::Asset::Post::Thread/) { $postVars{'rating'} = $post->get('threadRating'); } - push(@{$var->{post_loop}}, \%postVars ); + push(@{$var->{post_loop}}, \%postVars ); $i++; } $p->appendTemplateVars($var); @@ -1222,10 +1226,10 @@ sub getViewTemplateVars { my %var; $var{'user.canPost'} = $self->canPost; $var{'user.canStartThread'} = $self->canStartThread; - $var{"add.url"} = $self->getNewThreadUrl; - $var{"rss.url"} = $self->getRssFeedUrl; - $var{'user.isModerator'} = $self->canModerate; - $var{'user.isVisitor'} = ($self->session->user->isVisitor); + $var{"add.url"} = $self->getNewThreadUrl; + $var{"rss.url"} = $self->getRssFeedUrl; + $var{'user.isModerator'} = $self->canModerate; + $var{'user.isVisitor'} = ($self->session->user->isVisitor); $var{'user.isSubscribed'} = $self->isSubscribed; $var{'sortby.title.url'} = $self->getSortByUrl("title"); $var{'sortby.username.url'} = $self->getSortByUrl("username"); diff --git a/lib/WebGUI/Help/Asset_Collaboration.pm b/lib/WebGUI/Help/Asset_Collaboration.pm index e830ad16f..4605ec3d4 100644 --- a/lib/WebGUI/Help/Asset_Collaboration.pm +++ b/lib/WebGUI/Help/Asset_Collaboration.pm @@ -103,7 +103,9 @@ our $HELP = { { 'name' => 'timeSubmitted.human' }, { 'name' => 'timeUpdated.human' }, { 'name' => 'userProfile.url' }, - { 'name' => 'user.isVisitor' }, + { 'name' => 'hideProfileUrl' }, + { 'name' => 'user.isVisitor', + 'description' => 'post_loop_user.isVisitor' }, { 'name' => 'edit.url' }, { 'name' => 'controls' }, { 'name' => 'isSecond' }, @@ -116,6 +118,7 @@ our $HELP = { { 'name' => 'lastReply.url' }, { 'name' => 'lastReply.title' }, { 'name' => 'lastReply.user.isVisitor' }, + { 'name' => 'lastReply.hideProfileUrl' }, { 'name' => 'lastReply.username' }, { 'name' => 'lastReply.userProfile.url' }, { 'name' => 'lastReply.dateSubmitted.human' }, diff --git a/lib/WebGUI/i18n/English/Asset_Collaboration.pm b/lib/WebGUI/i18n/English/Asset_Collaboration.pm index 170eedc82..ad2d4d40c 100644 --- a/lib/WebGUI/i18n/English/Asset_Collaboration.pm +++ b/lib/WebGUI/i18n/English/Asset_Collaboration.pm @@ -1293,11 +1293,21 @@ the preview is displayed, the Post can either be edited or canceled.|, lastUpdated => 1149655722, }, - 'user.isVisitor' => { + 'post_loop_user.isVisitor' => { message => q|A conditional that is true if the poster is a visitor.|, lastUpdated => 1149655722, }, + 'user.isVisitor' => { + message => q|A conditional that is true if the current user is a visitor.|, + lastUpdated => 1149655722, + }, + + 'hideProfileUrl' => { + message => q|A conditional that is true if the poster is a visitor, or the current user is a visitor. In the first case, Visitor's profile is not visible to any user. In the second case, Visitor is not allowed to view any user's profile|, + lastUpdated => 1254506340, + }, + 'edit.url' => { message => q|The URL to edit this Post.|, lastUpdated => 1149655722, @@ -1359,6 +1369,11 @@ user has an avatar.|, lastUpdated => 1149655722, }, + 'lastReply.hideProfileUrl' => { + message => q|A conditional that is true if the poster of the last reply is a visitor, or the current user is a visitor. In the first case, Visitor's profile is not visible to any user. In the second case, Visitor is not allowed to view any user's profile|, + lastUpdated => 1254506340, + }, + 'lastReply.username' => { message => q|The name of user who submitted the last reply.|, lastUpdated => 1149655722, diff --git a/lib/WebGUI/i18n/English/Asset_Template.pm b/lib/WebGUI/i18n/English/Asset_Template.pm index 5b4319033..f381d584e 100644 --- a/lib/WebGUI/i18n/English/Asset_Template.pm +++ b/lib/WebGUI/i18n/English/Asset_Template.pm @@ -33,9 +33,9 @@ our $I18N = { }, 'template error' => { - message => q|There is a syntax error in this template, %s, %s. Please correct.|, + message => q|There is a syntax error in this template, %s, %s, %s. Please correct.|, context => q|Error when executing template|, - lastUpdated => 1244476530, + lastUpdated => 1254512327, }, 'namespace description' => { diff --git a/t/Asset/Post.t b/t/Asset/Post.t index 81fa89265..ec495ae1a 100644 --- a/t/Asset/Post.t +++ b/t/Asset/Post.t @@ -8,13 +8,6 @@ # http://www.plainblack.com info@plainblack.com #------------------------------------------------------------------- -# XXX I (chrisn) started this file to test the features I added to the -# Collaboration / Post system for 7.5, but didn't have the time available to me -# to do a full test suite for the Post Wobject. This means that this test suite -# is *largely incomplete* and should be finished. What is here *is* the -# following: -# -# # 1. The basic framework for a test suite for the Post Asset. # Includes setup, cleanup, boilerplate, etc. Basically the really boring, # repetitive parts of the test that you don't want to write yourself. @@ -26,7 +19,7 @@ use strict; use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; -use Test::More tests => 9; # increment this value for each test you create +use Test::More tests => 16; # increment this value for each test you create use WebGUI::Asset::Wobject::Collaboration; use WebGUI::Asset::Post; use WebGUI::Asset::Post::Thread; @@ -114,7 +107,11 @@ ok($post->canEdit(), "User in groupToEditPost group can edit post after the time $session->user({userId => $groupIdEditUser->userId}); ok($post->canEdit(), "User in groupIdEditUserGroup group can edit post after the timeout"); +###################################################################### +# # getSynopsisAndContent +# +###################################################################### my ($synopsis, $content) = $post->getSynopsisAndContent('', q|Brandheiße Neuigkeiten rund um's Klettern für euch aus der Region |); is($synopsis, q|Brandheiße Neuigkeiten rund um's Klettern für euch aus der Region |, 'getSynopsisAndContent: UTF8 characters okay'); @@ -132,9 +129,40 @@ is($synopsis, q|less than < greater than >|, '... HTML escaped characters ($synopsis, $content) = $post->getSynopsisAndContent('', q|

less than < greater than >

|); is($synopsis, q|less than < greater than >|, '... HTML entities decoded by HTML::splitTag'); -TODO: { - local $TODO = "Tests to make later"; - ok(0, 'Whole lot more work to do here'); -} +###################################################################### +# +# getTemplateVars +# +###################################################################### + +my $versionTag2 = WebGUI::VersionTag->getWorking($session); +my $post1 = $collab->addChild({ + className => 'WebGUI::Asset::Post::Thread', + content => 'hello, world!', + ownerUserId => 3, +}, @addArgs); +my $post2 = $collab->addChild({ + className => 'WebGUI::Asset::Post::Thread', + content => 'hello, world!', + ownerUserId => 1, +}, @addArgs); +$versionTag2->commit(); +WebGUI::Test->tagsToRollback($versionTag); +my $variables; +$session->user({userId => 1}); +$variables = $post1->getTemplateVars(); +is( $variables->{'ownerUserId'}, 3, 'first post owned by admin'); +ok( $variables->{'hideProfileUrl'}, 'hide profile url, since current user is visitor'); +$variables = $post2->getTemplateVars(); +is( $variables->{'ownerUserId'}, 1, 'first post owned by admin'); +ok( $variables->{'hideProfileUrl'}, 'hide profile url, since current user is visitor'); + +$session->user({userId => 3}); +$variables = $post1->getTemplateVars(); +is( $variables->{'ownerUserId'}, 3, 'first post owned by admin'); +ok( !$variables->{'hideProfileUrl'}, 'show profile url'); +$variables = $post2->getTemplateVars(); +is( $variables->{'ownerUserId'}, 1, 'first post owned by admin'); +ok( $variables->{'hideProfileUrl'}, 'hide profile url, since poster is visitor'); # vim: syntax=perl filetype=perl diff --git a/t/Asset/Wobject/Collaboration/templateVariables.t b/t/Asset/Wobject/Collaboration/templateVariables.t new file mode 100644 index 000000000..c71790d45 --- /dev/null +++ b/t/Asset/Wobject/Collaboration/templateVariables.t @@ -0,0 +1,92 @@ +# vim:syntax=perl +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2009 Plain Black Corporation. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------ +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------ + +# Test the Collaboration system template variables +# +# + +use FindBin; +use strict; +use lib "$FindBin::Bin/../../../lib"; +use WebGUI::Test; # Must use this before any other WebGUI modules +use Test::More; +use Test::Deep; +use Data::Dumper; +use WebGUI::Session; + +#---------------------------------------------------------------------------- +# Tests +plan tests => 20; # Increment this number for each test you create + +#---------------------------------------------------------------------------- +# Init +my $session = WebGUI::Test->session; +my @addChildArgs = ( {skipAutoCommitWorkflows=>1} ); +my $collab = WebGUI::Asset->getImportNode( $session )->addChild({ + className => 'WebGUI::Asset::Wobject::Collaboration', + threadsPerPage => 20, + displayLastReply => 1, +}); + +my @threads = ( + $collab->addChild( { + className => 'WebGUI::Asset::Post::Thread', + title => "X - Foo", + isSticky => 0, + ownerUserId => 1, + }, undef, 1, @addChildArgs), + $collab->addChild( { + className => 'WebGUI::Asset::Post::Thread', + title => "X - Bar", + isSticky => 0, + ownerUserId => 3, + }, undef, 2, @addChildArgs), +); + +$_->setSkipNotification for @threads; # 100+ messages later... +my $versionTag = WebGUI::VersionTag->getWorking( $session ); +$versionTag->commit; +WebGUI::Test->tagsToRollback($versionTag); + +my $templateVars; +my $posts; +$session->user({userId => 3}); +$templateVars = $collab->getViewTemplateVars(); + +##Threads come in reverse order, most recent first +$posts = $templateVars->{post_loop}; +is( $posts->[1]->{'ownerUserId'}, 1, 'first post owned by visitor'); +ok( $posts->[1]->{'user.isVisitor'}, 'first post made by visitor'); +ok( $posts->[1]->{'hideProfileUrl'}, 'hide profile url, since post made by visitor'); +ok( $posts->[1]->{'lastReply.user.isVisitor'}, 'lastReply not made by visitor'); +ok( $posts->[1]->{'lastReply.hideProfileUrl'}, 'lastReply show profile url, since post not made by visitor, and user is not visitor'); +is( $posts->[0]->{'ownerUserId'}, 3, 'second post owned by admin'); +ok( !$posts->[0]->{'user.isVisitor'}, 'first post made by visitor'); +ok( !$posts->[0]->{'hideProfileUrl'}, 'show profile url, since post made by admin, and user is not visitor'); +ok( !$posts->[0]->{'lastReply.user.isVisitor'}, 'lastReply not made by visitor'); +ok( !$posts->[0]->{'lastReply.hideProfileUrl'}, 'lastReply show profile url, since post not made by visitor, and user is not visitor'); + +$session->user({userId => 1}); +$templateVars = $collab->getViewTemplateVars(); + +##Threads come in reverse order, most recent first +$posts = $templateVars->{post_loop}; +is( $posts->[1]->{'ownerUserId'}, 1, 'first post owned by visitor'); +ok( $posts->[1]->{'user.isVisitor'}, 'first post made by visitor'); +ok( $posts->[1]->{'hideProfileUrl'}, 'hide profile url, since current user is visitor'); +ok( $posts->[1]->{'lastReply.user.isVisitor'}, 'lastReply not made by visitor'); +ok( $posts->[1]->{'lastReply.hideProfileUrl'}, 'lastReply hide profile url, since user is visitor'); +is( $posts->[0]->{'ownerUserId'}, 3, 'second post owned by admin'); +ok( !$posts->[0]->{'user.isVisitor'}, 'first post made by visitor'); +ok( $posts->[0]->{'hideProfileUrl'}, 'hide profile url, and user is visitor'); +ok( !$posts->[0]->{'lastReply.user.isVisitor'}, 'lastReply not made by visitor'); +ok( $posts->[0]->{'lastReply.hideProfileUrl'}, 'lastReply hide profile url, since user is visitor'); +#vim:ft=perl