// $args['attachment'] should always be set if action===attachment, given our routing rules
$file = File::getByID($args['attachment']);
return $file;
- } catch (EmptyIdException $e) {
+ } catch (EmptyPkeyValueException $e) {
// ...but $args['attachment'] can also be 0...
} catch (NoResultException $e) {
// apparently this link goes to us, but is _not_ an existing attachment (File) ID?
return self::tryFilename($this->filename);
}
+ public function getSize()
+ {
+ return intval($this->size);
+ }
+
// where should the file go?
static function filename(Profile $profile, $origname, $mimetype)
$ext = common_supported_mime_to_ext($mimetype);
// we do, so use it!
return $ext;
- } catch (Exception $e) { // FIXME: Make this exception more specific to "unknown mime=>ext relation"
+ } catch (UnknownMimeExtensionException $e) {
// We don't know the extension for this mimetype, but let's guess.
- // If we are very liberal with uploads ($config['attachments']['supported'] === true)
- // then we try to do some guessing based on the filename, if it was supplied.
- if (!is_null($filename) && common_config('attachments', 'supported')===true
- && preg_match('/^.+\.([A-Za-z0-9]+)$/', $filename, $matches)) {
+ // If we can't recognize the extension from the MIME, we try
+ // to guess based on filename, if one was supplied.
+ if (!is_null($filename) && preg_match('/^.+\.([A-Za-z0-9]+)$/', $filename, $matches)) {
// we matched on a file extension, so let's see if it means something.
$ext = mb_strtolower($matches[1]);
// the attachment extension based on its filename was not blacklisted so it's ok to use it
return $ext;
}
+ } catch (Exception $e) {
+ common_log(LOG_INFO, 'Problem when figuring out extension for mimetype: '._ve($e));
}
// If nothing else has given us a result, try to extract it from
* @param $width int Max width of thumbnail in pixels. (if null, use common_config values)
* @param $height int Max height of thumbnail in pixels. (if null, square-crop to $width)
* @param $crop bool Crop to the max-values' aspect ratio
+ * @param $force_still bool Don't allow fallback to showing original (such as animated GIF)
+ * @param $upscale mixed Whether or not to scale smaller images up to larger thumbnail sizes. (null = site default)
*
* @return File_thumbnail
*
return File_thumbnail::byFile($this);
} catch (NoResultException $e) {
// and if it's not a remote file, it'll be safe to use the locally stored File
- throw new UseFileAsThumbnailException($this->id);
+ throw new UseFileAsThumbnailException($this);
}
}
}
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;
}