From 60717e5c04cf3aa496b3a9838a4cd1851ef139e0 Mon Sep 17 00:00:00 2001 From: Guy Sartorelli <36352093+GuySartorelli@users.noreply.github.com> Date: Tue, 8 Aug 2023 14:53:14 +1200 Subject: [PATCH] FIX Use absolute URL for submitted file links in emails (#1226) --- code/Model/Submission/SubmittedFileField.php | 7 ++++++- tests/php/Model/SubmittedFileFieldTest.php | 9 ++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/code/Model/Submission/SubmittedFileField.php b/code/Model/Submission/SubmittedFileField.php index 94829d9..1a57cce 100755 --- a/code/Model/Submission/SubmittedFileField.php +++ b/code/Model/Submission/SubmittedFileField.php @@ -3,6 +3,7 @@ namespace SilverStripe\UserForms\Model\Submission; use SilverStripe\Assets\File; +use SilverStripe\Control\Director; use SilverStripe\ORM\FieldType\DBField; use SilverStripe\Versioned\Versioned; @@ -83,7 +84,11 @@ class SubmittedFileField extends SubmittedFormField { if ($file = $this->getUploadedFileFromDraft()) { if ($file->exists()) { - return $file->getURL($grant); + $url = $file->getURL($grant); + if ($url) { + return Director::absoluteURL($url); + } + return null; } } } diff --git a/tests/php/Model/SubmittedFileFieldTest.php b/tests/php/Model/SubmittedFileFieldTest.php index 9db30dc..ac67789 100644 --- a/tests/php/Model/SubmittedFileFieldTest.php +++ b/tests/php/Model/SubmittedFileFieldTest.php @@ -5,6 +5,7 @@ namespace SilverStripe\UserForms\Tests\Model; use SilverStripe\Assets\Dev\TestAssetStore; use SilverStripe\Assets\File; use SilverStripe\Assets\Storage\AssetStore; +use SilverStripe\Control\Director; use SilverStripe\Core\Injector\Injector; use SilverStripe\Dev\SapphireTest; use SilverStripe\UserForms\Model\Submission\SubmittedFileField; @@ -69,21 +70,23 @@ class SubmittedFileFieldTest extends SapphireTest public function testGetFormattedValue() { + // Set an explicit base URL so we get a reliable value for the test + Director::config()->set('alternate_base_url', 'http://mysite.com'); $fileName = $this->submittedFile->getFileName(); $message = "You don't have the right permissions to download this file"; $this->file->CanViewType = 'OnlyTheseUsers'; $this->file->write(); - + $this->loginWithPermission('ADMIN'); $this->assertEquals( sprintf( - '%s - Download File', + '%s - Download File', $fileName ), $this->submittedFile->getFormattedValue()->value ); - + $this->loginWithPermission('CMS_ACCESS_CMSMain'); $this->assertEquals( sprintf(