diff --git a/src/Entity/Attachment.php b/src/Entity/Attachment.php index 90bf6168..ae3b86cc 100644 --- a/src/Entity/Attachment.php +++ b/src/Entity/Attachment.php @@ -128,6 +128,34 @@ abstract class Attachment extends NamedDBElement return file_exists($this->getPath()) || static::isURL($this->getPath()); } + /** + * The URL to the external file. + * Returns null, if the file is not external. + * @return string|null + */ + public function getURL(): ?string + { + if (!$this->isExternal()) { + return null; + } + + return $this->path; + } + + /** + * Returns the hostname where the external file is stored. + * Returns null, if the file is not external. + * @return string|null + */ + public function getHost(): ?string + { + if (!$this->isExternal()) { + return null; + } + + return parse_url($this->getURL(), PHP_URL_HOST); + } + /** * Get the filepath, relative to %BASE%. * @@ -138,6 +166,8 @@ abstract class Attachment extends NamedDBElement return $this->path; } + + /** * Returns the filename of the attachment. * For a path like %BASE/path/foo.bar, foo.bar will be returned. diff --git a/src/Services/EntityURLGenerator.php b/src/Services/EntityURLGenerator.php index a648dd7f..ae6f21db 100644 --- a/src/Services/EntityURLGenerator.php +++ b/src/Services/EntityURLGenerator.php @@ -95,6 +95,9 @@ class EntityURLGenerator public function viewURL($entity) : string { if ($entity instanceof Attachment) { + if ($entity->isExternal()) { //For external attachments, return the link to external path + return $entity->getURL(); + } return $this->urlGenerator->generate('attachment_view', ['id' => $entity->getID()]); } @@ -105,6 +108,9 @@ class EntityURLGenerator public function downloadURL($entity) : string { if ($entity instanceof Attachment) { + if ($entity->isExternal()) { //For external attachments, return the link to external path + return $entity->getURL(); + } return $this->urlGenerator->generate('attachment_download', ['id' => $entity->getID()]); } diff --git a/templates/Parts/info/_attachments_info.html.twig b/templates/Parts/info/_attachments_info.html.twig index a4e4fc92..313afb81 100644 --- a/templates/Parts/info/_attachments_info.html.twig +++ b/templates/Parts/info/_attachments_info.html.twig @@ -22,9 +22,17 @@ {{ attachment.name }} {{ attachment.type.fullPath }} - {{ attachment.filename }} - {% if attachment_helper.fileExisting(attachment) %} + {% if attachment.external %} + {{ attachment.host }} + {% else %} + {{ attachment.filename }} + {% endif %} + + + {% if attachment.external %} + {% trans %}attachment.external_file{% endtrans %} + {% elseif attachment_helper.fileExisting(attachment) %} {{ attachment_helper.humanFileSize(attachment) }} {% else %} {% trans %}attachment.file_not_found{% endtrans %}