diff options
Diffstat (limited to 'app/Models/Themes.php')
| -rw-r--r-- | app/Models/Themes.php | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/app/Models/Themes.php b/app/Models/Themes.php new file mode 100644 index 000000000..c7099a1df --- /dev/null +++ b/app/Models/Themes.php @@ -0,0 +1,106 @@ +<?php + +class FreshRSS_Themes extends Minz_Model { + private static $themesUrl = '/themes/'; + private static $defaultIconsUrl = '/themes/icons/'; + public static $defaultTheme = 'Origine'; + + public static function getList() { + return array_values(array_diff( + scandir(PUBLIC_PATH . self::$themesUrl), + array('..', '.') + )); + } + + public static function get() { + $themes_list = self::getList(); + $list = array(); + foreach ($themes_list as $theme_dir) { + $theme = self::get_infos($theme_dir); + if ($theme) { + $list[$theme_dir] = $theme; + } + } + return $list; + } + + public static function get_infos($theme_id) { + $theme_dir = PUBLIC_PATH . self::$themesUrl . $theme_id ; + if (is_dir($theme_dir)) { + $json_filename = $theme_dir . '/metadata.json'; + if (file_exists($json_filename)) { + $content = file_get_contents($json_filename); + $res = json_decode($content, true); + if ($res && isset($res['files']) && is_array($res['files'])) { + $res['id'] = $theme_id; + return $res; + } + } + } + return false; + } + + private static $themeIconsUrl; + private static $themeIcons; + + public static function load($theme_id) { + $infos = self::get_infos($theme_id); + if (!$infos) { + if ($theme_id !== self::$defaultTheme) { //Fall-back to default theme + return self::load(self::$defaultTheme); + } + $themes_list = self::getList(); + if (!empty($themes_list)) { + if ($theme_id !== $themes_list[0]) { //Fall-back to first theme + return self::load($themes_list[0]); + } + } + return false; + } + self::$themeIconsUrl = self::$themesUrl . $theme_id . '/icons/'; + self::$themeIcons = is_dir(PUBLIC_PATH . self::$themeIconsUrl) ? array_fill_keys(array_diff( + scandir(PUBLIC_PATH . self::$themeIconsUrl), + array('..', '.') + ), 1) : array(); + return $infos; + } + + public static function icon($name, $urlOnly = false) { + static $alts = array( + 'add' => '✚', + 'all' => '☰', + 'bookmark' => '★', + 'category' => '☷', + 'category-white' => '☷', + 'close' => '❌', + 'configure' => '⚙', + 'down' => '▽', + 'favorite' => '★', + 'help' => 'ⓘ', + 'link' => '↗', + 'login' => '🔒', + 'logout' => '🔓', + 'next' => '⏩', + 'non-starred' => '☆', + 'prev' => '⏪', + 'read' => '☑', + 'unread' => '☐', + 'refresh' => '🔃', //↻ + 'search' => '🔍', + 'share' => '♺', + 'starred' => '★', + 'tag' => '⚐', + 'up' => '△', + ); + if (!isset($alts[$name])) { + return ''; + } + + $url = $name . '.svg'; + $url = isset(self::$themeIcons[$url]) ? (self::$themeIconsUrl . $url) : + (self::$defaultIconsUrl . $url); + + return $urlOnly ? Minz_Url::display($url) : + '<img class="icon" src="' . Minz_Url::display($url) . '" alt="' . $alts[$name] . '" />'; + } +} |
