Attach `.bin` extension to attachments
authorTim Düsterhus <duesterhus@woltlab.com>
Wed, 13 Mar 2019 14:03:54 +0000 (15:03 +0100)
committerTim Düsterhus <duesterhus@woltlab.com>
Wed, 13 Mar 2019 14:14:19 +0000 (15:14 +0100)
see #2840

wcfsetup/install/files/lib/data/attachment/Attachment.class.php

index b7a5db3a104a526186d920629442cea0be8f7ec5..49667aeaf97d33402b585d56c4f926d7ac82bb09 100644 (file)
@@ -123,7 +123,7 @@ class Attachment extends DatabaseObject implements IRouteController, IThumbnailF
         * @inheritDoc
         */
        public function getLocation() {
-               return self::getStorage() . substr($this->fileHash, 0, 2) . '/' . $this->attachmentID . '-' . $this->fileHash;
+               return $this->getLocationHelper(self::getStorage() . substr($this->fileHash, 0, 2) . '/' . $this->attachmentID . '-' . $this->fileHash);
        }
        
        /**
@@ -140,10 +140,33 @@ class Attachment extends DatabaseObject implements IRouteController, IThumbnailF
         */
        public function getThumbnailLocation($size = '') {
                if ($size == 'tiny') {
-                       return self::getStorage() . substr($this->fileHash, 0, 2) . '/' . $this->attachmentID . '-tiny-' . $this->fileHash;
+                       $location = self::getStorage() . substr($this->fileHash, 0, 2) . '/' . $this->attachmentID . '-tiny-' . $this->fileHash;
+               }
+               else {
+                       $location = self::getStorage() . substr($this->fileHash, 0, 2) . '/' . $this->attachmentID . '-thumbnail-' . $this->fileHash;
+               }
+               
+               return $this->getLocationHelper($location);
+       }
+       
+       /**
+        * Returns the appropriate location with or without extension.
+        * 
+        * @param       string $location
+        * @return      string
+        */
+       protected final function getLocationHelper($location) {
+               // Check location with extension
+               if (is_readable($location.'.bin')) {
+                       return $location.'.bin';
+               }
+               // Check legacy location
+               else if (is_readable($location)) {
+                       return $location;
                }
                
-               return self::getStorage() . substr($this->fileHash, 0, 2) . '/' . $this->attachmentID . '-thumbnail-' . $this->fileHash;
+               // Assume that the attachment is not yet uploaded.
+               return $location.'.bin';
        }
        
        /**