streamline the file action

This commit is contained in:
Evan Prodromou 2009-06-25 11:08:32 -07:00
parent 3ca9e85ce4
commit 4d56bc6a0a
2 changed files with 46 additions and 12 deletions

View File

@ -21,20 +21,40 @@ if (!defined('LACONICA')) { exit(1); }
require_once(INSTALLDIR.'/actions/shownotice.php');
class FileAction extends ShowNoticeAction
class FileAction extends Action
{
function showPage() {
$source_url = common_local_url('file', array('notice' => $this->notice->id));
$query = "select file_redirection.url as url from file join file_redirection on file.id = file_redirection.file_id where file.url = '$source_url'";
$file = new File_redirection;
$file->query($query);
$file->fetch();
if (empty($file->url)) {
die('nothing attached here');
} else {
header("Location: {$file->url}");
die();
var $id = null;
var $filerec = null;
function prepare($args)
{
parent::prepare($args);
$this->id = $this->trimmed('notice');
if (empty($this->id)) {
$this->clientError(_('No notice id'));
}
$notice = Notice::staticGet('id', $this->id);
if (empty($notice)) {
$this->clientError(_('No notice'));
}
$atts = $notice->attachments();
if (empty($atts)) {
$this->clientError(_('No attachments'));
}
foreach ($atts as $att) {
if (!empty($att->filename)) {
$this->filerec = $att;
break;
}
}
if (empty($this->filerec)) {
$this->clientError(_('No uploaded attachments'));
}
return true;
}
function handle() {
common_redirect($this->filerec->url);
}
}

View File

@ -331,6 +331,20 @@ class Notice extends Memcached_DataObject
return $n_attachments;
}
function attachments() {
// XXX: cache this
$att = array();
$f2p = new File_to_post;
$f2p->post_id = $this->id;
if ($f2p->find()) {
while ($f2p->fetch()) {
$f = File::staticGet($f2p->file_id);
$att[] = clone($f);
}
}
return $att;
}
function blowCaches($blowLast=false)
{
$this->blowSubsCache($blowLast);