Skip to content

Commit

Permalink
fix(OC/Template): Allow .mjs files within custom app paths
Browse files Browse the repository at this point in the history
If apps are installed in non standard app paths, we need
to check `$app_path/$script` instead of only doing so for translations.
Without this it would fallback to `.js` extension even if a `.mjs` file exists.

Also tried make the code more selfe explaining.

Signed-off-by: Ferdinand Thiessen <[email protected]>
  • Loading branch information
susnux committed Jan 22, 2023
1 parent f2e0272 commit 5747a35
Showing 1 changed file with 21 additions and 29 deletions.
50 changes: 21 additions & 29 deletions lib/private/Template/JSResourceLocator.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,12 @@
namespace OC\Template;

use OCP\App\AppPathNotFoundException;
use OCP\App\IAppManager;
use Psr\Log\LoggerInterface;
use \OCP\App\IAppManager;

class JSResourceLocator extends ResourceLocator {
/** @var JSCombiner */
protected $jsCombiner;

/** @var IAppManager */
protected $appManager;
protected JSCombiner $jsCombiner;
protected IAppManager $appManager;

public function __construct(LoggerInterface $logger, JSCombiner $JSCombiner, IAppManager $appManager) {
parent::__construct($logger);
Expand Down Expand Up @@ -86,41 +83,36 @@ public function doFind($script) {
}

$script = substr($script, strpos($script, '/') + 1);
$app_path = false;
$app_url = false;
$app_url = null;

try {
$app_path = $this->appManager->getAppPath($app);
// Account for the possibility of having symlinks in app path. Only
// do this if $app_path is set, because an empty argument to realpath
// gets turned into cwd.
$app_path = realpath($app_path);
$app_url = $this->appManager->getAppWebPath($app);
} catch (AppPathNotFoundException) {
// pass
}

try {
$app_url = $this->appManager->getAppWebPath($app);
} catch (AppPathNotFoundException) {
// pass
}
$app_path = $this->appManager->getAppPath($app);

// missing translations files fill be ignored
if (strpos($script, 'l10n/') === 0) {
$this->appendScriptIfExist($app_path, $script, $app_url);
return;
}
// Account for the possibility of having symlinks in app path. Only
// do this if $app_path is set, because an empty argument to realpath
// gets turned into cwd.
$app_path = realpath($app_path);

if ($app_path === false && $app_url === false) {
// missing translations files will be ignored
if (strpos($script, 'l10n/') === 0) {
$this->appendScriptIfExist($app_path, $script, $app_url);
return;
}

if (!$this->cacheAndAppendCombineJsonIfExist($app_path, $script.'.json', $app)) {
$this->appendScriptIfExist($app_path, $script, $app_url);
}
} catch (AppPathNotFoundException) {
$this->logger->error('Could not find resource {resource} to load', [
'resource' => $app . '/' . $script . '.js',
'app' => 'jsresourceloader',
]);
return;
}

if (!$this->cacheAndAppendCombineJsonIfExist($app_path, $script.'.json', $app)) {
$this->append($app_path, $script . '.js', $app_url);
}
}

Expand All @@ -134,7 +126,7 @@ public function doFindTheme($script) {
* Try to find ES6 script file (`.mjs`) with fallback to plain javascript (`.js`)
* @see appendIfExist()
*/
protected function appendScriptIfExist($root, $file, $webRoot = null) {
protected function appendScriptIfExist(string $root, string $file, string $webRoot = null) {
if (!$this->appendIfExist($root, $file . '.mjs', $webRoot)) {
return $this->appendIfExist($root, $file . '.js', $webRoot);
}
Expand Down

0 comments on commit 5747a35

Please sign in to comment.