]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Handles local aliases (redirection) for file uploads attached to notices.
authorRobin Millette <millette@controlyourself.ca>
Wed, 27 May 2009 07:47:45 +0000 (03:47 -0400)
committerRobin Millette <millette@controlyourself.ca>
Wed, 27 May 2009 07:47:45 +0000 (03:47 -0400)
.gitignore
actions/file.php [new file with mode: 0644]
actions/newnotice.php
classes/File_redirection.php
lib/router.php
lib/util.php

index da6947bfdc3f27978ab534a07be6a96a4797a6ef..3418d8ee54d1178448469dd417721c9831c1ea2d 100644 (file)
@@ -1,5 +1,6 @@
 avatar/*
 files/*
+file/*
 _darcs/*
 logs/*
 config.php
@@ -16,3 +17,8 @@ dataobject.ini
 .buildpath
 .project
 .settings
+TODO.rym
+config-*.php
+good-config.php
+lac08.log
+php.log
diff --git a/actions/file.php b/actions/file.php
new file mode 100644 (file)
index 0000000..1179dbe
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+/*
+ * Laconica - a distributed open-source microblogging tool
+ * Copyright (C) 2008, Controlez-Vous, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (!defined('LACONICA')) { exit(1); }
+
+require_once(INSTALLDIR.'/actions/shownotice.php');
+
+class FileAction extends ShowNoticeAction
+{
+    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();
+        }
+    }
+}
+
index d7507c118289b9749e1e1e991beeb1f8f0e81d1a..aebdab3cca62b091f1e39f176715493c08ed7d6e 100644 (file)
@@ -110,7 +110,7 @@ class NewnoticeAction extends Action
     }
 
     function isFileAttached() {
-        return $_FILES['attach']['error'] === UPLOAD_ERR_OK;
+        return isset($_FILES['attach']['error']) && ($_FILES['attach']['error'] === UPLOAD_ERR_OK);
     }
 
     /**
@@ -205,14 +205,19 @@ class NewnoticeAction extends Action
         $destination = "file/{$notice->id}-$filename";
         if (move_uploaded_file($_FILES['attach']['tmp_name'], INSTALLDIR . "/$destination")) {
             $file = new File;
-//            $file->url = common_local_url('file', array('notice' => $notice->id));
-            $file->url = common_path($destination);
+            $file->url = common_local_url('file', array('notice' => $notice->id));
+//            $file->url = common_path($destination);
             $file->size = filesize(INSTALLDIR . "/$destination");
             $file->date = time();
             $file->mimetype = $_FILES['attach']['type'];
-            if ($ok = $file->insert()) {
+            if ($file_id = $file->insert()) {
+                $file_redir = new File_redirection;
+                $file_redir->url = common_path($destination);
+                $file_redir->file_id = $file_id;
+                $file_redir->insert();
+
                 $f2p = new File_to_post;
-                $f2p->file_id = $ok
+                $f2p->file_id = $file_id
                 $f2p->post_id = $notice->id; 
                 $f2p->insert();
             } else {
index 0eae68178373757bf3bf5f042850610d4a341d9a..212cc36158ab3783fd6b72f7fbe9acf13eb28a7f 100644 (file)
@@ -133,7 +133,7 @@ class File_redirection extends Memcached_DataObject
         $file->limit(1);
         $file->orderBy('len');
         $file->find(true);
-        if (!empty($file->id)) {
+        if (!empty($file->url) && (strlen($file->url) < strlen($long_url))) {
             return $file->url;
         }
 
index bd482eafabc7e7455d9ee689ee2701b85027d987..456d1793e3245bf333343aae7ee4213245420fda 100644 (file)
@@ -164,11 +164,9 @@ class Router
                     array('action' => 'newnotice'),
                     array('replyto' => '[A-Za-z0-9_-]+'));
 
-/*
         $m->connect('notice/:notice/file', 
             array('action' => 'file'), 
             array('notice' => '[0-9]+'));
-*/
         
         $m->connect('notice/:notice',
                     array('action' => 'shownotice'),
index d56f44f7b45c39a948f8cd4ed488eb081ff783a1..ab12723098b1b706354257b9f9b4ceba925f15ec 100644 (file)
@@ -499,6 +499,11 @@ function common_linkify($url) {
 
 // if this URL is an attachment, then we set class='attachment' and id='attahcment-ID'
 // where ID is the id of the attachment for the given URL.
+//
+// we need a better test telling what can be shown as an attachment
+// we're currently picking up oembeds only.
+// I think the best option is another file_view table in the db
+// and associated dbobject.
     $query = "select file_oembed.file_id as file_id from file join file_oembed on file.id = file_oembed.file_id where file.url='$longurl'";
     $file = new File;
     $file->query($query);