summaryrefslogtreecommitdiffstats
path: root/lib/private/Template/ResourceLocator.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/Template/ResourceLocator.php')
-rwxr-xr-xlib/private/Template/ResourceLocator.php33
1 files changed, 32 insertions, 1 deletions
diff --git a/lib/private/Template/ResourceLocator.php b/lib/private/Template/ResourceLocator.php
index e22ebdcab7d..9015bf5d97c 100755
--- a/lib/private/Template/ResourceLocator.php
+++ b/lib/private/Template/ResourceLocator.php
@@ -117,7 +117,38 @@ abstract class ResourceLocator {
*/
protected function append($root, $file, $webRoot = null, $throw = true) {
if (!$webRoot) {
- $webRoot = $this->mapping[$root];
+ $tmpRoot = $root;
+ /*
+ * traverse the potential web roots upwards in the path
+ *
+ * example:
+ * - root: /srv/www/apps/myapp
+ * - available mappings: ['/srv/www']
+ *
+ * First we check if a mapping for /srv/www/apps/myapp is available,
+ * then /srv/www/apps, /srv/www/apps, /srv/www, ... until we find a
+ * valid web root
+ */
+ do {
+ if (isset($this->mapping[$tmpRoot])) {
+ $webRoot = $this->mapping[$tmpRoot];
+ break;
+ }
+
+ if ($tmpRoot === '/') {
+ $webRoot = '';
+ $this->logger->error('ResourceLocator can not find a web root (root: {root}, file: {file}, webRoot: {webRoot}, throw: {throw})', [
+ 'app' => 'lib',
+ 'root' => $root,
+ 'file' => $file,
+ 'webRoot' => $webRoot,
+ 'throw' => $throw ? 'true' : 'false'
+ ]);
+ break;
+ }
+ $tmpRoot = dirname($tmpRoot);
+ } while(true);
+
}
$this->resources[] = array($root, $webRoot, $file);