Support external hosted attachments via link.

This commit is contained in:
Jan Böhmer 2019-08-10 19:16:56 +02:00
parent 87db2523e1
commit ca48343293
3 changed files with 46 additions and 2 deletions

View file

@ -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.

View file

@ -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()]);
}