You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

199 lines
9.7 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
if (basename($_SERVER['SCRIPT_NAME']) === basename(__FILE__)) {
die('This script may only be included.');
}
//Initialize variables for the actual theme and theme option to be displayed
$theme_active = $prefs['theme'];
$theme_option_active = $prefs['theme_option'] ?? '';
// User theme previously set up in lib/setup/user_prefs.php
//consider Group theme
if ($prefs['useGroupTheme'] == 'y') {
$userlib = TikiLib::lib('user');
$users_group_groupTheme = $userlib->get_user_group_theme();
if (! empty($users_group_groupTheme)) {
//group theme and option is stored in one column (groupTheme) in the users_groups table, so the theme and option value needs to be separated first
list($group_theme, $group_theme_option) = $themelib->extract_theme_and_option($users_group_groupTheme); //for more info see list_themes_and_options() function in themelib
//set active theme
$theme_active = $group_theme;
$theme_option_active = $group_theme_option;
//set group_theme smarty variable so that it can be used elsewhere
$smarty->assign_by_ref('group_theme', $users_group_groupTheme);
}
}
//consider Admin Theme
if (! empty($prefs['theme_admin']) && ($section === 'admin' || empty($section))) { // use admin theme if set
$theme_active = $prefs['theme_admin'];
$theme_option_active = $prefs['theme_option_admin']; // and its option
}
if ($prefs['theme_unified_admin_backend'] === 'y' && strpos($_SERVER['PHP_SELF'], 'tiki-admin.php') !== false) {
$smarty->assign('navbar_color_variant', $prefs['theme_navbar_color_variant_admin']);
} else {
$smarty->assign('navbar_color_variant', $prefs['theme_navbar_color_variant']);
}
//consider CSS Editor (tiki-edit_css.php)
if (! empty($_SESSION['try_theme'])) {
list($theme_active, $theme_option_active) = $themelib->extract_theme_and_option($_SESSION['try_theme']);
}
//START loading theme related items
//This bundle Loads bootstrap JS and popper JS
$headerlib->add_jsfile('vendor_bundled/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js');
if ($prefs['feature_fixed_width'] === 'y') {
$headerlib->add_css(
'@media (min-width: 1200px) { .container { max-width:' .
(! empty($prefs['layout_fixed_width']) ? $prefs['layout_fixed_width'] : '1170px') .
'; } }'
);
}
//2) Always add tiki_base.css. Add it first, so that it can be overriden in the custom themes
$headerlib->add_cssfile("themes/base_files/css/tiki_base.css");
//3) Always add bundled font-awesome css for the default icon fonts
$headerlib->add_cssfile('vendor_bundled/vendor/bower-asset/fontawesome/css/all.css');
// 3a) Optionally add bundled Bootstrap-icons CSS for the optional Bootstrap icons
if ($prefs['theme_iconset'] === 'bootstrap_icon_font') {
$headerlib->add_cssfile('vendor_bundled/vendor/twbs/bootstrap-icons/font/bootstrap-icons.css');
}
//4) Add Addon custom css first, so it can be overridden by themes
foreach (\Tiki\Package\ExtensionManager::getEnabledPackageExtensions() as $package) {
$finder = new \Symfony\Component\Finder\Finder();
foreach ($finder->in($package['path'])->path('/^css/')->name('*.css') as $file) {
$cssFile = $package['path'] . '/' . $file->getRelativePathname();
$headerlib->add_cssfile($cssFile);
}
}
//5) Now add the theme or theme option
$themelib = TikiLib::lib('theme');
if (! empty($prefs['header_custom_scss'])) {
// TODO call compile_custom_scss() here
} elseif ($theme_active == 'custom_url' && ! empty($prefs['theme_custom_url'])) { //custom URL, use only if file exists at the custom location
$custom_theme = $prefs['theme_custom_url'];
if (preg_match('/^(http(s)?:)?\/\//', $custom_theme)) { // Use external link if url begins with http://, https://, or // (auto http/https)
$headerlib->add_cssfile($custom_theme, 'external');
} else {
$headerlib->add_cssfile($custom_theme);
}
} else {
//first load the main theme css
$theme_css = $themelib->get_theme_css($theme_active);
if ($theme_css) {
// exclude the main theme css if the option's css also includes it (pref is set)
if ($prefs['theme_option_includes_main'] != 'y' || empty($theme_option_active)) {
$headerlib->add_cssfile($theme_css);
}
//than load the theme option css file if needed
if (! empty($theme_option_active)) {
$option_css = $themelib->get_theme_css($theme_active, $theme_option_active);
$headerlib->add_cssfile($option_css);
}
} else {
trigger_error("The requested theme's CSS file could not be read. Falling back to default theme.", E_USER_WARNING);
$theme_active = 'default';
$theme_option_active = '';
$theme_css = $themelib->get_theme_css($theme_active);
$headerlib->add_cssfile($theme_css);
}
}
//6) Allow to have a IE specific CSS files for the theme's specific hacks (IE 8 and 9 support dropped in Bootstrap 4)
// $style_ie8_css = $themelib->get_theme_path($theme_active, $theme_option_active, 'ie8.css');
// $style_ie9_css = $themelib->get_theme_path($theme_active, $theme_option_active, 'ie9.css');
//7) include optional custom.css if there. In case of theme option, first include main theme's custom.css, than the option's custom.css
if (! empty($theme_option_active)) {
$main_theme_path = $themelib->get_theme_path($theme_active);
$main_theme_custom_css = "{$main_theme_path}css/custom.css";
if (is_readable($main_theme_custom_css)) {
$headerlib->add_cssfile($main_theme_custom_css, 53);
}
}
$custom_css = $themelib->get_theme_path($theme_active, $theme_option_active, 'custom.css');
if (empty($custom_css)) {
$custom_css = $themelib->get_theme_path('', '', 'custom.css');
}
if (is_readable($custom_css)) {
$headerlib->add_cssfile($custom_css, 53);
}
if (! isset($prefs['site_favicon_enable']) || $prefs['site_favicon_enable'] === 'y') { // if favicons are disabled in preferences, skip the lot of it.
$favicon_path = $themelib->get_theme_path($prefs['theme'], $prefs['theme_option'], 'favicon-16x16.png', 'favicons/');
if ($favicon_path) { // if there is a 16x16 png favicon in the theme folder, then find and display others if they exist
$headerlib->add_link('icon', $favicon_path, '16x16', 'image/png');
$favicon_path = (dirname($favicon_path)); // get_theme_path makes a lot of system calls, so just remember what dir to look in.
if (is_file($favicon_path . '/apple-touch-icon.png')) {
$headerlib->add_link('apple-touch-icon', $favicon_path . '/apple-touch-icon.png', '180x180');
}
if (is_file($favicon_path . '/favicon-32x32.png')) {
$headerlib->add_link('icon', $favicon_path . '/favicon-32x32.png', '32x32', 'image/png');
}
if (is_file($favicon_path . '/site.webmanifest')) {
$headerlib->add_link('manifest', $favicon_path . '/site.webmanifest');
// The file name changed, so check for the old file if the new does not exist
} elseif (is_file($favicon_path . '/manifest.json')) {
$headerlib->add_link('manifest', $favicon_path . '/manifest.json');
}
if (is_file($favicon_path . '/favicon.ico')) {
$headerlib->add_link('shortcut icon', $favicon_path . '/favicon.ico');
}
if (is_file($favicon_path . '/safari-pinned-tab.svg')) {
$headerlib->add_link('mask-icon', $favicon_path . '/safari-pinned-tab.svg', '', '', '#5bbad5');
}
if (is_file($favicon_path . '/browserconfig.xml')) {
$headerlib->add_meta('msapplication-config', $favicon_path . '/browserconfig.xml');
}
} else { // if no 16x16 png favicon exists, display Tiki icons
$headerlib->add_link('icon', 'themes/base_files/favicons/favicon-16x16.png', '16x16', 'image/png');
$headerlib->add_link('apple-touch-icon', 'themes/base_files/favicons/apple-touch-icon.png', '180x180');
$headerlib->add_link('icon', 'themes/base_files/favicons/favicon-32x32.png', '32x32', 'image/png');
$headerlib->add_link('manifest', 'themes/base_files/favicons/site.webmanifest');
$headerlib->add_link('shortcut icon', 'themes/base_files/favicons/favicon.ico');
$headerlib->add_link('mask-icon', 'themes/base_files/favicons/safari-pinned-tab.svg', '', '', '#5bbad5');
$headerlib->add_meta('msapplication-config', 'themes/base_files/favicons/browserconfig.xml');
}
unset($favicon_path); // no longer needed, so bye bye
}
//8) produce $iconset to be used for generating icons
$iconset = TikiLib::lib('iconset')->getIconsetForTheme($theme_active, $theme_option_active);
// and add js support file
$headerlib->add_js('jqueryTiki.iconset = ' . json_encode($iconset->getJS()));
$headerlib->add_jsfile('lib/jquery_tiki/iconsets.js');
//9) set global variable and prefs so that they can be accessed elsewhere
$prefs['theme'] = $theme_active;
$prefs['theme_option'] = $theme_option_active;
//10) load additional language overrides that might be located in theme folder
/** @var Language $langLib */
$langLib = TikiLib::lib('language');
$langLib->loadThemeOverrides($prefs['language'], $theme_active);
//Note: if Theme Control is active, than tiki-tc.php can modify the active theme
// Web Monetization
if ($prefs['webmonetization_all_website'] === 'y' && ! empty($prefs['webmonetization_default_payment_pointer'])) {
$headerlib->add_meta('monetization', $prefs['webmonetization_default_payment_pointer']);
}
//finish
$smarty->initializePaths();