Merge pull request #38207 from nextcloud/fix/jsresourcelocator-l10n-handling

This commit is contained in:
John Molakvoæ 2023-05-12 10:47:46 +02:00 committed by GitHub
commit 174c226c28
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 9 deletions

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

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