fetchAll(\PDO::FETCH_NUM); \Cache::set("themes", $themes); } foreach ($themes as $theme) { // Restore them $config = $_config; $board = $_board; // Reload the locale if ($config['locale'] != $current_locale) { $current_locale = $config['locale']; init_locale($config['locale']); } if (PHP_SAPI === 'cli') { echo "Rebuilding theme ".$theme['theme']."... "; } rebuildTheme($theme['theme'], $action, $boardname); if (PHP_SAPI === 'cli') { echo "done\n"; } } // Restore them again $config = $_config; $board = $_board; // Reload the locale if ($config['locale'] != $current_locale) { $current_locale = $config['locale']; init_locale($config['locale']); } } function loadThemeConfig($_theme) { global $config; if (!file_exists($config['dir']['themes'] . '/' . $_theme . '/info.php')) { return false; } // Load theme information into $theme include $config['dir']['themes'] . '/' . $_theme . '/info.php'; return $theme; } function rebuildTheme($theme, string $action, $board = false) { global $config, $_theme; $_theme = $theme; $theme = loadThemeConfig($_theme); if (file_exists($config['dir']['themes'] . '/' . $_theme . '/theme.php')) { require_once $config['dir']['themes'] . '/' . $_theme . '/theme.php'; $theme['build_function']($action, themeSettings($_theme), $board); } } function themeSettings($theme): array { if ($settings = \Cache::get("theme_settings_" . $theme)) { return $settings; } $query = prepare("SELECT `name`, `value` FROM ``theme_settings`` WHERE `theme` = :theme AND `name` IS NOT NULL"); $query->bindValue(':theme', $theme); $query->execute() or error(db_error($query)); $settings = []; while ($s = $query->fetch(\PDO::FETCH_ASSOC)) { $settings[$s['name']] = $s['value']; } \Cache::set("theme_settings_".$theme, $settings); return $settings; }