Merge remote-tracking branch 'upstream/master'
[quix0rs-gnu-social.git] / classes / File_thumbnail.php
index a2e633249f950c345b54b9bbd80ce713200929a4..186ffc50a0b770b63033589407c354e482b7d780 100644 (file)
@@ -38,7 +38,7 @@ class File_thumbnail extends Managed_DataObject
         return array(
             'fields' => array(
                 'file_id' => array('type' => 'int', 'not null' => true, 'description' => 'thumbnail for what URL/file'),
-                'url' => array('type' => 'text', 'not null' => false, 'description' => 'URL of thumbnail'),
+                'url' => array('type' => 'text', 'description' => 'URL of thumbnail'),
                 'filename' => array('type' => 'text', 'description' => 'if stored locally, filename is put here'),
                 'width' => array('type' => 'int', 'description' => 'width of thumbnail'),
                 'height' => array('type' => 'int', 'description' => 'height of thumbnail'),
@@ -82,9 +82,9 @@ class File_thumbnail extends Managed_DataObject
      * Fetch an entry by using a File's id
      */
     static function byFile(File $file) {
-        $file_thumbnail = self::getKV('file_id', $file->id);
+        $file_thumbnail = self::getKV('file_id', $file->getID());
         if (!$file_thumbnail instanceof File_thumbnail) {
-            throw new ServerException(sprintf('No File_thumbnail entry for File id==%u', $file->id));
+            throw new ServerException(sprintf('No File_thumbnail entry for File id==%u', $file->getID()));
         }
         return $file_thumbnail;
     }
@@ -134,12 +134,12 @@ class File_thumbnail extends Managed_DataObject
 
     public function getUrl()
     {
-        if (!empty($this->getFile()->filename)) {
+        if (!empty($this->filename) || $this->getFile()->isLocal()) {
             // A locally stored File, so we can dynamically generate a URL.
             if (!empty($this->url)) {
                 // Let's just clear this field as there is no point in having it for local files.
                 $orig = clone($this);
-                $this->url = null;
+                $this->url = '';
                 $this->update($orig);
             }
             $url = common_local_url('attachment_thumbnail', array('attachment'=>$this->file_id));
@@ -149,10 +149,33 @@ class File_thumbnail extends Managed_DataObject
             return $url . http_build_query(array('w'=>$this->width, 'h'=>$this->height));
         }
 
-        // No local filename available, return the URL we have stored
+        // No local filename available, return the remote URL we have stored
         return $this->url;
     }
 
+    public function getHeight()
+    {
+        return $this->height;
+    }
+
+    public function getWidth()
+    {
+        return $this->width;
+    }
+
+    /**
+     * @throws UseFileAsThumbnailException from File_thumbnail->getUrl() for stuff like animated GIFs
+     */
+    public function getHtmlAttrs(array $orig=array(), $overwrite=true)
+    {
+        $attrs = [
+                'height' => $this->getHeight(),
+                'width'  => $this->getWidth(),
+                'src'    => $this->getUrl(),
+            ];
+        return $overwrite ? array_merge($orig, $attrs) : array_merge($attrs, $orig);
+    }
+
     public function delete($useWhere=false)
     {
         if (!empty($this->filename) && file_exists(File_thumbnail::path($this->filename))) {
@@ -167,11 +190,6 @@ class File_thumbnail extends Managed_DataObject
 
     public function getFile()
     {
-        $file = new File();
-        $file->id = $this->file_id;
-        if (!$file->find(true)) {
-            throw new NoResultException($file);
-        }
-        return $file;
+        return File::getByID($this->file_id);
     }
 }