]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
streamline the file action
authorEvan Prodromou <evan@controlyourself.ca>
Thu, 25 Jun 2009 18:08:32 +0000 (11:08 -0700)
committerEvan Prodromou <evan@controlyourself.ca>
Thu, 25 Jun 2009 18:08:32 +0000 (11:08 -0700)
actions/file.php
classes/Notice.php

index bb245c4a778abd73145db2b3006e061008a1fee9..271f57ab9634aeaa4a6d675d30ac46a2849f30c8 100644 (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);
     }
 }
 
index 44179b2543d16f32b35536003810eb0bbac3c20d..9960d3d0aaa834da7db7f8aa49497483c5505c87 100644 (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);