diff --git a/src/Core/Addon/AddonManagerHelper.php b/src/Core/Addon/AddonManagerHelper.php index a436c0e19b..66f22bf904 100644 --- a/src/Core/Addon/AddonManagerHelper.php +++ b/src/Core/Addon/AddonManagerHelper.php @@ -62,7 +62,33 @@ final class AddonManagerHelper implements AddonHelper */ public function getAvailableAddons(): array { - return $this->proxy->getAvailableAddons(); + $files = glob($this->getAddonPath() . '/*/'); + + if (!is_array($files)) { + return []; + } + + $addons = []; + + foreach ($files as $file) { + if (!is_dir($file)) { + continue; + } + + $addonId = basename($file); + + $addonInfo = $this->getAddonInfo($addonId); + + if ( + $this->config->get('system', 'show_unsupported_addons') + || strtolower($addonInfo->getStatus()) !== 'unsupported' + || $this->isAddonEnabled($addonId) + ) { + $addons[] = $addonId; + } + } + + return $addons; } /** diff --git a/tests/Unit/Core/Addon/AddonManagerHelperTest.php b/tests/Unit/Core/Addon/AddonManagerHelperTest.php index 7c8f817594..6464987845 100644 --- a/tests/Unit/Core/Addon/AddonManagerHelperTest.php +++ b/tests/Unit/Core/Addon/AddonManagerHelperTest.php @@ -98,4 +98,15 @@ class AddonManagerHelperTest extends TestCase $this->assertSame(['addonwithadminsettings'], $addonManagerHelper->getEnabledAddonsWithAdminSettings()); } + + public function testGetAvailableAddons(): void + { + $addonManagerHelper = new AddonManagerHelper( + __DIR__ . '/../../../Util/addons', + $this->createStub(originalClassName: IManageConfigValues::class), + $this->createStub(Profiler::class) + ); + + $this->assertSame(['helloaddon'], $addonManagerHelper->getAvailableAddons()); + } }