Replace the "give up and dump object" attachment view fallback with a client-side redirect to the target URL, which will at least be useful.

This commit is contained in:
Brion Vibber 2010-03-22 10:35:54 -07:00
parent edee1fc09e
commit 7aee7670c7

View File

@ -306,7 +306,7 @@ class Attachment extends AttachmentListItem
function showRepresentation() {
if (empty($this->oembed->type)) {
if (empty($this->attachment->mimetype)) {
$this->out->element('pre', null, 'oh well... not sure how to handle the following: ' . print_r($this->attachment, true));
$this->showFallback();
} else {
switch ($this->attachment->mimetype) {
case 'image/gif':
@ -332,6 +332,8 @@ class Attachment extends AttachmentListItem
$this->out->element('param', array('name' => 'autoStart', 'value' => 1));
$this->out->elementEnd('object');
break;
default:
$this->showFallback();
}
}
} else {
@ -354,9 +356,23 @@ class Attachment extends AttachmentListItem
break;
default:
$this->out->element('pre', null, 'oh well... not sure how to handle the following oembed: ' . print_r($this->oembed, true));
$this->showFallback();
}
}
}
function showFallback()
{
// If we don't know how to display an attachment inline, we probably
// shouldn't have gotten to this point.
//
// But, here we are... displaying details on a file or remote URL
// either on the main view or in an ajax-loaded lightbox. As a lesser
// of several evils, we'll try redirecting to the actual target via
// client-side JS.
common_log(LOG_ERR, "Empty or unknown type for file id {$this->attachment->id}; falling back to client-side redirect.");
$this->out->raw('<script>window.location = ' . json_encode($this->attachment->url) . ';</script>');
}
}