FileSystem - stat: fix for old numerical application ids
authorPaul Mehrer <p.mehrer@metaways.de>
Thu, 15 Jun 2017 08:06:47 +0000 (10:06 +0200)
committerPhilipp Schüle <p.schuele@metaways.de>
Thu, 15 Jun 2017 08:47:38 +0000 (10:47 +0200)
Change-Id: I0dffcc80fbcaa51a8d0bbc09f523985cfc4984e9
Reviewed-on: http://gerrit.tine20.com/customers/4878
Tested-by: Jenkins CI (http://ci.tine20.com/)
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
tine20/Tinebase/FileSystem.php

index 3f1e5fc..9e27034 100644 (file)
@@ -1213,10 +1213,12 @@ class Tinebase_FileSystem implements
         try {
 
             $pathParts = $this->_splitPath($path);
-            if (strlen($pathParts[0]) !== 40) {
+            // is pathParts[0] not an id (either 40 characters or only digits), then its an application name to resolve
+            if (strlen($pathParts[0]) !== 40 && !ctype_digit($pathParts[0])) {
                 $oldPart = $pathParts[0];
                 $pathParts[0] = Tinebase_Application::getInstance()->getApplicationByName($pathParts[0])->getId();
-                $path = '/' . $pathParts[0] . mb_substr($path, mb_strlen($oldPart) + 1);
+                // + 1 in mb_substr offset because of the leading / char
+                $path = '/' . $pathParts[0] . mb_substr('/' . ltrim($path, '/'), mb_strlen($oldPart) + 1);
             }
             $cacheId = $this->_getCacheId($pathParts, $revision);