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'); require_once(INSTALLDIR.'/actions/shownotice.php');
class FileAction extends ShowNoticeAction class FileAction extends Action
{ {
function showPage() { var $id = null;
$source_url = common_local_url('file', array('notice' => $this->notice->id)); var $filerec = null;
$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; function prepare($args)
$file->query($query); {
$file->fetch(); parent::prepare($args);
if (empty($file->url)) { $this->id = $this->trimmed('notice');
die('nothing attached here'); if (empty($this->id)) {
} else { $this->clientError(_('No notice id'));
header("Location: {$file->url}");
die();
} }
$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; 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) function blowCaches($blowLast=false)
{ {
$this->blowSubsCache($blowLast); $this->blowSubsCache($blowLast);