diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index c6335866d..a58b008bf 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -1,4 +1,5 @@ 7.10.4 + - fixed #11928: Story Archive breaks if url has extension - fixed #11920: Defaul DataForm emails missing entries. - fixed #11921: DataForm emails contain 1 table per field - fixed #11922: Help tempalte is squatting on a good URL diff --git a/lib/WebGUI/Asset/Wobject/StoryArchive.pm b/lib/WebGUI/Asset/Wobject/StoryArchive.pm index d5552e5d4..5d65cce03 100644 --- a/lib/WebGUI/Asset/Wobject/StoryArchive.pm +++ b/lib/WebGUI/Asset/Wobject/StoryArchive.pm @@ -322,7 +322,7 @@ sub getFolder { my ($self, $date) = @_; my $session = $self->session; my $folderName = $session->datetime->epochToHuman($date, DATE_FORMAT); - my $folderUrl = join '/', $self->getUrl, $folderName; + my $folderUrl = $self->getFolderUrl($folderName); my $folder = WebGUI::Asset->newByUrl($session, $folderUrl); return $folder if $folder; ##The requested folder doesn't exist. Make it and autocommit it. @@ -359,6 +359,21 @@ sub getFolder { #------------------------------------------------------------------- +=head2 getFolderUrl ( name ) + +Constructs a url for a subfolder with the given name. + +=cut + +sub getFolderUrl { + my ($self, $name) = @_; + my $base = $self->getUrl; + $base =~ s/(.*)\..*/$1/; + return "$base/$name"; +} + +#------------------------------------------------------------------- + =head2 getKeywordFilename ( $keyword ) Returns the name for the file containing stories that match this keyword. Used diff --git a/t/Asset/Wobject/StoryArchive.t b/t/Asset/Wobject/StoryArchive.t index 26735f716..67a0704d9 100644 --- a/t/Asset/Wobject/StoryArchive.t +++ b/t/Asset/Wobject/StoryArchive.t @@ -63,7 +63,7 @@ $canPostMaker->prepare({ fail => [1, $reader ], }); -my $tests = 52 +my $tests = 54 + $canPostMaker->plan ; plan tests => 1 @@ -132,13 +132,25 @@ my $dt = DateTime->from_epoch(epoch => $now, time_zone => $session->datetime->ge my $folderName = $dt->strftime('%B_%d_%Y'); $folderName =~ s/^(\w+_)0/$1/; is($todayFolder->getTitle, $folderName, '... folder has the right name'); -my $folderUrl = join '/', $archive->getUrl, lc $folderName; +my $folderUrl = $archive->getFolderUrl($folderName); is($todayFolder->getUrl, $folderUrl, '... folder has the right URL'); is($todayFolder->getParent->getId, $archive->getId, '... created folder has the right parent'); is($todayFolder->get('state'), 'published', '... created folder is published'); is($todayFolder->get('status'), 'approved', '... created folder is approved'); is($todayFolder->get('styleTemplateId'), $archive->get('styleTemplateId'), '... created folder has correct styleTemplateId'); +{ + my $arch2 = $home->addChild({ + className => $class, + url => 'home/extension-tester.ext', + title => 'Extension Tester', + }); + addToCleanup($arch2); + ok defined $arch2->getFolder($now), 'getFolder with url extension'; + is $arch2->getFolderUrl('blah'), '/home/extension-tester/blah', + 'folder urls have extension properly stripped'; +} + my $sameFolder = $archive->getFolder($now); is($sameFolder->getId, $todayFolder->getId, 'call with same time returns the same folder'); undef $sameFolder;