return common_local_url('attachment', array('attachment'=>$this->getID()));
}
- public function getUrl($prefer_local=true)
+ /**
+ * @param mixed $use_local true means require local, null means prefer local, false means use whatever is stored
+ */
+ public function getUrl($use_local=null)
{
- if ($prefer_local && !empty($this->filename)) {
- // A locally stored file, so let's generate a URL for our instance.
- return self::url($this->getFilename());
+ if ($use_local !== false) {
+ if (is_string($this->filename) || !empty($this->filename)) {
+ // A locally stored file, so let's generate a URL for our instance.
+ return self::url($this->getFilename());
+ }
+ if ($use_local) {
+ // if the file wasn't stored locally (has filename) and we require a local URL
+ throw new FileNotStoredLocallyException($this);
+ }
}
+
// No local filename available, return the URL we have stored
return $this->url;
}
--- /dev/null
+<?php
+
+if (!defined('GNUSOCIAL')) { exit(1); }
+
+class FileNotStoredLocallyException extends ServerException
+{
+ public $file = null;
+
+ public function __construct(File $file)
+ {
+ $this->file = $file;
+ common_debug('Requested local URL for a file that is not stored locally with id=='._ve($this->file->getID()));
+ parent::__construct(_('Requested local URL for a file that is not stored locally.'));
+ }
+}