summaryrefslogtreecommitdiff
path: root/app/Theme.php
diff options
context:
space:
mode:
authorGreg Roach <fisharebest@gmail.com>2015-02-01 00:01:36 +0000
committerGreg Roach <fisharebest@gmail.com>2015-02-02 17:34:31 +0000
commita25f0a04682c4c39c1947220c90af4118c713952 (patch)
treef7e9c2c630a50dd3e5dd76ce501dff4b1d8d4c26 /app/Theme.php
parent4d2a5476ceb1c11dc1fd146bfb0be077baa5fb01 (diff)
downloadwebtrees-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.php82
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;
+ }
+}