Use addons config entries instead of the addon table

This commit is contained in:
Philipp 2023-01-03 20:24:48 +01:00
parent cd11088cc4
commit 13b234d279
No known key found for this signature in database
GPG key ID: 24A7501396EB5432
7 changed files with 294 additions and 39 deletions

View file

@ -21,7 +21,6 @@
namespace Friendica\Core;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Util\Strings;
@ -85,15 +84,18 @@ class Addon
public static function getAdminList()
{
$addons_admin = [];
$addonsAdminStmt = DBA::select('addon', ['name'], ['plugin_admin' => 1], ['order' => ['name']]);
while ($addon = DBA::fetch($addonsAdminStmt)) {
$addons_admin[$addon['name']] = [
'url' => 'admin/addons/' . $addon['name'],
'name' => $addon['name'],
$addons = DI::config()->get('addons');
foreach ($addons as $name => $data) {
if (empty($data['admin'])) {
continue;
}
$addons_admin[$name] = [
'url' => 'admin/addons/' . $name,
'name' => $name,
'class' => 'addon'
];
}
DBA::close($addonsAdminStmt);
return $addons_admin;
}
@ -113,8 +115,7 @@ class Addon
*/
public static function loadAddons()
{
$installed_addons = DBA::selectToArray('addon', ['name'], ['installed' => true]);
self::$addons = array_column($installed_addons, 'name');
self::$addons = array_keys(DI::config()->get('addons') ?? []);
}
/**
@ -129,7 +130,7 @@ class Addon
$addon = Strings::sanitizeFilePathItem($addon);
Logger::debug("Addon {addon}: {action}", ['action' => 'uninstall', 'addon' => $addon]);
DBA::delete('addon', ['name' => $addon]);
DI::config()->delete('addons', $addon);
@include_once('addon/' . $addon . '/' . $addon . '.php');
if (function_exists($addon . '_uninstall')) {
@ -168,12 +169,9 @@ class Addon
$func(DI::app());
}
DBA::insert('addon', [
'name' => $addon,
'installed' => true,
'timestamp' => $t,
'plugin_admin' => function_exists($addon . '_addon_admin'),
'hidden' => file_exists('addon/' . $addon . '/.hidden')
DI::config()->set('addons', $addon,[
'last_update' => $t,
'admin' => function_exists($addon . '_addon_admin'),
]);
if (!self::isEnabled($addon)) {
@ -190,20 +188,20 @@ class Addon
*/
public static function reload()
{
$addons = DBA::selectToArray('addon', [], ['installed' => true]);
$addons = DI::config()->get('addons');
foreach ($addons as $addon) {
$addonname = Strings::sanitizeFilePathItem(trim($addon['name']));
foreach ($addons as $name => $data) {
$addonname = Strings::sanitizeFilePathItem(trim($name));
$addon_file_path = 'addon/' . $addonname . '/' . $addonname . '.php';
if (file_exists($addon_file_path) && $addon['timestamp'] == filemtime($addon_file_path)) {
if (file_exists($addon_file_path) && $data['last_update'] == filemtime($addon_file_path)) {
// Addon unmodified, skipping
continue;
}
Logger::debug("Addon {addon}: {action}", ['action' => 'reload', 'addon' => $addon['name']]);
Logger::debug("Addon {addon}: {action}", ['action' => 'reload', 'addon' => $name]);
self::uninstall($addon['name']);
self::install($addon['name']);
self::uninstall($name);
self::install($name);
}
}
@ -313,11 +311,9 @@ class Addon
public static function getVisibleList(): array
{
$visible_addons = [];
$stmt = DBA::select('addon', ['name'], ['hidden' => false, 'installed' => true]);
if (DBA::isResult($stmt)) {
foreach (DBA::toArray($stmt) as $addon) {
$visible_addons[] = $addon['name'];
}
$addons = DI::config()->get('addons');
foreach ($addons as $name => $data) {
$visible_addons[] = $name;
}
return $visible_addons;