Move admin/themes to src/Module

- Add Module\Admin\Themes\Index class
- Add route for admin/themes
- Add themes admin aside menu entry
- Add admin/addons/index.tpl template
- Remove theme list from mod/admin
This commit is contained in:
Hypolite Petovan 2019-04-15 01:11:46 -04:00
parent 9227aab837
commit a13bc14933
5 changed files with 136 additions and 38 deletions

View File

@ -2017,44 +2017,6 @@ function admin_page_themes(App $a)
'$form_security_token' => BaseModule::getFormSecurityToken("admin_themes"),
]);
}
// reload active themes
if (!empty($_GET['a']) && $_GET['a'] == "r") {
BaseModule::checkFormSecurityTokenRedirectOnError(System::baseUrl() . '/admin/themes', 'admin_themes', 't');
foreach ($themes as $th) {
if ($th['allowed']) {
Theme::uninstall($th['name']);
Theme::install($th['name']);
}
}
info("Themes reloaded");
$a->internalRedirect('admin/themes');
}
/*
* List themes
*/
$addons = [];
foreach ($themes as $th) {
$addons[] = [$th['name'], (($th['allowed']) ? "on" : "off"), Theme::getInfo($th['name'])];
}
$t = Renderer::getMarkupTemplate('admin/addons.tpl');
return Renderer::replaceMacros($t, [
'$title' => L10n::t('Administration'),
'$page' => L10n::t('Themes'),
'$submit' => L10n::t('Save Settings'),
'$reload' => L10n::t('Reload active themes'),
'$baseurl' => System::baseUrl(true),
'$function' => 'themes',
'$addons' => $addons,
'$pcount' => count($themes),
'$noplugshint' => L10n::t('No themes found on the system. They should be placed in %1$s', '<code>/view/themes</code>'),
'$experimental' => L10n::t('[Experimental]'),
'$unsupported' => L10n::t('[Unsupported]'),
'$form_security_token' => BaseModule::getFormSecurityToken("admin_themes"),
]);
}
/**

View File

@ -122,6 +122,8 @@ class Router
$collector->addRoute(['GET'] , '[/]' , Module\Admin\Summary::class);
$collector->addRoute(['GET'] , '/federation' , Module\Admin\Federation::class);
$collector->addRoute(['GET', 'POST'], '/themes' , Module\Admin\Themes\Index::class);
$collector->addRoute(['GET', 'POST'], '/tos' , Module\Admin\Tos::class);
});
}

View File

@ -0,0 +1,109 @@
<?php
namespace Friendica\Module\Admin\Themes;
use Friendica\Content\Text\Markdown;
use Friendica\Core\Config;
use Friendica\Core\L10n;
use Friendica\Core\Renderer;
use Friendica\Core\System;
use Friendica\Core\Theme;
use Friendica\Module\BaseAdminModule;
use Friendica\Util\Strings;
class Index extends BaseAdminModule
{
public static function content()
{
parent::content();
$a = self::getApp();
$allowed_themes = Theme::getAllowedList();
// reload active themes
if (!empty($_GET['action'])) {
parent::checkFormSecurityTokenRedirectOnError(System::baseUrl() . '/admin/themes', 'admin_themes', 't');
switch ($_GET['action']) {
case 'reload':
foreach ($allowed_themes as $theme) {
Theme::uninstall($theme['name']);
Theme::install($theme['name']);
}
info('Themes reloaded');
break;
case 'toggle' :
$theme = defaults($_GET, 'addon', '');
if ($theme) {
$theme = Strings::sanitizeFilePathItem($theme);
if (!is_dir("view/theme/$theme")) {
notice(L10n::t('Item not found.'));
return '';
}
if (in_array($theme, Theme::getAllowedList())) {
Theme::uninstall($theme);
info(L10n::t('Theme %s disabled.', $theme));
} elseif (Theme::install($theme)) {
info(L10n::t('Theme %s successfully enabled.', $theme));
} else {
info(L10n::t('Theme %s failed to install.', $theme));
}
}
break;
}
$a->internalRedirect('admin/themes');
}
$themes = [];
$files = glob('view/theme/*');
if (is_array($files)) {
foreach ($files as $file) {
$theme = basename($file);
// Is there a style file?
$theme_files = glob('view/theme/' . $theme . '/style.*');
// If not then quit
if (count($theme_files) == 0) {
continue;
}
$is_experimental = intval(file_exists($file . '/experimental'));
$is_supported = 1 - (intval(file_exists($file . '/unsupported')));
$is_allowed = intval(in_array($theme, $allowed_themes));
if ($is_allowed || $is_supported || Config::get('system', 'show_unsupported_themes')) {
$themes[] = ['name' => $theme, 'experimental' => $is_experimental, 'supported' => $is_supported, 'allowed' => $is_allowed];
}
}
}
$addons = [];
foreach ($themes as $theme) {
$addons[] = [$theme['name'], (($theme['allowed']) ? 'on' : 'off'), Theme::getInfo($theme['name'])];
}
$t = Renderer::getMarkupTemplate('admin/addons/index.tpl');
return Renderer::replaceMacros($t, [
'$title' => L10n::t('Administration'),
'$page' => L10n::t('Themes'),
'$submit' => L10n::t('Save Settings'),
'$reload' => L10n::t('Reload active themes'),
'$baseurl' => System::baseUrl(true),
'$function' => 'themes',
'$addons' => $addons,
'$pcount' => count($themes),
'$noplugshint' => L10n::t('No themes found on the system. They should be placed in %1$s', '<code>/view/themes</code>'),
'$experimental' => L10n::t('[Experimental]'),
'$unsupported' => L10n::t('[Unsupported]'),
'$form_security_token' => parent::getFormSecurityToken('admin_themes'),
]);
}
}

View File

@ -53,6 +53,7 @@ abstract class BaseAdminModule extends BaseModule
'federation' => ['admin/federation' , L10n::t('Federation Statistics') , 'federation']
]],
'configuration' => [L10n::t('Configuration'), [
'themes' => ['admin/themes' , L10n::t('Themes') , 'themes'],
'tos' => ['admin/tos' , L10n::t('Terms of Service') , 'tos'],
]],
];

View File

@ -0,0 +1,24 @@
<div id="adminpage">
<h1>{{$title}} - {{$page}}</h1>
{{if $pcount eq 0}}
<div class="error-message">
{{$noplugshint}}
</div>
{{else}}
<a class="btn" href="{{$baseurl}}/admin/{{$function}}?action=reload&amp;t={{$form_security_token}}">{{$reload}}</a>
<ul id="addonslist">
{{foreach $addons as $p}}
<li class="addon {{$p.1}}">
<span class="offset-anchor" id="{{$p.0}}"></span>
<a class="toggleaddon" href="{{$baseurl}}/admin/{{$function}}?action=toggle&amp;addon={{$p.0}}&amp;t={{$form_security_token}}#{{$p.0}}" title="{{if $p.1==on}}Disable{{else}}Enable{{/if}}">
<span class="icon {{$p.1}}"></span>
</a>
<a href="{{$baseurl}}/admin/{{$function}}/{{$p.0}}"><span class="name">{{$p.2.name}}</span></a> - <span class="version">{{$p.2.version}}</span>
{{if $p.2.experimental}} {{$experimental}} {{/if}}{{if $p.2.unsupported}} {{$unsupported}} {{/if}}
<div class="desc">{{$p.2.description nofilter}}</div>
</li>
{{/foreach}}
</ul>
{{/if}}
</div>