]> source.dussan.org Git - nextcloud-server.git/commitdiff
Use apps versions to generate suffix when possible 8611/head
authorJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
Thu, 1 Mar 2018 19:43:12 +0000 (20:43 +0100)
committerJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
Thu, 1 Mar 2018 19:43:12 +0000 (20:43 +0100)
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
lib/private/TemplateLayout.php

index 8a3a8e1e36b709b3ce4d311cb229cd1ec9f185be..2f51eb533c2c511aa56484c8a1fee29adea6e3fd 100644 (file)
@@ -131,7 +131,7 @@ class TemplateLayout extends \OC_Template {
                        if (empty(self::$versionHash)) {
                                $v = \OC_App::getAppVersions();
                                $v['core'] = implode('.', \OCP\Util::getVersion());
-                               self::$versionHash = md5(implode(',', $v));
+                               self::$versionHash = substr(md5(implode(',', $v)), 0, 8);
                        }
                } else {
                        self::$versionHash = md5('not installed');
@@ -194,16 +194,40 @@ class TemplateLayout extends \OC_Template {
                        if (substr($file, -strlen('print.css')) === 'print.css') {
                                $this->append( 'printcssfiles', $web.'/'.$file . $this->getVersionHashSuffix() );
                        } else {
-                               $this->append( 'cssfiles', $web.'/'.$file . $this->getVersionHashSuffix()  );
+                               $this->append( 'cssfiles', $web.'/'.$file . $this->getVersionHashSuffix($web, $file)  );
                        }
                }
        }
 
-       protected function getVersionHashSuffix() {
-               if(\OC::$server->getConfig()->getSystemValue('debug', false)) {
+       /**
+        * @param string $path
+        * @param string $file
+        * @return string
+        */
+       protected function getVersionHashSuffix($path = false, $file = false) {
+               if (\OC::$server->getConfig()->getSystemValue('debug', false)) {
                        // allows chrome workspace mapping in debug mode
                        return "";
                }
+               $v = \OC_App::getAppVersions();
+
+               // Try the webroot path for a match
+               if ($path !== false && $path !== '') {
+                       $appName = $this->getAppNamefromPath($path);
+                       if(array_key_exists($appName, $v)) {
+                               $appVersion = $v[$appName];
+                               return '?v=' . substr(md5($appVersion), 0, 8) . '-' . $this->config->getAppValue('theming', 'cachebuster', '0');
+                       }
+               }
+               // fallback to the file path instead
+               if ($file !== false && $file !== '') {
+                       $appName = $this->getAppNamefromPath($file);
+                       if(array_key_exists($appName, $v)) {
+                               $appVersion = $v[$appName];
+                               return '?v=' . substr(md5($appVersion), 0, 8) . '-' . $this->config->getAppValue('theming', 'cachebuster', '0');
+                       }
+               }
+
                if ($this->config->getSystemValue('installed', false) && \OC::$server->getAppManager()->isInstalled('theming')) {
                        return '?v=' . self::$versionHash . '-' . $this->config->getAppValue('theming', 'cachebuster', '0');
                }
@@ -235,6 +259,23 @@ class TemplateLayout extends \OC_Template {
                return $locator->getResources();
        }
 
+       /**
+        * @param string $path
+        * @return string|boolean
+        */
+       public function getAppNamefromPath($path) {
+               if ($path !== '' && is_string($path)) {
+                       $pathParts = explode('/', $path);
+                       if ($pathParts[0] === 'css') {
+                               // This is a scss request
+                               return $pathParts[1];
+                       }
+                       return end($pathParts);
+               }
+               return false;
+
+       }
+
        /**
         * @param array $scripts
         * @return array