]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix(JSResourceLocator): Handle missing translations silently 38207/head
authorFerdinand Thiessen <opensource@fthiessen.de>
Thu, 11 May 2023 15:51:55 +0000 (17:51 +0200)
committerFerdinand Thiessen <opensource@fthiessen.de>
Thu, 11 May 2023 16:22:24 +0000 (18:22 +0200)
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
lib/private/Template/JSResourceLocator.php
tests/lib/Template/JSResourceLocatorTest.php

index 120234146e10ca22d13b42152ae6b1af2d6cfb95..61611c69b0f6f1f5193076a66be15ef8bade6f5e 100644 (file)
@@ -99,21 +99,28 @@ class JSResourceLocator extends ResourceLocator {
                        // gets turned into cwd.
                        $app_path = realpath($app_path);
 
-                       // missing translations files will be ignored
-                       if (strpos($script, 'l10n/') === 0) {
-                               $this->appendScriptIfExist($app_path, $script, $app_url);
+                       // check combined files
+                       if ($this->cacheAndAppendCombineJsonIfExist($app_path, $script.'.json', $app)) {
                                return;
                        }
 
-                       if (!$this->cacheAndAppendCombineJsonIfExist($app_path, $script.'.json', $app)) {
-                               $this->appendScriptIfExist($app_path, $script, $app_url);
+                       // fallback to plain file location
+                       if ($this->appendScriptIfExist($app_path, $script, $app_url)) {
+                               return;
                        }
                } catch (AppPathNotFoundException) {
-                       $this->logger->error('Could not find resource {resource} to load', [
-                               'resource' => $app . '/' . $script . '.js',
-                               'app' => 'jsresourceloader',
-                       ]);
+                       // pass (general error handling happens below)
                }
+
+               // missing translations files will be ignored
+               if (strpos($script, 'l10n/') === 0) {
+                       return;
+               }
+
+               $this->logger->error('Could not find resource {resource} to load', [
+                       'resource' => $app . '/' . $script . '.js',
+                       'app' => 'jsresourceloader',
+               ]);
        }
 
        /**
index 9ac6a32e22ceda7545744384963e5535150845b0..f5af138060a198c02971be259b144515912be2dd 100644 (file)
@@ -26,6 +26,7 @@ namespace Test\Template;
 use OC\SystemConfig;
 use OC\Template\JSCombiner;
 use OC\Template\JSResourceLocator;
+use OCP\App\AppPathNotFoundException;
 use OCP\App\IAppManager;
 use OCP\Files\IAppData;
 use OCP\ICacheFactory;
@@ -139,6 +140,27 @@ class JSResourceLocatorTest extends \Test\TestCase {
                $this->rrmdir($new_apps_path);
        }
 
+       public function testNotExistingTranslationHandledSilent() {
+               $this->appManager->expects($this->once())
+                       ->method('getAppPath')
+                       ->with('core')
+                       ->willThrowException(new AppPathNotFoundException());
+               $this->appManager->expects($this->once())
+                       ->method('getAppWebPath')
+                       ->with('core')
+                       ->willThrowException(new AppPathNotFoundException());
+               // Assert logger is not called
+               $this->logger->expects($this->never())
+                       ->method('error');
+
+               // Run the tests
+               $locator = $this->jsResourceLocator();
+               $locator->find(["core/l10n/en.js"]);
+
+               $resources = $locator->getResources();
+               $this->assertCount(0, $resources);
+       }
+
        public function testFindModuleJSWithFallback() {
                // First create new apps path, and a symlink to it
                $apps_dirname = $this->randomString();