]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/File.php
restructuring of User::registerNew() lost password munging
[quix0rs-gnu-social.git] / classes / File.php
index 1c64b4d335ac0b867f760c2569b43d4cce164514..c527c4ffe92012a2877b434bb83becfd44fc6891 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
- * Laconica - a distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, Control Yourself, Inc.
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, 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
@@ -17,7 +17,7 @@
  * along with this program.     If not, see <http://www.gnu.org/licenses/>.
  */
 
-if (!defined('LACONICA')) { exit(1); }
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
 
 require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
 require_once INSTALLDIR.'/classes/File_redirection.php';
@@ -78,14 +78,21 @@ class File extends Memcached_DataObject
         $file_id = $x->insert();
 
         if (isset($redir_data['type'])
-            && ('text/html' === substr($redir_data['type'], 0, 9))
+            && (('text/html' === substr($redir_data['type'], 0, 9) || 'application/xhtml+xml' === substr($redir_data['type'], 0, 21)))
             && ($oembed_data = File_oembed::_getOembed($given_url))) {
+
+            $fo = File_oembed::staticGet('file_id', $file_id);
+
+            if (empty($fo)) {
                 File_oembed::saveNew($oembed_data, $file_id);
+            } else {
+                common_log(LOG_WARNING, "Strangely, a File_oembed object exists for new file $file_id", __FILE__);
+            }
         }
         return $x;
     }
 
-    function processNew($given_url, $notice_id) {
+    function processNew($given_url, $notice_id=null) {
         if (empty($given_url)) return -1;   // error, no url to process
         $given_url = File_redirection::_canonUrl($given_url);
         if (empty($given_url)) return -1;   // error, no url to process
@@ -94,9 +101,15 @@ class File extends Memcached_DataObject
             $file_redir = File_redirection::staticGet('url', $given_url);
             if (empty($file_redir)) {
                 $redir_data = File_redirection::where($given_url);
-                $redir_url = $redir_data['url'];
+                if (is_array($redir_data)) {
+                    $redir_url = $redir_data['url'];
+                } elseif (is_string($redir_data)) {
+                    $redir_url = $redir_data;
+                } else {
+                    throw new ServerException("Can't process url '$given_url'");
+                }
                 // TODO: max field length
-                if ($redir_url === $given_url || strlen($redir_url) > 255) { 
+                if ($redir_url === $given_url || strlen($redir_url) > 255) {
                     $x = File::saveNew($redir_data, $given_url);
                     $file_id = $x->id;
                 } else {
@@ -119,7 +132,9 @@ class File extends Memcached_DataObject
             }
         }
 
-        File_to_post::processNew($file_id, $notice_id);
+        if (!empty($notice_id)) {
+            File_to_post::processNew($file_id, $notice_id);
+        }
         return $x;
     }
 
@@ -174,25 +189,32 @@ class File extends Memcached_DataObject
 
     static function url($filename)
     {
-        $path = common_config('attachments', 'path');
+        if(common_config('site','private')) {
 
-        if ($path[strlen($path)-1] != '/') {
-            $path .= '/';
-        }
+            return common_local_url('getfile',
+                                array('filename' => $filename));
 
-        if ($path[0] != '/') {
-            $path = '/'.$path;
-        }
+        } else {
+            $path = common_config('attachments', 'path');
 
-        $server = common_config('attachments', 'server');
+            if ($path[strlen($path)-1] != '/') {
+                $path .= '/';
+            }
 
-        if (empty($server)) {
-            $server = common_config('site', 'server');
-        }
+            if ($path[0] != '/') {
+                $path = '/'.$path;
+            }
 
-        // XXX: protocol
+            $server = common_config('attachments', 'server');
 
-        return 'http://'.$server.$path.$filename;
+            if (empty($server)) {
+                $server = common_config('site', 'server');
+            }
+
+            // XXX: protocol
+
+            return 'http://'.$server.$path.$filename;
+        }
     }
 
     function getEnclosure(){
@@ -204,10 +226,8 @@ class File extends Memcached_DataObject
         $enclosure->modified=$this->modified;
         $enclosure->size=$this->size;
         $enclosure->mimetype=$this->mimetype;
-        
-        if(isset($this->filename)){
-            return $enclosure;
-        }else{
+
+        if(! isset($this->filename)){
             $notEnclosureMimeTypes = array('text/html','application/xhtml+xml');
             $mimetype = strtolower($this->mimetype);
             $semicolon = strpos($mimetype,';');
@@ -215,9 +235,9 @@ class File extends Memcached_DataObject
                 $mimetype = substr($mimetype,0,$semicolon);
             }
             if(in_array($mimetype,$notEnclosureMimeTypes)){
-                $ombed = File_oembed::staticGet('file_id',$this->id);
+                $oembed = File_oembed::staticGet('file_id',$this->id);
                 if($oembed){
-                    $mimetype = strtolower($ombed->mimetype);
+                    $mimetype = strtolower($oembed->mimetype);
                     $semicolon = strpos($mimetype,';');
                     if($semicolon){
                         $mimetype = substr($mimetype,0,$semicolon);
@@ -225,19 +245,16 @@ class File extends Memcached_DataObject
                     if(in_array($mimetype,$notEnclosureMimeTypes)){
                         return false;
                     }else{
-                        if($ombed->mimetype) $enclosure->mimetype=$ombed->mimetype;
-                        if($ombed->url) $enclosure->url=$ombed->url;
-                        if($ombed->title) $enclosure->title=$ombed->title;
-                        if($ombed->modified) $enclosure->modified=$ombed->modified;
-                        unset($ombed->size);
+                        if($oembed->mimetype) $enclosure->mimetype=$oembed->mimetype;
+                        if($oembed->url) $enclosure->url=$oembed->url;
+                        if($oembed->title) $enclosure->title=$oembed->title;
+                        if($oembed->modified) $enclosure->modified=$oembed->modified;
+                        unset($oembed->size);
                     }
-                }else{
-                    return $enclosure;
                 }
-            }else{
-                return $enclosure;
             }
         }
+        return $enclosure;
     }
 }