mirror of
https://github.com/FreshRSS/FreshRSS.git
synced 2026-01-21 19:58:03 -05:00
* [ci] Add Travis * Exclude some libs * Semi-auto whitespace fixes * line length in SQLite * Exclude tests from line length * Feed.php line length * Feed.php: get rid of unnecessary concat * Feed.php: line length * bootstrap.php: no newline at end of file * Allow concatenating across multiple lines * Add Travis badge * do-install line length * update-or-create-user line length * cli/create-user line length * tests/app/Models/SearchTest.php fix indentation * tests/app/Models/UserQueryTest.php fix indentation * tests/app/Models/CategoryTest.php fix indentation * [fix] PHP 5.3 on precise * cli/do-install no spaces * cli/list-users line length * cli/reconfigure line length * empty catch statements * api/index line length nonsense * spaces before semicolon * app/Models/EntryDAO bunch of indentation * extra blank lines * spaces before comma in function call * testing tabwidth * increase to 10 * comment out tabwidth line * try older phpcs version 3.0.0RC4 * line length exception for app/install.php * proper spaces * stray spaces in i18n * Minz/ModelPdo line length * Minz whitespace * greader line length * greader elseif placement * app/Models/Feed.php spacing in function argument * ignore php 5.3 * app/Models/ConfigurationSetter.php stray whitespace * EntryDAOSQLite line length * I vote for higher max line length =P * ignore SQL * remove classname complaint * line length/more legible SQL * ignore line length nonsense * greader line length * feedController issues * uppercase TRUE, FALSE, NULL * revert * importExportController lowercase null * Share.php default value not necessary because ! is_array () a few lines down * CategoryDAO constants should be UPPERCASE * EntryDAO reduce line length * contentious autofix * Allow failures on all versions of PHP except 7.1 because reasons
117 lines
2.9 KiB
PHP
117 lines
2.9 KiB
PHP
<?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 &&
|
|
!empty($res['name']) &&
|
|
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' => '★',
|
|
'bookmark-add' => '✚',
|
|
'category' => '☷',
|
|
'category-white' => '☷',
|
|
'close' => '❌',
|
|
'configure' => '⚙',
|
|
'down' => '▽',
|
|
'favorite' => '★',
|
|
'help' => 'ⓘ',
|
|
'icon' => '⊚',
|
|
'import' => '⤓',
|
|
'key' => '⚿',
|
|
'link' => '↗',
|
|
'login' => '🔒',
|
|
'logout' => '🔓',
|
|
'next' => '⏩',
|
|
'non-starred' => '☆',
|
|
'prev' => '⏪',
|
|
'read' => '☑',
|
|
'rss' => '☄',
|
|
'unread' => '☐',
|
|
'refresh' => '🔃', //↻
|
|
'search' => '🔍',
|
|
'share' => '♺',
|
|
'starred' => '★',
|
|
'stats' => '%',
|
|
'tag' => '⚐',
|
|
'up' => '△',
|
|
'view-normal' => '☰',
|
|
'view-global' => '☷',
|
|
'view-reader' => '☕',
|
|
);
|
|
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] . '" />';
|
|
}
|
|
}
|