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(