diff options
| author | Greg Roach <fisharebest@gmail.com> | 2015-02-01 00:01:36 +0000 |
|---|---|---|
| committer | Greg Roach <fisharebest@gmail.com> | 2015-02-02 17:34:31 +0000 |
| commit | a25f0a04682c4c39c1947220c90af4118c713952 (patch) | |
| tree | f7e9c2c630a50dd3e5dd76ce501dff4b1d8d4c26 /app/Theme.php | |
| parent | 4d2a5476ceb1c11dc1fd146bfb0be077baa5fb01 (diff) | |
| download | webtrees-a25f0a04682c4c39c1947220c90af4118c713952.tar.gz webtrees-a25f0a04682c4c39c1947220c90af4118c713952.tar.bz2 webtrees-a25f0a04682c4c39c1947220c90af4118c713952.zip | |
Refactor classes to use namespaces, as per PSR-4. Replace GPL2 with GPL3.
Diffstat (limited to 'app/Theme.php')
| -rw-r--r-- | app/Theme.php | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/app/Theme.php b/app/Theme.php new file mode 100644 index 0000000000..bee3226e9f --- /dev/null +++ b/app/Theme.php @@ -0,0 +1,82 @@ +<?php +namespace Webtrees; + +/** + * webtrees: online genealogy + * Copyright (C) 2015 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/** + * Class Theme - provide access to the current theme. + */ +class Theme { + /** @var BaseTheme The current theme*/ + private static $theme; + + /** @var BaseTheme[] All currently installed themes */ + private static $installed_themes; + + /** + * Create a list of all themes available on the system, including + * any custom themes. + * + * @return BaseTheme[] + */ + public static function installedThemes() { + if (self::$installed_themes === null) { + self::$installed_themes = array(); + foreach (glob(WT_ROOT . '/themes/*/theme.php') as $theme_path) { + $theme = require $theme_path; + // Themes beginning with an underscore are reserved for special use. + if (substr_compare($theme->themeId(), '_', 0, 1) !== 0) { + self::$installed_themes[] = $theme; + } + } + } + + return self::$installed_themes; + } + + /** + * An associative array of theme names, for <select> fields, etc. + * + * @return string[] + */ + public static function themeNames() { + $theme_names = array(); + foreach (self::installedThemes() as $theme) { + $theme_names[$theme->themeId()] = $theme->themeName(); + } + + return $theme_names; + } + + /** + * The currently active theme + * + * @param BaseTheme|null $theme + * + * @return BaseTheme + * @throws \LogicException + */ + public static function theme(BaseTheme $theme = null) { + + if ($theme) { + self::$theme = $theme; + } elseif (!self::$theme) { + throw new \LogicException; + } + + return self::$theme; + } +} |
