diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 4407a3420..16ae28fbb 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -1,4 +1,6 @@ 7.10.21 + - added #9668 extension template variable to attachment loops for the following assets: + Article,Post,Event,File,Form::Attachments,Folder - added the optional WebGUI::Content::PDFGenerator, not enabled by default (see the module's documentation). @@ -4229,3 +4231,4 @@ - Made the Include macro more secure. - Added Len's patch to fix some caching problems. + diff --git a/lib/WebGUI/Asset/Event.pm b/lib/WebGUI/Asset/Event.pm index 9f4bb9184..6a7f7d872 100644 --- a/lib/WebGUI/Asset/Event.pm +++ b/lib/WebGUI/Asset/Event.pm @@ -1249,6 +1249,7 @@ sub getTemplateVars { url => $storage->getUrl($filename), icon => $storage->getFileIconUrl($filename), filename => $filename, + extension => WebGUI::Storage->getFileExtension($filename), thumbnail => $storage->getThumbnailUrl($filename), isImage => $storage->isImage($filename), }; diff --git a/lib/WebGUI/Asset/File.pm b/lib/WebGUI/Asset/File.pm index 85d0451a0..57aef5c45 100644 --- a/lib/WebGUI/Asset/File.pm +++ b/lib/WebGUI/Asset/File.pm @@ -677,6 +677,8 @@ sub view { $var{fileUrl} = $self->getFileUrl; $var{fileIcon} = $self->getFileIconUrl; $var{fileSize} = formatBytes($self->get("assetSize")); + $var{extension} = WebGUI::Storage->getFileExtension( $self->get("filename")); + my $out = $self->processTemplate(\%var,undef,$self->{_viewTemplate}); if (!$self->session->var->isAdminOn && $self->get("cacheTimeout") > 10) { WebGUI::Cache->new($self->session,"view_".$self->getId)->set($out,$self->get("cacheTimeout")); diff --git a/lib/WebGUI/Asset/Post.pm b/lib/WebGUI/Asset/Post.pm index a493e2d61..3f58019f7 100644 --- a/lib/WebGUI/Asset/Post.pm +++ b/lib/WebGUI/Asset/Post.pm @@ -813,6 +813,7 @@ sub getTemplateVars { url => $fileUrl, icon => $storage->getFileIconUrl($filename), filename => $filename, + extension => WebGUI::Storage->getFileExtension($filename), thumbnail => $isImage ? $storage->getThumbnailUrl($filename) : '', isImage => $isImage, }); diff --git a/lib/WebGUI/Asset/Wobject/Article.pm b/lib/WebGUI/Asset/Wobject/Article.pm index 512c50c8b..3e55e2c7c 100644 --- a/lib/WebGUI/Asset/Wobject/Article.pm +++ b/lib/WebGUI/Asset/Wobject/Article.pm @@ -369,6 +369,7 @@ sub view { } push(@{$var{attachment_loop}}, { filename => $file, + extension => WebGUI::Storage->getFileExtension($file), isImage => $storage->isImage($file), url=> $storage->getUrl($file), thumbnailUrl => $storage->getThumbnailUrl($file), diff --git a/lib/WebGUI/Asset/Wobject/Folder.pm b/lib/WebGUI/Asset/Wobject/Folder.pm index a25ea1e17..21c11e357 100644 --- a/lib/WebGUI/Asset/Wobject/Folder.pm +++ b/lib/WebGUI/Asset/Wobject/Folder.pm @@ -313,6 +313,7 @@ sub view { "icon.small" => $child->getIcon(1), "icon.big" => $child->getIcon, type => $child->getName, + extension => WebGUI::Storage->getFileExtension( $child->get("filename")), url => $child->getUrl, canEdit => $child->canEdit, controls => $child->getToolbar, diff --git a/lib/WebGUI/Form/Attachments.pm b/lib/WebGUI/Form/Attachments.pm index 7d551f926..6cb31d0b1 100644 --- a/lib/WebGUI/Form/Attachments.pm +++ b/lib/WebGUI/Form/Attachments.pm @@ -302,6 +302,7 @@ sub www_upload { title => $filename, url => "attachments/".$filename, filename => $filename, + extension => WebGUI::Storage->getFileExtension($filename), ownerUserId => $owner, groupIdEdit => "3", groupIdView => "7", diff --git a/t/Asset/Post.t b/t/Asset/Post.t index d03d54276..039b1ea28 100644 --- a/t/Asset/Post.t +++ b/t/Asset/Post.t @@ -19,7 +19,7 @@ use strict; use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; -use Test::More tests => 20; # increment this value for each test you create +use Test::More tests => 23; # increment this value for each test you create use Test::Deep; use WebGUI::Asset::Wobject::Collaboration; use WebGUI::Asset::Post; @@ -175,6 +175,13 @@ $storage->addFileFromFilesystem(WebGUI::Test->getTestCollateralPath('lamp.jpg')) $storage->addFileFromFilesystem(WebGUI::Test->getTestCollateralPath('littleTextFile')); my $attachment_loop = $post1->getTemplateVars()->{attachment_loop}; + +ok ( $attachment_loop->[0]->{'extension'} eq 'jpg','Yup, extension template variable in attachment loop working for jpg'); +ok ( $attachment_loop->[1]->{'extension'} eq 'jpg','Yup, extension template variable in attachment loop working for jpg'); +ok ( $attachment_loop->[2]->{'extension'} eq '','Yup, extension template variable in attachment loop working for file with no extension'); + + + cmp_bag( $attachment_loop, [ @@ -183,6 +190,7 @@ cmp_bag( url => $storage->getUrl('gooey.jpg'), icon => $session->url->extras('fileIcons/jpg.gif'), thumbnail => $storage->getThumbnailUrl('gooey.jpg'), + extension => 'jpg', isImage => bool(1), }, { @@ -190,6 +198,7 @@ cmp_bag( url => $storage->getUrl('lamp.jpg'), icon => $session->url->extras('fileIcons/jpg.gif'), thumbnail => $storage->getThumbnailUrl('lamp.jpg'), + extension => 'jpg', isImage => bool(1), }, { @@ -197,6 +206,7 @@ cmp_bag( url => $storage->getUrl('littleTextFile'), icon => $session->url->extras('fileIcons/unknown.gif'), thumbnail => '', + extension => '', isImage => bool(0), }, ], diff --git a/t/Asset/Wobject/Article.t b/t/Asset/Wobject/Article.t index defaae2e2..acc778845 100644 --- a/t/Asset/Wobject/Article.t +++ b/t/Asset/Wobject/Article.t @@ -17,7 +17,7 @@ use lib "$FindBin::Bin/../../lib"; use WebGUI::Test; use WebGUI::Session; -use Test::More tests => 23; # increment this value for each test you create +use Test::More tests => 28; # increment this value for each test you create use WebGUI::Asset::Wobject::Article; my $session = WebGUI::Test->session; @@ -66,9 +66,10 @@ foreach my $newSetting (keys %{$newArticleSettings}) { } # Test the duplicate method... not for assets, just the extended duplicate functionality of the article wobject -my $filename = "page_title.jpg"; +my $filename = "extensions.tar"; my $pathedFile = WebGUI::Test->getTestCollateralPath($filename); + # Use some test collateral to create a storage location and assign it to our article my $storage = WebGUI::Storage->create($session); WebGUI::Test->addToCleanup($storage); @@ -80,6 +81,10 @@ diag(join("\n", @{ $storage->getErrors })) unless $filenameOK; $article->update({storageId=>$storage->getId}); my $storageOK = is($article->get('storageId'), $storage->getId, 'correct storage id stored'); + + + + SKIP: { skip 'storage test setup problem', 3 unless $filenameOK and $storageOK; @@ -122,6 +127,46 @@ $cachedOutput = WebGUI::Cache->new($session, 'view_'.$article->getId)->get; # C isnt ($output, $cachedOutput, 'purgeCache method deletes cache'); +# lets test that our new template variable for the fileloop in the main view method returns the +# right values for the new field in the attached files loop: +# first we create a new template with only the field in it +# -------------------------------------------------------------------------------------------------- + +my $viewTemplate = $node->addChild({className=>'WebGUI::Asset::Template'}); + +my $tmplContent = "|"; + +my $newTemplateSettings = { + namespace => 'Article', + template => $tmplContent, +}; + + +my @extTestFiles = ("rotation_test.png","littleTextFile","jquery.js","tooWide.gif"); + +foreach my $f (@extTestFiles) { + my $pathedFile = WebGUI::Test->getTestCollateralPath($f); + my $storedFilename = $storage->addFileFromFilesystem($pathedFile); +} + +$viewTemplate->update($newTemplateSettings); +$article->update({templateId=>$viewTemplate->getId}); +$article->prepareView; + +my $newFieldoutput = $article->view; +$newFieldoutput =~ s/\|$//; + +my @tmplExtensions = split /\|/,$newFieldoutput; + + +# rememer there is a tar file already stored from earlier test, we reuse this. +ok ( $tmplExtensions[0] eq "tar", 'Yup, extension template variable in fileLoop working for tar'); +ok ( $tmplExtensions[1] eq "png", 'Yup, extension template variable in fileLoop working for png'); +ok ( $tmplExtensions[2] eq "", 'Yup, extension template variable in fileLoop working for file with no extension'); +ok ( $tmplExtensions[3] eq "js", 'Yup, extension template variable in fileLoop working for js'); +ok ( $tmplExtensions[4] eq "gif", 'Yup, extension template variable in fileLoop working for gif'); + + TODO: { local $TODO = "Tests to make later"; ok(0, 'Test exportAssetData method'); @@ -131,3 +176,7 @@ TODO: { ok(0, 'Test www_deleteFile method'); ok(0, 'Test www_view method... maybe?'); } + + + +