Introduce new hook `ThemeLoader`
This commit is contained in:
parent
0b9eecbabc
commit
2a80e8bca6
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
/* Icinga Web 2 | (c) 2022 Icinga GmbH | GPLv2+ */
|
||||||
|
|
||||||
|
namespace Icinga\Application\Hook;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provide an implementation of this hook to dynamically provide themes.
|
||||||
|
* Note that only the first registered hook is utilized. Also note that
|
||||||
|
* for ordinary themes this hook is not required. Place such in your
|
||||||
|
* module's theme path: <module-path>/public/css/themes
|
||||||
|
*/
|
||||||
|
abstract class ThemeLoaderHook
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the path for the given theme
|
||||||
|
*
|
||||||
|
* @param ?string $theme
|
||||||
|
*
|
||||||
|
* @return ?string The path or NULL if the theme is unknown
|
||||||
|
*/
|
||||||
|
abstract public function getThemeFile(?string $theme): ?string;
|
||||||
|
}
|
|
@ -290,6 +290,19 @@ class StyleSheet
|
||||||
$app = Icinga::app();
|
$app = Icinga::app();
|
||||||
|
|
||||||
if ($theme && $theme !== self::DEFAULT_THEME) {
|
if ($theme && $theme !== self::DEFAULT_THEME) {
|
||||||
|
if (Hook::has('ThemeLoader')) {
|
||||||
|
try {
|
||||||
|
$path = Hook::first('ThemeLoader')->getThemeFile($theme);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
Logger::error('Failed to call ThemeLoader hook: %s', $e);
|
||||||
|
$path = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($path !== null) {
|
||||||
|
return $path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (($pos = strpos($theme, '/')) !== false) {
|
if (($pos = strpos($theme, '/')) !== false) {
|
||||||
$moduleName = substr($theme, 0, $pos);
|
$moduleName = substr($theme, 0, $pos);
|
||||||
$theme = substr($theme, $pos + 1);
|
$theme = substr($theme, $pos + 1);
|
||||||
|
|
Loading…
Reference in New Issue