44
55use BookStack \Theming \ThemeEvents ;
66use BookStack \Theming \ThemeService ;
7+ use BookStack \Theming \ThemeViews ;
8+ use Illuminate \Support \Facades \Blade ;
79use Illuminate \Support \ServiceProvider ;
810
911class ThemeServiceProvider extends ServiceProvider
@@ -24,7 +26,26 @@ public function boot(): void
2426 {
2527 // Boot up the theme system
2628 $ themeService = $ this ->app ->make (ThemeService::class);
29+ $ viewFactory = $ this ->app ->make ('view ' );
30+ $ themeViews = new ThemeViews ($ viewFactory ->getFinder ());
31+
32+ // Use a custom include so that we can insert theme views before/after includes.
33+ // This is done, even if no theme is active, so that view caching does not create problems
34+ // when switching between themes or when switching a theme on/off.
35+ $ viewFactory ->share ('__themeViews ' , $ themeViews );
36+ Blade::directive ('include ' , function ($ expression ) {
37+ return "<?php echo \$__themeViews->handleViewInclude( {$ expression }, array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1])); ?> " ;
38+ });
39+
40+ if (!$ themeService ->getTheme ()) {
41+ return ;
42+ }
43+
44+ $ themeService ->loadModules ();
2745 $ themeService ->readThemeActions ();
2846 $ themeService ->dispatch (ThemeEvents::APP_BOOT , $ this ->app );
47+
48+ $ themeViews ->registerViewPathsForTheme ($ themeService ->getModules ());
49+ $ themeService ->dispatch (ThemeEvents::THEME_REGISTER_VIEWS , $ themeViews );
2950 }
3051}
0 commit comments