Fixed issue with translation loading without theme

System was using the empty state return from theme_path,
when no theme was configured, for loading in languages
which would result in the root path being looked up upon.

This changes the theme_path helper to return null in cases a theme
is not configured instead of empty string to help prevent assumed
return path will be legitimate, and to help enforce error case
handling.

For #2836
This commit is contained in:
Dan Brown 2021-07-03 11:53:46 +01:00
parent 3dda622f0a
commit 4da72aa267
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
3 changed files with 7 additions and 4 deletions

View File

@ -45,7 +45,7 @@ class ThemeService
public function readThemeActions() public function readThemeActions()
{ {
$themeActionsFile = theme_path('functions.php'); $themeActionsFile = theme_path('functions.php');
if (file_exists($themeActionsFile)) { if ($themeActionsFile && file_exists($themeActionsFile)) {
require $themeActionsFile; require $themeActionsFile;
} }
} }

View File

@ -20,7 +20,8 @@ class FileLoader extends BaseLoader
} }
if (is_null($namespace) || $namespace === '*') { if (is_null($namespace) || $namespace === '*') {
$themeTranslations = $this->loadPath(theme_path('lang'), $locale, $group); $themePath = theme_path('lang');
$themeTranslations = $themePath ? $this->loadPath($themePath, $locale, $group) : [];
$originalTranslations = $this->loadPath($this->path, $locale, $group); $originalTranslations = $this->loadPath($this->path, $locale, $group);
return array_merge($originalTranslations, $themeTranslations); return array_merge($originalTranslations, $themeTranslations);
} }

View File

@ -94,13 +94,15 @@ function setting(string $key = null, $default = null)
/** /**
* Get a path to a theme resource. * Get a path to a theme resource.
* Returns null if a theme is not configured and
* therefore a full path is not available for use.
*/ */
function theme_path(string $path = ''): string function theme_path(string $path = ''): ?string
{ {
$theme = config('view.theme'); $theme = config('view.theme');
if (!$theme) { if (!$theme) {
return ''; return null;
} }
return base_path('themes/' . $theme .($path ? DIRECTORY_SEPARATOR.$path : $path)); return base_path('themes/' . $theme .($path ? DIRECTORY_SEPARATOR.$path : $path));