diff --git a/src/Core/Addon.php b/src/Core/Addon.php index be4e94152f..dd229be287 100644 --- a/src/Core/Addon.php +++ b/src/Core/Addon.php @@ -112,37 +112,8 @@ class Addon */ public static function loadAddons() { - $installed_addons = []; - - $r = DBA::select('addon', [], ['installed' => 1]); - if (DBA::isResult($r)) { - $installed_addons = DBA::toArray($r); - } - - $addons = DI::config()->get('system', 'addon'); - $addons_arr = []; - - if ($addons) { - $addons_arr = explode(',', str_replace(' ', '', $addons)); - } - - self::$addons = $addons_arr; - - $installed_arr = []; - - foreach ($installed_addons as $addon) { - if (!self::isEnabled($addon['name'])) { - self::uninstall($addon['name']); - } else { - $installed_arr[] = $addon['name']; - } - } - - foreach (self::$addons as $p) { - if (!in_array($p, $installed_arr)) { - self::install($p); - } - } + $installed_addons = DBA::selectToArray('addon', ['name'], ['installed' => true]); + self::$addons = array_column($installed_addons, 'name'); } /** @@ -168,8 +139,6 @@ class Addon DBA::delete('hook', ['file' => 'addon/' . $addon . '/' . $addon . '.php']); unset(self::$addons[array_search($addon, self::$addons)]); - - Addon::saveEnabledList(); } /** @@ -212,8 +181,6 @@ class Addon self::$addons[] = $addon; } - Addon::saveEnabledList(); - return true; } else { Logger::error("Addon {addon}: {action} failed", ['action' => 'install', 'addon' => $addon]); @@ -226,41 +193,28 @@ class Addon */ public static function reload() { - $addons = DI::config()->get('system', 'addon'); - if (strlen($addons)) { - $r = DBA::select('addon', [], ['installed' => 1]); - if (DBA::isResult($r)) { - $installed = DBA::toArray($r); - } else { - $installed = []; + $addons = DBA::selectToArray('addon', [], ['installed' => true]); + + foreach ($addons as $addon) { + $addonname = Strings::sanitizeFilePathItem(trim($addon['name'])); + $fname = 'addon/' . $addonname . '/' . $addonname . '.php'; + $t = @filemtime($fname); + if (!file_exists($fname) || ($addon['timestamp'] == $t)) { + continue; } - $addon_list = explode(',', $addons); + Logger::notice("Addon {addon}: {action}", ['action' => 'reload', 'addon' => $addon['name']]); + @include_once($fname); - foreach ($addon_list as $addon) { - $addon = Strings::sanitizeFilePathItem(trim($addon)); - $fname = 'addon/' . $addon . '/' . $addon . '.php'; - if (file_exists($fname)) { - $t = @filemtime($fname); - foreach ($installed as $i) { - if (($i['name'] == $addon) && ($i['timestamp'] != $t)) { - - Logger::notice("Addon {addon}: {action}", ['action' => 'reload', 'addon' => $i['name']]); - @include_once($fname); - - if (function_exists($addon . '_uninstall')) { - $func = $addon . '_uninstall'; - $func(DI::app()); - } - if (function_exists($addon . '_install')) { - $func = $addon . '_install'; - $func(DI::app()); - } - DBA::update('addon', ['timestamp' => $t], ['id' => $i['id']]); - } - } - } + if (function_exists($addonname . '_uninstall')) { + $func = $addonname . '_uninstall'; + $func(DI::app()); } + if (function_exists($addonname . '_install')) { + $func = $addonname . '_install'; + $func(DI::app()); + } + DBA::update('addon', ['timestamp' => $t], ['id' => $addon['id']]); } } @@ -357,16 +311,6 @@ class Addon return self::$addons; } - /** - * Saves the current enabled addon list in the system.addon config key - * - * @return boolean - */ - public static function saveEnabledList() - { - return DI::config()->set('system', 'addon', implode(',', self::$addons)); - } - /** * Returns the list of non-hidden enabled addon names * diff --git a/src/Model/Nodeinfo.php b/src/Model/Nodeinfo.php index d396415531..d2e168fa59 100644 --- a/src/Model/Nodeinfo.php +++ b/src/Model/Nodeinfo.php @@ -43,20 +43,7 @@ class Nodeinfo // If the addon 'statistics_json' is enabled then disable it and activate nodeinfo. if (Addon::isEnabled('statistics_json')) { $config->set('system', 'nodeinfo', true); - - $addon = 'statistics_json'; - $addons = $config->get('system', 'addon'); - - if ($addons) { - $addons_arr = explode(',', str_replace(' ', '', $addons)); - - $idx = array_search($addon, $addons_arr); - if ($idx !== false) { - unset($addons_arr[$idx]); - Addon::uninstall($addon); - $config->set('system', 'addon', implode(', ', $addons_arr)); - } - } + Addon::uninstall('statistics_json'); } if (empty($config->get('system', 'nodeinfo'))) { diff --git a/src/Module/Admin/Addons/Details.php b/src/Module/Admin/Addons/Details.php index dba2f061ce..8e0e14f22b 100644 --- a/src/Module/Admin/Addons/Details.php +++ b/src/Module/Admin/Addons/Details.php @@ -84,8 +84,6 @@ class Details extends BaseAdmin info(DI::l10n()->t('Addon %s enabled.', $addon)); } - Addon::saveEnabledList(); - DI::baseUrl()->redirect('admin/addons/' . $addon); } diff --git a/update.php b/update.php index 314b166e72..82b184c9f4 100644 --- a/update.php +++ b/update.php @@ -92,23 +92,7 @@ function update_1191() DI::config()->set('system', 'maintenance', 1); if (Addon::isEnabled('forumlist')) { - $addon = 'forumlist'; - $addons = DI::config()->get('system', 'addon'); - $addons_arr = []; - - if ($addons) { - $addons_arr = explode(",", str_replace(" ", "", $addons)); - - $idx = array_search($addon, $addons_arr); - if ($idx !== false) { - unset($addons_arr[$idx]); - //delete forumlist manually from addon and hook table - // since Addon::uninstall() don't work here - q("DELETE FROM `addon` WHERE `name` = 'forumlist' "); - q("DELETE FROM `hook` WHERE `file` = 'addon/forumlist/forumlist.php' "); - DI::config()->set('system', 'addon', implode(", ", $addons_arr)); - } - } + Addon::uninstall('forumlist'); } // select old formlist addon entries