]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Fix for attachment "h bug": posting a shortened link to an oembed-able resource that...
authorBrion Vibber <brion@pobox.com>
Wed, 10 Mar 2010 21:39:42 +0000 (13:39 -0800)
committerBrion Vibber <brion@pobox.com>
Wed, 10 Mar 2010 23:13:16 +0000 (15:13 -0800)
classes/File.php
classes/File_oembed.php
classes/File_redirection.php

index 1b8ef1b3eea15f957b82736a38e6e73838355e94..a83ecac4cd8cb0fe0b3de01274896bbe878378d5 100644 (file)
@@ -67,7 +67,14 @@ class File extends Memcached_DataObject
         return $att;
     }
 
-    function saveNew($redir_data, $given_url) {
+    /**
+     * Save a new file record.
+     *
+     * @param array $redir_data lookup data eg from File_redirection::where()
+     * @param string $given_url
+     * @return File
+     */
+    function saveNew(array $redir_data, $given_url) {
         $x = new File;
         $x->url = $given_url;
         if (!empty($redir_data['protected'])) $x->protected = $redir_data['protected'];
index 11f160718ef21b38ebf6043384b3fc8ffff2dfae..f59eaf24caed200c9355f2a3b3a87604e2b34032 100644 (file)
@@ -81,7 +81,13 @@ class File_oembed extends Memcached_DataObject
         }
     }
 
-    function saveNew($data, $file_id) {
+    /**
+     * Save embedding info for a new file.
+     *
+     * @param array $data lookup data as from File_redirection::where
+     * @param int $file_id
+     */
+    function saveNew(array $data, $file_id) {
         $file_oembed = new File_oembed;
         $file_oembed->file_id = $file_id;
         $file_oembed->version = $data->version;
index 08a6e8d8beb56d0ccd75c51b9e58c32f57e6c18a..d969791587ead71221690d0b2d1bfb13359eb813 100644 (file)
@@ -115,11 +115,45 @@ class File_redirection extends Memcached_DataObject
         return $ret;
     }
 
+    /**
+     * Check if this URL is a redirect and return redir info.
+     * If a File record is present for this URL, it is not considered a redirect.
+     * If a File_redirection record is present for this URL, the recorded target is returned.
+     *
+     * If no File or File_redirect record is present, the URL is hit and any
+     * redirects are followed, up to 10 levels or until a protected URL is
+     * reached.
+     *
+     * @param string $in_url
+     * @return mixed one of:
+     *         string - target URL, if this is a direct link or a known redirect
+     *         array - redirect info if this is an *unknown* redirect:
+     *              associative array with the following elements:
+     *                code: HTTP status code
+     *                redirects: count of redirects followed
+     *                url: URL string of final target
+     *                type (optional): MIME type from Content-Type header
+     *                size (optional): byte size from Content-Length header
+     *                time (optional): timestamp from Last-Modified header
+     */
     function where($in_url) {
         $ret = File_redirection::_redirectWhere_imp($in_url);
         return $ret;
     }
 
+    /**
+     * Shorten a URL with the current user's configured shortening
+     * options, if applicable.
+     *
+     * If it cannot be shortened or the "short" URL is longer than the
+     * original, the original is returned.
+     *
+     * If the referenced item has not been seen before, embedding data
+     * may be saved.
+     *
+     * @param string $long_url
+     * @return string
+     */
     function makeShort($long_url) {
 
         $canon = File_redirection::_canonUrl($long_url);
@@ -141,11 +175,20 @@ class File_redirection extends Memcached_DataObject
             // store it
             $file = File::staticGet('url', $long_url);
             if (empty($file)) {
+                // Check if the target URL is itself a redirect...
                 $redir_data = File_redirection::where($long_url);
-                $file = File::saveNew($redir_data, $long_url);
-                $file_id = $file->id;
-                if (!empty($redir_data['oembed']['json'])) {
-                    File_oembed::saveNew($redir_data['oembed']['json'], $file_id);
+                if (is_array($redir_data)) {
+                    // We haven't seen the target URL before.
+                    // Save file and embedding data about it!
+                    $file = File::saveNew($redir_data, $long_url);
+                    $file_id = $file->id;
+                    if (!empty($redir_data['oembed']['json'])) {
+                        File_oembed::saveNew($redir_data['oembed']['json'], $file_id);
+                    }
+                } else if (is_string($redir_data)) {
+                    // The file is a known redirect target.
+                    $file = File::staticGet('url', $redir_data);
+                    $file_id = $file->id;
                 }
             } else {
                 $file_id = $file->id;