From 0305e97ad7d6e0de5781a549e736cef07093275b Mon Sep 17 00:00:00 2001 From: JT Smith Date: Fri, 24 Oct 2008 14:31:12 +0000 Subject: [PATCH 1/6] creating branch for alpha mega hosting to contribute features through From 9feb541d62d6035a47d32277fdabc076cf8296ca Mon Sep 17 00:00:00 2001 From: Henry Tang Date: Thu, 30 Oct 2008 19:01:32 +0000 Subject: [PATCH 2/6] AMH: commit to test svn write access --- lib/WebGUI/Operation/Settings.pm | 3 +++ 1 file changed, 3 insertions(+) mode change 100644 => 100755 lib/WebGUI/Operation/Settings.pm diff --git a/lib/WebGUI/Operation/Settings.pm b/lib/WebGUI/Operation/Settings.pm old mode 100644 new mode 100755 index cd03374e6..e9a454ee0 --- a/lib/WebGUI/Operation/Settings.pm +++ b/lib/WebGUI/Operation/Settings.pm @@ -80,6 +80,9 @@ sub definition { label=>$i18n->get("default version tag workflow"), hoverHelp=>$i18n->get('default version tag workflow help'), }); + + #AMH: Todo add versionTagMode + push(@fields, { tab=>"content", fieldType=>"yesNo", From d22214e0dd7fcc5d5f4ca1f382dce059c4f90879 Mon Sep 17 00:00:00 2001 From: Henry Tang Date: Fri, 31 Oct 2008 14:57:39 +0000 Subject: [PATCH 3/6] AMH: implemented version tag modes as site settings, removed autoRequestCommit setting --- lib/WebGUI/Auth.pm | 9 +- lib/WebGUI/Operation/Settings.pm | 40 +++++-- lib/WebGUI/VersionTag.pm | 184 ++++++++++++++++++++++++------ lib/WebGUI/i18n/English/WebGUI.pm | 24 ++++ 4 files changed, 209 insertions(+), 48 deletions(-) mode change 100644 => 100755 lib/WebGUI/Auth.pm mode change 100644 => 100755 lib/WebGUI/VersionTag.pm mode change 100644 => 100755 lib/WebGUI/i18n/English/WebGUI.pm diff --git a/lib/WebGUI/Auth.pm b/lib/WebGUI/Auth.pm old mode 100644 new mode 100755 index 0b8cf4fd6..16fd36b1f --- a/lib/WebGUI/Auth.pm +++ b/lib/WebGUI/Auth.pm @@ -760,6 +760,8 @@ sub isVisitor { Superclass method that performs standard login routines. This is what should happen after a user has been authenticated. Authentication should always happen in the subclass routine. +AMH: open version tag is reclaimed if user is in site wide or singlePerUser mode. + =cut sub login { @@ -803,7 +805,12 @@ sub login { $self->session->http->setRedirect($self->session->scratch->get("redirectAfterLogin")); $self->session->scratch->delete("redirectAfterLogin"); } - + + #AMH: get open version tag. This is needed if we want + # to reclaim a version right after login (singlePerUser and siteWide mode) + # and to have the correct version displayed. + WebGUI::VersionTag->getWorking($self->session(), q{noCreate}); + return undef; } diff --git a/lib/WebGUI/Operation/Settings.pm b/lib/WebGUI/Operation/Settings.pm index e9a454ee0..2e930755d 100755 --- a/lib/WebGUI/Operation/Settings.pm +++ b/lib/WebGUI/Operation/Settings.pm @@ -81,16 +81,38 @@ sub definition { hoverHelp=>$i18n->get('default version tag workflow help'), }); - #AMH: Todo add versionTagMode + #AMH: Support for versionTagMode. We'll have: + # - multi version tag per user + # - one version tag per user (SwiftySite mode) + # - one site wide version tag + # - auto commit + push ( + @fields, + { tab => q{content}, + fieldType => q{selectBox}, + name => q{versionTagMode}, + defaultValue => [ $setting->get(q{versionTagMode}) ], + options => { + multiPerUser => $i18n->get(q{versionTagMode multiPerUser}), + singlePerUser => $i18n->get(q{versionTagMode singlePerUser}), + siteWide => $i18n->get(q{versionTagMode siteWide}), + autoCommit => $i18n->get(q{versionTagMode autoCommit}), + }, + label => $i18n->get(q{version tag mode}), + hoverHelp => $i18n->get(q{version tag mode help}), + }, + ); + +#AMH: autoRequestCommit no long needed +# push(@fields, { +# tab=>"content", +# fieldType=>"yesNo", +# name=>"autoRequestCommit", +# label=>$i18n->get("auto request commit"), +# hoverHelp=>$i18n->get("auto request commit help"), +# defaultValue=>$setting->get("autoRequestCommit") +# }); - push(@fields, { - tab=>"content", - fieldType=>"yesNo", - name=>"autoRequestCommit", - label=>$i18n->get("auto request commit"), - hoverHelp=>$i18n->get("auto request commit help"), - defaultValue=>$setting->get("autoRequestCommit") - }); push(@fields, { tab=>"content", fieldType=>"yesNo", diff --git a/lib/WebGUI/VersionTag.pm b/lib/WebGUI/VersionTag.pm old mode 100644 new mode 100755 index c9e5b1be9..838e2f95f --- a/lib/WebGUI/VersionTag.pm +++ b/lib/WebGUI/VersionTag.pm @@ -73,11 +73,16 @@ sub autoCommitWorkingIfEnabled { my $versionTag = $class->getWorking($session, "nocreate"); return undef unless $versionTag; + + #AMH: auto commit is no longer determined from autoRequestCommit + # auto commit assets # save and commit button and site wide auto commit work the same if ( +# $options->{override} +# || $session->setting->get("autoRequestCommit") $options->{override} - || $session->setting->get("autoRequestCommit") + || $class->getVersionTagMode($session) eq q{autoCommit} ) { if ($session->setting->get("skipCommitComments") || !$options->{allowComments}) { $versionTag->requestCommit; @@ -358,6 +363,32 @@ sub getRevisionCount { } +#------------------------------------------------------------------- + +#AMH: Support for versionTagMode. + +=head2 getVersionTagMode ( session ) + +Return version tag mode for current session + +=cut + +sub getVersionTagMode { + my $class = shift; + my $session = shift; + + my $mode = q{}; + + #AMH: to do get user settings + + #Get mode from settings + if ($mode eq q{}) { + $mode = $session->setting()->get(q{versionTagMode}); + } + + return $mode; +} #getVersionTagMode + #------------------------------------------------------------------- =head2 getWorkflowInstance ( ) @@ -388,26 +419,93 @@ A boolean that if set to true, will prevent this method from creating an autotag =cut sub getWorking { - my $class = shift; - my $session = shift; - my $noCreate = shift; - if ($session->stow->get("versionTag")) { - return $session->stow->get("versionTag"); - } else { - my $tagId = $session->scratch->get("versionTag"); - if ($tagId) { - my $tag = $class->new($session, $tagId); - $session->stow->set("versionTag",$tag); - return $tag; - } elsif ($noCreate) { - return undef; - } else { - my $tag = $class->create($session); - $tag->setWorking; - return $tag; - } - } -} + #AMH: Support for versionTagMode. + my $class = shift; + my $session = shift; + my $noCreate = shift; + + my $stow = $session->stow(); + my $mode = $class->getVersionTagMode($session); + my $tag; + my $tagId; + + #First see if there is already a version tag + $tag = $stow->get(q{versionTag}); + + return $tag if $tag; + + $tagId = $session->scratch()->get(q{versionTag}); + if ($tagId) { + $tag = $class->new($session, $tagId); + + $stow->set(q{versionTag}, $tag); + + return $tag; + } + + #No tag found. Create or reclaim one? + # multiPerUser / autoCommit: no reclaim, create if not noCreate + # singlePerUser: try to reclaim previous if only 1 open tag + # siteWide: try to claim site-wide version tag + # autoCommit: + + if ($mode eq q{singlePerUser}) { + # Get all open tags for user. If only 1 tag open then reclaim + # it. + my @openTags = (); + my $userId = $session->user()->userId(); + + OPENTAG: + foreach my $openTag (@{WebGUI::VersionTag->getOpenTags($session)}) { + + # Do not reclaim site wide tag in singlePerUser mode + next OPENTAG if $openTag->get(q{isSiteWide}); + + if ($openTag->get(q{createdBy}) eq $userId) { + + push @openTags, $openTag; + } + } + # For now, we only reclaim if 1 tag open. + if (scalar @openTags == 1) { + $tag = $openTags[0]; + + $tag->setWorking(); + + return $tag; + } + } + elsif ($mode eq q{siteWide}) { + # Check for site wide version tag. Reclaim if available + + OPENTAG: + foreach my $openTag (@{WebGUI::VersionTag->getOpenTags($session)}) { + if ($openTag->get(q{isSiteWide})) { + + $tag = $openTag; + + $tag->setWorking(); + + return $tag; + } + } + } + + return undef if $noCreate; + + # Create new tag. + my %properties = (); + + if ($mode eq q{siteWide}) { + $properties{isSiteWide} = 1; + } + + $tag = $class->create($session, \%properties); + + $tag->setWorking(); + + return $tag; +} #getWorking #------------------------------------------------------------------- @@ -553,17 +651,20 @@ The time that a version tag shoudl stop displaying on the website. =cut sub set { - my $self = shift; - my $properties = shift; - + my $self = shift; + my $properties = shift; + my $now = $self->session->datetime->time(); my $startTime = WebGUI::DateTime->new($self->session,$now)->toDatabase; my $endTime = WebGUI::DateTime->new($self->session,'2036-01-01 00:00:00')->toDatabase; - - $self->{_data}{'name' } = $properties->{name} || $self->{_data}{name} || $self->session->user->username." / ".$self->session->datetime->epochToHuman()." (Autotag)"; - $self->{_data}{'workflowId'} = $properties->{workflowId} || $self->{_data}{workflowId} || $self->session->setting->get("defaultVersionTagWorkflow"); - $self->{_data}{'groupToUse'} = $properties->{groupToUse} || $self->{_data}{groupToUse} || "12"; - + + #AMH: In case of site wide version tag, mark it as Site wide autotag instead + my $isSiteWide = $properties->{isSiteWide} || $self->{_data}{isSiteWide} || 0; + + $self->{_data}{'name' } = $properties->{name} || $self->{_data}{name} || $self->session->user->username." / ".$self->session->datetime->epochToHuman().($isSiteWide ? q{ (Site wide autotag)} : q{ (Autotag)}); + $self->{_data}{'workflowId'} = $properties->{workflowId} || $self->{_data}{workflowId} || $self->session->setting->get("defaultVersionTagWorkflow"); + $self->{_data}{'groupToUse'} = $properties->{groupToUse} || $self->{_data}{groupToUse} || "12"; + #This is necessary for upgrade prior to 7.5.11 in order to ensure that this field exists. #The if() blocks should be removd once the next branch point is reached. my $assetVersionTagDesc = $self->session->db->buildHashRef('describe assetVersionTag'); @@ -572,15 +673,22 @@ sub set { $self->{_data}{'startTime' } = $properties->{startTime} || $self->{_data}{startTime} || $startTime; $self->{_data}{'endTime' } = $properties->{endTime} || $self->{_data}{endTime} || $endTime; } - if (exists $properties->{comments}) { - $self->{_data}{comments}=$self->session->datetime->epochToHuman.' - '.$self->session->user->username - ."\n" - .$properties->{comments} - ."\n\n" - .$self->{_data}{comments}; - } - $self->session->db->setRow("assetVersionTag","tagId",$self->{_data}); -} + + #AMH: new field isSiteWide is added. Check if field exists. This is needed to let upgrades work + if (grep { $_ =~ /^isSiteWide/ } keys %{$assetVersionTagDesc}) { + + $self->{_data}{'isSiteWide'} = $isSiteWide; + } + + if (exists $properties->{comments}) { + $self->{_data}{comments}=$self->session->datetime->epochToHuman.' - '.$self->session->user->username + ."\n" + .$properties->{comments} + ."\n\n" + .$self->{_data}{comments}; + } + $self->session->db->setRow("assetVersionTag","tagId",$self->{_data}); +} #set #------------------------------------------------------------------- diff --git a/lib/WebGUI/i18n/English/WebGUI.pm b/lib/WebGUI/i18n/English/WebGUI.pm old mode 100644 new mode 100755 index 080cbfcdf..03767dd67 --- a/lib/WebGUI/i18n/English/WebGUI.pm +++ b/lib/WebGUI/i18n/English/WebGUI.pm @@ -4141,6 +4141,30 @@ LongTruncOk=1

context => q{Column heading for the total logged in time for the user}, }, + + #AMH: Support for versionTagMode. + 'version tag mode' => { + message => q{Version tag mode}, + }, + 'version tag mode help' => { + message => q{Version tag mode help...TODO}, + }, + 'versionTagMode multiPerUser' => { + message => q{Multi version tags per user}, + }, + 'versionTagMode singlePerUser' => { + message => q{Single version tag per user}, + }, + 'versionTagMode siteWide' => { + message => q{One site wide version tag}, + }, + 'versionTagMode autoCommit' => { + message => q{Commit automatically}, + }, + 'versionTagMode inherited' => { + message => q{Inherit from site settings}, + }, + }; 1; From d24714b2f53ddce8cdf2034776c74fa367304563 Mon Sep 17 00:00:00 2001 From: Henry Tang Date: Fri, 31 Oct 2008 14:57:50 +0000 Subject: [PATCH 4/6] AMH: implemented support for user override of versionTagMode --- lib/WebGUI/ProfileField.pm | 0 lib/WebGUI/VersionTag.pm | 6 ++++++ 2 files changed, 6 insertions(+) mode change 100644 => 100755 lib/WebGUI/ProfileField.pm diff --git a/lib/WebGUI/ProfileField.pm b/lib/WebGUI/ProfileField.pm old mode 100644 new mode 100755 diff --git a/lib/WebGUI/VersionTag.pm b/lib/WebGUI/VersionTag.pm index 838e2f95f..e3a03d1f7 100755 --- a/lib/WebGUI/VersionTag.pm +++ b/lib/WebGUI/VersionTag.pm @@ -380,6 +380,12 @@ sub getVersionTagMode { my $mode = q{}; #AMH: to do get user settings + $mode = $session->user()->profileField(q{versionTagMode}); + + #verify mode. + if (!(defined $mode && WebGUI::Utility::isIn($mode, qw{autoCommit siteWide singlePerUser multiPerUser}))) { + $mode = q{}; + } #Get mode from settings if ($mode eq q{}) { From 185a4c79de4c51e61beb4d981b1bb57be44069b3 Mon Sep 17 00:00:00 2001 From: Henry Tang Date: Fri, 7 Nov 2008 14:33:55 +0000 Subject: [PATCH 5/6] Updated comments (removed reference to AMH). Put SQL statements for upgrade --- docs/upgrades/version_tag_mode_support.sql | 21 +++++++++++++++++++++ lib/WebGUI/Auth.pm | 4 ++-- lib/WebGUI/Operation/Settings.pm | 12 +----------- lib/WebGUI/VersionTag.pm | 12 +++--------- lib/WebGUI/i18n/English/WebGUI.pm | 2 +- 5 files changed, 28 insertions(+), 23 deletions(-) create mode 100755 docs/upgrades/version_tag_mode_support.sql diff --git a/docs/upgrades/version_tag_mode_support.sql b/docs/upgrades/version_tag_mode_support.sql new file mode 100755 index 000000000..84bb0afd7 --- /dev/null +++ b/docs/upgrades/version_tag_mode_support.sql @@ -0,0 +1,21 @@ +-- SQL statement take are needed for version tag mode support. Must be added to current upgrade script when merging to mainline branch + +-- Add setting. Upgrade script must take the current value of autoRequestCommit and update version tag mode. + +INSERT INTO `settings` ( `name` , `value` ) +VALUES ( +'versionTagMode', '' +); + + +-- Remove autoRequestCommit + +DELETE FROM `settings` WHERE `name` = 'autoRequestCommit'; + +-- Add isSiteWide column + +ALTER TABLE `assetVersionTag` ADD `isSiteWide` BOOL NOT NULL DEFAULT '0'; + +-- Add profile field for user + +INSERT INTO `userProfileField` (`fieldName`, `label`, `visible`, `required`, `fieldType`, `possibleValues`, `dataDefault`, `sequenceNumber`, `profileCategoryId`, `protected`, `editable`, `forceImageOnly`, `showAtRegistration`, `requiredForPasswordRecovery`) VALUES ('versionTagMode', 'WebGUI::International::get("version tag mode","WebGUI");', 1, 1, 'selectBox', '{\r\n inherited => WebGUI::International::get("versionTagMode inherited"),\r\n multiPerUser => WebGUI::International::get("versionTagMode multiPerUser"),\r\n singlePerUser => WebGUI::International::get("versionTagMode singlePerUser"),\r\n siteWide => WebGUI::International::get("versionTagMode siteWide"),\r\n autoCommit => WebGUI::International::get("versionTagMode autoCommit"),\r\n}', 'inherited', 12, 0x34, 0, 1, 1, 0, 0); diff --git a/lib/WebGUI/Auth.pm b/lib/WebGUI/Auth.pm index 16fd36b1f..b23cca58b 100755 --- a/lib/WebGUI/Auth.pm +++ b/lib/WebGUI/Auth.pm @@ -760,7 +760,7 @@ sub isVisitor { Superclass method that performs standard login routines. This is what should happen after a user has been authenticated. Authentication should always happen in the subclass routine. -AMH: open version tag is reclaimed if user is in site wide or singlePerUser mode. +Open version tag is reclaimed if user is in site wide or singlePerUser mode. =cut @@ -806,7 +806,7 @@ sub login { $self->session->scratch->delete("redirectAfterLogin"); } - #AMH: get open version tag. This is needed if we want + # Get open version tag. This is needed if we want # to reclaim a version right after login (singlePerUser and siteWide mode) # and to have the correct version displayed. WebGUI::VersionTag->getWorking($self->session(), q{noCreate}); diff --git a/lib/WebGUI/Operation/Settings.pm b/lib/WebGUI/Operation/Settings.pm index 2e930755d..745d1dfa2 100755 --- a/lib/WebGUI/Operation/Settings.pm +++ b/lib/WebGUI/Operation/Settings.pm @@ -81,7 +81,7 @@ sub definition { hoverHelp=>$i18n->get('default version tag workflow help'), }); - #AMH: Support for versionTagMode. We'll have: + # Support for versionTagMode. We'll have: # - multi version tag per user # - one version tag per user (SwiftySite mode) # - one site wide version tag @@ -103,16 +103,6 @@ sub definition { }, ); -#AMH: autoRequestCommit no long needed -# push(@fields, { -# tab=>"content", -# fieldType=>"yesNo", -# name=>"autoRequestCommit", -# label=>$i18n->get("auto request commit"), -# hoverHelp=>$i18n->get("auto request commit help"), -# defaultValue=>$setting->get("autoRequestCommit") -# }); - push(@fields, { tab=>"content", fieldType=>"yesNo", diff --git a/lib/WebGUI/VersionTag.pm b/lib/WebGUI/VersionTag.pm index e3a03d1f7..2dd82b05f 100755 --- a/lib/WebGUI/VersionTag.pm +++ b/lib/WebGUI/VersionTag.pm @@ -74,13 +74,11 @@ sub autoCommitWorkingIfEnabled { return undef unless $versionTag; - #AMH: auto commit is no longer determined from autoRequestCommit + #Auto commit is no longer determined from autoRequestCommit # auto commit assets # save and commit button and site wide auto commit work the same if ( -# $options->{override} -# || $session->setting->get("autoRequestCommit") $options->{override} || $class->getVersionTagMode($session) eq q{autoCommit} ) { @@ -365,8 +363,6 @@ sub getRevisionCount { #------------------------------------------------------------------- -#AMH: Support for versionTagMode. - =head2 getVersionTagMode ( session ) Return version tag mode for current session @@ -379,7 +375,6 @@ sub getVersionTagMode { my $mode = q{}; - #AMH: to do get user settings $mode = $session->user()->profileField(q{versionTagMode}); #verify mode. @@ -425,7 +420,6 @@ A boolean that if set to true, will prevent this method from creating an autotag =cut sub getWorking { - #AMH: Support for versionTagMode. my $class = shift; my $session = shift; my $noCreate = shift; @@ -664,7 +658,7 @@ sub set { my $startTime = WebGUI::DateTime->new($self->session,$now)->toDatabase; my $endTime = WebGUI::DateTime->new($self->session,'2036-01-01 00:00:00')->toDatabase; - #AMH: In case of site wide version tag, mark it as Site wide autotag instead + #In case of site wide version tag, mark it as Site wide autotag instead my $isSiteWide = $properties->{isSiteWide} || $self->{_data}{isSiteWide} || 0; $self->{_data}{'name' } = $properties->{name} || $self->{_data}{name} || $self->session->user->username." / ".$self->session->datetime->epochToHuman().($isSiteWide ? q{ (Site wide autotag)} : q{ (Autotag)}); @@ -680,7 +674,7 @@ sub set { $self->{_data}{'endTime' } = $properties->{endTime} || $self->{_data}{endTime} || $endTime; } - #AMH: new field isSiteWide is added. Check if field exists. This is needed to let upgrades work + #New field isSiteWide is added. Check if field exists. This is needed to let upgrades work if (grep { $_ =~ /^isSiteWide/ } keys %{$assetVersionTagDesc}) { $self->{_data}{'isSiteWide'} = $isSiteWide; diff --git a/lib/WebGUI/i18n/English/WebGUI.pm b/lib/WebGUI/i18n/English/WebGUI.pm index 03767dd67..e8a0fb6ae 100755 --- a/lib/WebGUI/i18n/English/WebGUI.pm +++ b/lib/WebGUI/i18n/English/WebGUI.pm @@ -4142,7 +4142,7 @@ LongTruncOk=1

}, - #AMH: Support for versionTagMode. + #Support for versionTagMode. 'version tag mode' => { message => q{Version tag mode}, }, From 97c76677478f060fc0f632dadc910a707ff71c6d Mon Sep 17 00:00:00 2001 From: Henry Tang Date: Thu, 13 Nov 2008 15:20:17 +0000 Subject: [PATCH 6/6] Added tests for versionTagMode --- t/VersionTag.t | 150 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 149 insertions(+), 1 deletion(-) mode change 100644 => 100755 t/VersionTag.t diff --git a/t/VersionTag.t b/t/VersionTag.t old mode 100644 new mode 100755 index 06c3731ce..9a19e01bf --- 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 => 34; # increment this value for each test you create +use Test::More tests => 60; # increment this value for each test you create my $session = WebGUI::Test->session; @@ -30,6 +30,65 @@ sub ok_open { sub getWorking { WebGUI::VersionTag->getWorking($session, @_) } sub getWorkingId { my $w = getWorking(@_); defined($w)? $w->getId : undef } +# versionTagMode support. Test that setting version tag mode works. Also, make +# sure that the versionTagMode is in multiPerUser before running the test below. + +sub setSiteVersionTagMode { + my ($session, $newMode) = @_; + + $session->setting()->set(q{versionTagMode}, $newMode); + + return; +} #setSiteVersionTagMode + +sub setUserVersionTagMode { + my ($user, $newMode) = @_; + + $user->profileField(q{versionTagMode}, $newMode); + + return; +} #setUserVersionTagMode + +can_ok( + q{WebGUI::VersionTag}, + q{getVersionTagMode}, +); + +my $user = $session->user(); + +setSiteVersionTagMode($session, q{multiPerUser}); +setUserVersionTagMode($user, q{inherited}); + +is ( + WebGUI::VersionTag->getVersionTagMode($session), + q{multiPerUser}, + q{versionTagMode: both site and user setting multiPerUser}, +); + +setUserVersionTagMode($user, q{singlePerUser}); + +is ( + WebGUI::VersionTag->getVersionTagMode($session), + q{singlePerUser}, + q{versionTagMode: user setting singlePerUser overrides site setting}, +); + +setSiteVersionTagMode($session, q{autoCommit}); + +is ( + WebGUI::VersionTag->getVersionTagMode($session), + q{singlePerUser}, + q{versionTagMode: update site setting doesn't update user setting}, +); + +setUserVersionTagMode($user, q{multiPerUser}); + +is ( + WebGUI::VersionTag->getVersionTagMode($session), + q{multiPerUser}, + q{versionTagMode: update user setting to multiPerUser}, +); + my $tag = WebGUI::VersionTag->create($session, {}); isa_ok($tag, 'WebGUI::VersionTag', 'empty tag'); ok(defined $tag->getId, 'empty tag has an ID'); @@ -105,6 +164,95 @@ $tag3->rollback; $tag4->rollback; ($asset1, $asset2, $asset3, $tag3, $tag4) = (); +#additional tests for versionTagMode +# + +setSiteVersionTagMode($session, q{singlePerUser}); +setUserVersionTagMode($user, q{inherited}); + +ok(!defined getWorking(1), 'versionTagMode singlePerUser: no working tag initially present'); + +$tag = WebGUI::VersionTag->create($session, {}); +isa_ok($tag, 'WebGUI::VersionTag', 'versionTagMode singlePerUser: empty tag'); +ok(defined $tag->getId, 'versionTagMode singlePerUser: empty tag has an ID'); +ok(!$tag->get(q{isSiteWide}), 'versionTagMode singlePerUser: empty is not site wide'); + +my $userTagId = $tag->getId(); +my $userTag; # user tag in singlePerUser; +my $siteWideTagId; +my $siteWideTag; + +$tag->clearWorking(); + +ok(defined ($userTag = getWorking(1)), 'versionTagMode singlePerUser: reclaim version tag after clearWorking'); +is ($userTag->getId(), $userTagId, q{versionTagMode singlePerUser: reclaimed version tag has same id}); + + +#switch to sitewide mode + +$userTag->clearWorking(); + +setSiteVersionTagMode($session, q{siteWide}); + +ok(!defined ($siteWideTag = getWorking(1)), 'versionTagMode siteWide: no working tag initially present'); + +$siteWideTag = getWorking(); #force create +isa_ok($siteWideTag, 'WebGUI::VersionTag', 'versionTagMode siteWide: empty tag'); +ok($siteWideTag->get(q{isSiteWide}), 'versionTagMode ssiteWide: empty is site wide'); + +ok(defined ($siteWideTagId = $siteWideTag->getId()), 'versionTagMode siteWide: empty tag has an ID'); + +ok($siteWideTag->getId() ne $userTagId, 'versionTagMode siteWide: siteWide tag has different version tag id'); + +$siteWideTag->clearWorking(); + +my $asset4 = WebGUI::Asset->getRoot($session)->addChild({ className => 'WebGUI::Asset::Snippet' }); + +ok(defined ($siteWideTag = getWorking(1)), 'versionTagMode siteWide: reclaim version tag after clearWorking and addding new asset'); + +is($siteWideTag->getId(), $siteWideTagId, 'versionTagMode siteWide: reclaim site wide version tag has correct id'); + + +## Through in a new session as different user +my $admin_session = WebGUI::Session->open($WebGUI::Test::WEBGUI_ROOT, $WebGUI::Test::CONFIG_FILE); +$admin_session->user({'userId' => 3}); + +setUserVersionTagMode($admin_session->user(), q{singlePerUser}); + +my $adminUserTag = WebGUI::VersionTag->getWorking($admin_session, 0); +isa_ok($adminUserTag, 'WebGUI::VersionTag', 'versionTagMode siteWide + admin singlePerUser: empty tag'); +ok(defined $adminUserTag->getId(), 'versionTagMode siteWide + admin singlePerUser: empty tag has an ID'); +ok(!$adminUserTag->get(q{isSiteWide}), 'versionTagMode siteWide + admin singlePerUser: empty is not site wide'); +ok($adminUserTag->getId() ne $userTagId, 'versionTagMode siteWide + admin singlePerUser: empty has different ID'); +ok($adminUserTag->getId() ne $siteWideTagId, 'versionTagMode siteWide + admin singlePerUser: empty has different ID than site wide'); + +# Now switch to site wide + +$adminUserTag->clearWorking(); + +setUserVersionTagMode($admin_session->user(), q{inherited}); + +my $adminSiteWideTag = WebGUI::VersionTag->getWorking($admin_session, 0); + +isa_ok($adminSiteWideTag, 'WebGUI::VersionTag', 'versionTagMode siteWide + admin inherited: reclaimed empty tag'); +ok($adminSiteWideTag->get(q{isSiteWide}), 'versionTagMode siteWide + admin inherited: empty is site wide'); +ok($adminSiteWideTag->getId() eq $siteWideTagId, 'versionTagMode siteWide + admin inherited: empty has same ID as site wide'); + + +$admin_session->var()->end(); +$admin_session->close(); + + + +$userTag->rollback(); +$siteWideTag->rollback(); +$adminUserTag->rollback(); + +#reset (just in case other tests depends on this setting) +setSiteVersionTagMode($session, q{multiPerUser}); +setUserVersionTagMode($user, q{inherited}); + + # Local variables: # mode: cperl # End: