]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
File->getEnclosure improvements (text/html is not an attachment)
authorMikael Nordfeldth <mmn@hethane.se>
Tue, 5 Aug 2014 08:54:00 +0000 (10:54 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Tue, 5 Aug 2014 08:54:00 +0000 (10:54 +0200)
classes/File.php
lib/util.php

index b834036405aba6a3b85c21c5028ac19d924db243..029ff487a48e4fe561411f7e4a8dfa04f3c460dc 100644 (file)
@@ -352,30 +352,21 @@ class File extends Managed_DataObject
 
     function getEnclosure(){
         $enclosure = (object) array();
-        $enclosure->title=$this->title;
-        $enclosure->url=$this->url;
-        $enclosure->title=$this->title;
-        $enclosure->date=$this->date;
-        $enclosure->modified=$this->modified;
-        $enclosure->size=$this->size;
-        $enclosure->mimetype=$this->mimetype;
-
-        if (!isset($this->filename)) {
-            $notEnclosureMimeTypes = array(null,'text/html','application/xhtml+xml');
-            $mimetype = $this->mimetype;
-            if($mimetype != null){
-                $mimetype = strtolower($this->mimetype);
-            }
-            $semicolon = strpos($mimetype,';');
-            if($semicolon){
-                $mimetype = substr($mimetype,0,$semicolon);
-            }
-            if (in_array($mimetype, $notEnclosureMimeTypes)) {
-                Event::handle('FileEnclosureMetadata', array($this, &$enclosure));
-            }
+        foreach (array('title', 'url', 'date', 'modified', 'size', 'mimetype') as $key) {
+            $enclosure->$key = $this->$key;
+        }
+
+        $needMoreMetadataMimetypes = array(null, 'text/html', 'application/xhtml+xml');
+
+        if (!isset($this->filename) && in_array(common_bare_mime($enclosure->mimetype), $needMoreMetadataMimetypes)) {
+            // This fetches enclosure metadata for non-local links with unset/HTML mimetypes,
+            // which may be enriched through oEmbed or similar (implemented as plugins)
+            Event::handle('FileEnclosureMetadata', array($this, &$enclosure));
         }
-        if (empty($enclosure->mimetype)) {
-            // This means we don't know what it is, so it can't be an enclosure!
+        if (empty($enclosure->mimetype) || in_array(common_bare_mime($enclosure->mimetype), $needMoreMetadataMimetypes)) {
+            // This means we either don't know what it is, so it can't
+            // be shown as an enclosure, or it is an HTML link which
+            // does not link to a resource with further metadata.
             throw new ServerException('Unknown enclosure mimetype, not enough metadata');
         }
         return $enclosure;
index fd89bb491cd44d2e3351854ae16654029b783ae1..08a0cdea2fac9f736e164ac0e01e0a3f1bccd2c9 100644 (file)
@@ -1820,6 +1820,15 @@ function common_get_mime_media($type)
     return strtolower($tmp[0]);
 }
 
+function common_bare_mime($mimetype)
+{
+    $mimetype = mb_strtolower($mimetype);
+    if ($semicolon = mb_strpos($mimetype, ';')) {
+        $mimetype = mb_substr($mimetype, 0, $semicolon);
+    }
+    return $mimetype;
+}
+
 function common_mime_type_match($type, $avail)
 {
     if(array_key_exists($type, $avail)) {