Move admin/addons to src/Module
- Add Module\Admin\Addons\Index class - Add route for admin/addons - Add addons admin aside menu entry - Remove unused template admin/addons.tpl from base and frio - Remove addon list from mod/admin
This commit is contained in:
parent
a13bc14933
commit
9bbb438534
7 changed files with 104 additions and 97 deletions
|
@ -1762,56 +1762,6 @@ function admin_page_addons(App $a, array $addons_admin)
|
||||||
'$form_security_token' => BaseModule::getFormSecurityToken("admin_themes"),
|
'$form_security_token' => BaseModule::getFormSecurityToken("admin_themes"),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* List addons
|
|
||||||
*/
|
|
||||||
if (!empty($_GET['a']) && $_GET['a'] == "r") {
|
|
||||||
BaseModule::checkFormSecurityTokenRedirectOnError($a->getBaseURL() . '/admin/addons', 'admin_themes', 't');
|
|
||||||
Addon::reload();
|
|
||||||
info("Addons reloaded");
|
|
||||||
$a->internalRedirect('admin/addons');
|
|
||||||
}
|
|
||||||
|
|
||||||
$addons = [];
|
|
||||||
$files = glob("addon/*/");
|
|
||||||
if (is_array($files)) {
|
|
||||||
foreach ($files as $file) {
|
|
||||||
if (is_dir($file)) {
|
|
||||||
list($tmp, $id) = array_map("trim", explode("/", $file));
|
|
||||||
$info = Addon::getInfo($id);
|
|
||||||
$show_addon = true;
|
|
||||||
|
|
||||||
// If the addon is unsupported, then only show it, when it is enabled
|
|
||||||
if ((strtolower($info["status"]) == "unsupported") && !Addon::isEnabled($id)) {
|
|
||||||
$show_addon = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Override the above szenario, when the admin really wants to see outdated stuff
|
|
||||||
if (Config::get("system", "show_unsupported_addons")) {
|
|
||||||
$show_addon = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($show_addon) {
|
|
||||||
$addons[] = [$id, (Addon::isEnabled($id) ? "on" : "off"), $info];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$t = Renderer::getMarkupTemplate('admin/addons.tpl');
|
|
||||||
return Renderer::replaceMacros($t, [
|
|
||||||
'$title' => L10n::t('Administration'),
|
|
||||||
'$page' => L10n::t('Addons'),
|
|
||||||
'$submit' => L10n::t('Save Settings'),
|
|
||||||
'$reload' => L10n::t('Reload active addons'),
|
|
||||||
'$baseurl' => System::baseUrl(true),
|
|
||||||
'$function' => 'addons',
|
|
||||||
'$addons' => $addons,
|
|
||||||
'$pcount' => count($addons),
|
|
||||||
'$noplugshint' => L10n::t('There are currently no addons available on your node. You can find the official addon repository at %1$s and might find other interesting addons in the open addon registry at %2$s', 'https://github.com/friendica/friendica-addons', 'http://addons.friendi.ca'),
|
|
||||||
'$form_security_token' => BaseModule::getFormSecurityToken("admin_themes"),
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -120,6 +120,8 @@ class Router
|
||||||
|
|
||||||
$this->routeCollector->addGroup('/admin', function (RouteCollector $collector) {
|
$this->routeCollector->addGroup('/admin', function (RouteCollector $collector) {
|
||||||
$collector->addRoute(['GET'] , '[/]' , Module\Admin\Summary::class);
|
$collector->addRoute(['GET'] , '[/]' , Module\Admin\Summary::class);
|
||||||
|
|
||||||
|
$collector->addRoute(['GET', 'POST'], '/addons' , Module\Admin\Addons\Index::class);
|
||||||
$collector->addRoute(['GET'] , '/federation' , Module\Admin\Federation::class);
|
$collector->addRoute(['GET'] , '/federation' , Module\Admin\Federation::class);
|
||||||
|
|
||||||
$collector->addRoute(['GET', 'POST'], '/themes' , Module\Admin\Themes\Index::class);
|
$collector->addRoute(['GET', 'POST'], '/themes' , Module\Admin\Themes\Index::class);
|
||||||
|
|
|
@ -26,6 +26,29 @@ class Addon extends BaseObject
|
||||||
*/
|
*/
|
||||||
private static $addons = [];
|
private static $addons = [];
|
||||||
|
|
||||||
|
public static function getAvailableList()
|
||||||
|
{
|
||||||
|
$addons = [];
|
||||||
|
$files = glob('addon/*/');
|
||||||
|
if (is_array($files)) {
|
||||||
|
foreach ($files as $file) {
|
||||||
|
if (is_dir($file)) {
|
||||||
|
list($tmp, $addon) = array_map('trim', explode('/', $file));
|
||||||
|
$info = self::getInfo($addon);
|
||||||
|
|
||||||
|
if (Config::get('system', 'show_unsupported_addons')
|
||||||
|
|| strtolower($info['status']) != 'unsupported'
|
||||||
|
|| self::isEnabled($addon)
|
||||||
|
) {
|
||||||
|
$addons[] = [$addon, (self::isEnabled($addon) ? 'on' : 'off'), $info];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $addons;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Synchronize addons:
|
* @brief Synchronize addons:
|
||||||
*
|
*
|
||||||
|
@ -94,6 +117,8 @@ class Addon extends BaseObject
|
||||||
}
|
}
|
||||||
|
|
||||||
unset(self::$addons[array_search($addon, self::$addons)]);
|
unset(self::$addons[array_search($addon, self::$addons)]);
|
||||||
|
|
||||||
|
Addon::saveEnabledList();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -136,9 +161,11 @@ class Addon extends BaseObject
|
||||||
self::$addons[] = $addon;
|
self::$addons[] = $addon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Addon::saveEnabledList();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
Logger::error("Addon {addon}: {action} failed", ['action' => 'uninstall', 'addon' => $addon]);
|
Logger::error("Addon {addon}: {action} failed", ['action' => 'install', 'addon' => $addon]);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -283,11 +310,10 @@ class Addon extends BaseObject
|
||||||
* Saves the current enabled addon list in the system.addon config key
|
* Saves the current enabled addon list in the system.addon config key
|
||||||
*
|
*
|
||||||
* @return boolean
|
* @return boolean
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
|
||||||
*/
|
*/
|
||||||
public static function saveEnabledList()
|
public static function saveEnabledList()
|
||||||
{
|
{
|
||||||
return Config::set("system", "addon", implode(", ", self::$addons));
|
return Config::set('system', 'addon', implode(', ', self::$addons));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
72
src/Module/Admin/Addons/Index.php
Normal file
72
src/Module/Admin/Addons/Index.php
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Friendica\Module\Admin\Addons;
|
||||||
|
|
||||||
|
use Friendica\Content\Text\Markdown;
|
||||||
|
use Friendica\Core\Addon;
|
||||||
|
use Friendica\Core\Config;
|
||||||
|
use Friendica\Core\L10n;
|
||||||
|
use Friendica\Core\Renderer;
|
||||||
|
use Friendica\Core\System;
|
||||||
|
use Friendica\Database\DBA;
|
||||||
|
use Friendica\Module\BaseAdminModule;
|
||||||
|
|
||||||
|
class Index extends BaseAdminModule
|
||||||
|
{
|
||||||
|
public static function content()
|
||||||
|
{
|
||||||
|
parent::content();
|
||||||
|
|
||||||
|
$a = self::getApp();
|
||||||
|
|
||||||
|
// reload active themes
|
||||||
|
if (!empty($_GET['action'])) {
|
||||||
|
parent::checkFormSecurityTokenRedirectOnError('/admin/addons', 'admin_addons', 't');
|
||||||
|
|
||||||
|
switch ($_GET['action']) {
|
||||||
|
case 'reload':
|
||||||
|
Addon::reload();
|
||||||
|
info('Addons reloaded');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'toggle' :
|
||||||
|
$addon = defaults($_GET, 'addon', '');
|
||||||
|
if (Addon::isEnabled($addon)) {
|
||||||
|
Addon::uninstall($addon);
|
||||||
|
info(L10n::t('Addon %s disabled.', $addon));
|
||||||
|
} elseif (Addon::install($addon)) {
|
||||||
|
info(L10n::t('Addon %s enabled.', $addon));
|
||||||
|
} else {
|
||||||
|
info(L10n::t('Addon %s failed to install.', $addon));
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$a->internalRedirect('admin/addons');
|
||||||
|
}
|
||||||
|
|
||||||
|
$addons_admin = [];
|
||||||
|
$addonsAdminStmt = DBA::select('addon', ['name'], ['plugin_admin' => 1], ['order' => ['name']]);
|
||||||
|
foreach (DBA::toArray($addonsAdminStmt) as $addon) {
|
||||||
|
$addons_admin[] = $addon['name'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$addons = Addon::getAvailableList();
|
||||||
|
|
||||||
|
$t = Renderer::getMarkupTemplate('admin/addons/index.tpl');
|
||||||
|
return Renderer::replaceMacros($t, [
|
||||||
|
'$title' => L10n::t('Administration'),
|
||||||
|
'$page' => L10n::t('Addons'),
|
||||||
|
'$submit' => L10n::t('Save Settings'),
|
||||||
|
'$reload' => L10n::t('Reload active addons'),
|
||||||
|
'$baseurl' => System::baseUrl(true),
|
||||||
|
'$function' => 'addons',
|
||||||
|
'$addons' => $addons,
|
||||||
|
'$pcount' => count($addons),
|
||||||
|
'$noplugshint' => L10n::t('There are currently no addons available on your node. You can find the official addon repository at %1$s and might find other interesting addons in the open addon registry at %2$s', 'https://github.com/friendica/friendica-addons', 'http://addons.friendi.ca'),
|
||||||
|
'$form_security_token' => parent::getFormSecurityToken('admin_addons'),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -53,6 +53,7 @@ abstract class BaseAdminModule extends BaseModule
|
||||||
'federation' => ['admin/federation' , L10n::t('Federation Statistics') , 'federation']
|
'federation' => ['admin/federation' , L10n::t('Federation Statistics') , 'federation']
|
||||||
]],
|
]],
|
||||||
'configuration' => [L10n::t('Configuration'), [
|
'configuration' => [L10n::t('Configuration'), [
|
||||||
|
'addons' => ['admin/addons' , L10n::t('Addons') , 'addons'],
|
||||||
'themes' => ['admin/themes' , L10n::t('Themes') , 'themes'],
|
'themes' => ['admin/themes' , L10n::t('Themes') , 'themes'],
|
||||||
'tos' => ['admin/tos' , L10n::t('Terms of Service') , 'tos'],
|
'tos' => ['admin/tos' , L10n::t('Terms of Service') , 'tos'],
|
||||||
]],
|
]],
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
|
|
||||||
<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}}?a=r&t={{$form_security_token}}">{{$reload}}</a>
|
|
||||||
<ul id='addonslist'>
|
|
||||||
{{foreach $addons as $p}}
|
|
||||||
<li class='addon {{$p.1}}'>
|
|
||||||
<a class='toggleaddon' href='{{$baseurl}}/admin/{{$function}}/{{$p.0}}?a=t&t={{$form_security_token}}' 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>
|
|
|
@ -1,22 +0,0 @@
|
||||||
|
|
||||||
<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}}?a=r&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}}/{{$p.0}}?a=t&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>
|
|
Loading…
Reference in a new issue