[BUGFIX] Fix getPublicUrl return hints 43/56643/6
authorKevin Ditscheid <kevinditscheid@gmail.com>
Wed, 11 Apr 2018 20:41:49 +0000 (22:41 +0200)
committerJigal van Hemert <jigal.van.hemert@typo3.org>
Sun, 15 Apr 2018 20:50:10 +0000 (22:50 +0200)
Since getPublicUrl could also return null, we need to
change the return hints to respect that.

Resolves: #84688
Releases: master, 8.7
Change-Id: Ib811b6bbeebf9dec974b094c6acf505ca4ac26e1
Reviewed-on: https://review.typo3.org/56643
Reviewed-by: Frans Saris <franssaris@gmail.com>
Tested-by: Frans Saris <franssaris@gmail.com>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Jigal van Hemert <jigal.van.hemert@typo3.org>
Tested-by: Jigal van Hemert <jigal.van.hemert@typo3.org>
typo3/sysext/core/Classes/Resource/Driver/DriverInterface.php
typo3/sysext/core/Classes/Resource/Driver/LocalDriver.php
typo3/sysext/core/Classes/Resource/File.php
typo3/sysext/core/Classes/Resource/FileInterface.php
typo3/sysext/core/Classes/Resource/FileReference.php
typo3/sysext/core/Classes/Resource/Folder.php
typo3/sysext/core/Classes/Resource/InaccessibleFolder.php
typo3/sysext/core/Classes/Resource/ResourceStorage.php
typo3/sysext/filelist/Classes/FileFacade.php
typo3/sysext/frontend/Classes/Typolink/FileOrFolderLinkBuilder.php

index ca9f49b..5822f73 100644 (file)
@@ -122,7 +122,7 @@ interface DriverInterface
      * Either fully qualified URL or relative to PATH_site (rawurlencoded).
      *
      * @param string $identifier
-     * @return string
+     * @return string|null NULL if file is missing or deleted, the generated url otherwise
      */
     public function getPublicUrl($identifier);
 
index f816aae..1d94e6d 100644 (file)
@@ -169,7 +169,7 @@ class LocalDriver extends AbstractHierarchicalFilesystemDriver
      * For the local driver, this will always return a path relative to PATH_site.
      *
      * @param string $identifier
-     * @return string
+     * @return string|null NULL if file is missing or deleted, the generated url otherwise
      * @throws \TYPO3\CMS\Core\Resource\Exception
      */
     public function getPublicUrl($identifier)
index 89ec228..2cd846d 100644 (file)
@@ -359,12 +359,12 @@ class File extends AbstractFile
      *
      * @param bool  $relativeToCurrentScript   Determines whether the URL returned should be relative to the current script, in case it is relative at all (only for the LocalDriver)
      *
-     * @return string
+     * @return string|null NULL if file is missing or deleted, the generated url otherwise
      */
     public function getPublicUrl($relativeToCurrentScript = false)
     {
         if ($this->isMissing() || $this->deleted) {
-            return false;
+            return null;
         }
         return $this->getStorage()->getPublicUrl($this, $relativeToCurrentScript);
     }
index 99b3e30..6dfe571 100644 (file)
@@ -136,7 +136,7 @@ interface FileInterface extends ResourceInterface
      * some web-based authentication. You have to take care of this yourself.
      *
      * @param bool $relativeToCurrentScript Determines whether the URL returned should be relative to the current script, in case it is relative at all (only for the LocalDriver)
-     * @return string
+     * @return string|null NULL if file is missing or deleted, the generated url otherwise
      */
     public function getPublicUrl($relativeToCurrentScript = false);
 
index 5f6e4a3..57f3546 100644 (file)
@@ -444,7 +444,7 @@ class FileReference implements FileInterface
      * some web-based authentication. You have to take care of this yourself.
      *
      * @param bool  $relativeToCurrentScript   Determines whether the URL returned should be relative to the current script, in case it is relative at all (only for the LocalDriver)
-     * @return string
+     * @return string|null NULL if file is missing or deleted, the generated url otherwise
      */
     public function getPublicUrl($relativeToCurrentScript = false)
     {
index 9ac85a5..7a125db 100644 (file)
@@ -189,7 +189,7 @@ class Folder implements FolderInterface
      * web-based authentication. You have to take care of this yourself.
      *
      * @param bool $relativeToCurrentScript Determines whether the URL returned should be relative to the current script, in case it is relative at all (only for the LocalDriver)
-     * @return string
+     * @return string|null NULL if file is missing or deleted, the generated url otherwise
      */
     public function getPublicUrl($relativeToCurrentScript = false)
     {
index 352eeee..d90878c 100644 (file)
@@ -57,7 +57,7 @@ class InaccessibleFolder extends Folder
      * web-based authentication. You have to take care of this yourself.
      *
      * @param bool $relativeToCurrentScript Determines whether the URL returned should be relative to the current script, in case it is relative at all (only for the LocalDriver)
-     * @return string
+     * @return string|null NULL if file is missing or deleted, the generated url otherwise
      */
     public function getPublicUrl($relativeToCurrentScript = false)
     {
index 21ff4d7..6a02eb2 100644 (file)
@@ -1240,7 +1240,7 @@ class ResourceStorage implements ResourceStorageInterface
      *
      * @param ResourceInterface $resourceObject The file or folder object
      * @param bool $relativeToCurrentScript Determines whether the URL returned should be relative to the current script, in case it is relative at all (only for the LocalDriver)
-     * @return string
+     * @return string|null NULL if file is missing or deleted, the generated url otherwise
      */
     public function getPublicUrl(ResourceInterface $resourceObject, $relativeToCurrentScript = false)
     {
index 51a018d..e50059b 100644 (file)
@@ -136,9 +136,9 @@ class FileFacade
     }
 
     /**
-     * @return string
+     * @return string|null
      */
-    public function getPublicUrl(): string
+    public function getPublicUrl()
     {
         return $this->resource->getPublicUrl(true);
     }
index aecce0c..1c1c8d1 100644 (file)
@@ -41,6 +41,11 @@ class FileOrFolderLinkBuilder extends AbstractTypolinkBuilder
 
         $tsfe = $this->getTypoScriptFrontendController();
         $linkLocation = $fileOrFolderObject->getPublicUrl();
+        if ($linkLocation === null) {
+            // set the linkLocation to an empty string if null,
+            // so it does not collide with the various string functions
+            $linkLocation = '';
+        }
         // Setting title if blank value to link
         $linkText = $this->parseFallbackLinkTextIfLinkTextIsEmpty($linkText, rawurldecode($linkLocation));
         if (strpos($linkLocation, '/') !== 0