fix(JSResourceLocator): Handle missing translations silently

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
pull/38207/head
Ferdinand Thiessen 3 years ago
parent 9d2d3d482b
commit 31c01fa3da
  1. 25
      lib/private/Template/JSResourceLocator.php
  2. 22
      tests/lib/Template/JSResourceLocatorTest.php

@ -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',
]);
}
/**

@ -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();

Loading…
Cancel
Save