diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 3e9dfba4b..3c517b91c 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -32,6 +32,7 @@ - fixed #10723: RSS Feed Error in Gallery - fixed Survey response startDate stored twice (Patrick Donelan, SDH Consulting) - fixed Survey ExpireIncompleteSurveyResponses Workflow Activity not enabled (Patrick Donelan, SDH Consulting) + - fixed #10689: Version Tag Modes (Henry Tang, Long Term Results B.V.) 7.7.16 - fixed #10590: Session::DateTime->secondsToInterval doesn't allow 7 weeks diff --git a/lib/WebGUI/VersionTag.pm b/lib/WebGUI/VersionTag.pm index 168a6c920..2ddc5d10b 100644 --- a/lib/WebGUI/VersionTag.pm +++ b/lib/WebGUI/VersionTag.pm @@ -79,9 +79,13 @@ sub autoCommitWorkingIfEnabled { # auto commit assets # save and commit button and site wide auto commit work the same + # Do not auto commit if tag is system wide tag or tag belongs to someone else if ( $options->{override} - || $class->getVersionTagMode($session) eq q{autoCommit} + || ( $class->getVersionTagMode($session) eq q{autoCommit} + && ! $versionTag->get(q{isSiteWide}) + && $versionTag->get(q{createdBy}) eq $session->user()->userId() + ) ) { if ($session->setting->get("skipCommitComments") || !$options->{allowComments}) { $versionTag->requestCommit; @@ -94,6 +98,7 @@ sub autoCommitWorkingIfEnabled { return 'redirect'; } } + return undef; } #------------------------------------------------------------------- diff --git a/t/VersionTag.t b/t/VersionTag.t index a2abd6afa..d96638a01 100644 --- a/t/VersionTag.t +++ b/t/VersionTag.t @@ -14,7 +14,7 @@ use lib "$FindBin::Bin/lib"; use WebGUI::Test; use WebGUI::Session; use WebGUI::VersionTag; -use Test::More tests => 62; # increment this value for each test you create +use Test::More tests => 68; # increment this value for each test you create my $session = WebGUI::Test->session; @@ -266,6 +266,112 @@ $userTag->rollback(); $siteWideTag->rollback(); $adminUserTag->rollback(); +## Additional VersionTagMode to make sure that auto commit happens only when user is tag creator and tag is not site wide. +## See bug #10689 (Version Tag Modes) +{ + my $test_prefix = q{versionTagMode B10689>}; + + setUserVersionTagMode($user, q{singlePerUser}); + my $tag = WebGUI::VersionTag->create($session, {}); + $tag->setWorking; + my $asset = WebGUI::Asset->getRoot($session)->addChild({ className => 'WebGUI::Asset::Snippet' }); + is($tag->getAssetCount, 1, qq{$test_prefix [singlePerUser] tag with 1 asset}); + + # create admin session + my $admin_session = WebGUI::Session->open($WebGUI::Test::WEBGUI_ROOT, $WebGUI::Test::CONFIG_FILE); + $admin_session->user({'userId' => 3}); + + setUserVersionTagMode($admin_session->user(), q{autoCommit}); + + # Take over version tag + my $adminUserTag = WebGUI::VersionTag->new($admin_session, $tag->getId()); + + $adminUserTag->setWorking(); + + my $adminCommitStatus = WebGUI::VersionTag->autoCommitWorkingIfEnabled($session, { + override => 0, + allowComments => 0, + returnUrl => q{}, + }); + + is( + $adminCommitStatus, + undef, + qq{$test_prefix [singlePerUser] Admin cannot auto commit working tag of other user}, + ); + + $adminUserTag->rollback(); + + # Change user mode to autoCommit + setUserVersionTagMode($user, q{autoCommit}); + + my $userCommitStatus = WebGUI::VersionTag->autoCommitWorkingIfEnabled($session, { + override => 0, + allowComments => 0, + returnUrl => q{}, + }); + + is( + $userCommitStatus, + q{commit}, + qq{$test_prefix [singlePerUser] User can auto commit}, + ); + + $tag->rollback(); + + + # Now test site wide tag + + setUserVersionTagMode($user, q{siteWide}); + $tag = WebGUI::VersionTag->create($session, {}); + $tag->setWorking; + $asset = WebGUI::Asset->getRoot($session)->addChild({ className => 'WebGUI::Asset::Snippet' }); + is($tag->getAssetCount, 1, qq{$test_prefix [siteWide] tag with 1 asset}); + + # create admin session + $admin_session = WebGUI::Session->open($WebGUI::Test::WEBGUI_ROOT, $WebGUI::Test::CONFIG_FILE); + $admin_session->user({'userId' => 3}); + + setUserVersionTagMode($admin_session->user(), q{autoCommit}); + + # Take over version tag + $adminUserTag = WebGUI::VersionTag->new($admin_session, $tag->getId()); + + $adminUserTag->setWorking(); + + $adminCommitStatus = WebGUI::VersionTag->autoCommitWorkingIfEnabled($session, { + override => 0, + allowComments => 0, + returnUrl => q{}, + }); + + is( + $adminCommitStatus, + undef, + qq{$test_prefix [siteWide] Admin cannot auto commit sitewide working tag}, + ); + + $adminUserTag->rollback(); + + # Change user mode to autoCommit + setUserVersionTagMode($user, q{autoCommit}); + + $userCommitStatus = WebGUI::VersionTag->autoCommitWorkingIfEnabled($session, { + override => 0, + allowComments => 0, + returnUrl => q{}, + }); + + is( + $userCommitStatus, + q{commit}, + qq{$test_prefix [siteWide] User CANNOT auto commit sitewide working tag}, + ); + + $tag->rollback(); + +} + #reset (just in case other tests depends on this setting) setSiteVersionTagMode($session, q{multiPerUser}); setUserVersionTagMode($user, q{inherited});