addonPath = $addonPath; $this->config = $config; $this->profiler = $profiler; $this->proxy = new AddonProxy($addonPath); } /** * Returns the absolute path to the addon folder * * e.g. `/var/www/html/addon` */ public function getAddonPath(): string { return $this->addonPath; } /** * Returns the list of available addons. * * This list is made from scanning the addon/ folder. * Unsupported addons are excluded unless they already are enabled or system.show_unsupported_addon is set. * * @return string[] */ public function getAvailableAddons(): array { return $this->proxy->getAvailableAddons(); } /** * Installs an addon. * * @param string $addonId name of the addon * * @return bool true on success or false on failure */ public function installAddon(string $addonId): bool { return $this->proxy->installAddon($addonId); } /** * Uninstalls an addon. * * @param string $addonId name of the addon */ public function uninstallAddon(string $addonId): void { $this->proxy->uninstallAddon($addonId); } /** * Load addons. * * @internal */ public function loadAddons(): void { $this->addons = array_keys(array_filter($this->config->get('addons') ?? [])); } /** * Reload (uninstall and install) all updated addons. */ public function reloadAddons(): void { $this->proxy->reloadAddons(); } /** * Get the comment block of an addon as value object. */ public function getAddonInfo(string $addonId): AddonInfo { $default = [ 'id' => $addonId, 'name' => $addonId, ]; if (!is_file($this->getAddonPath() . "/$addonId/$addonId.php")) { return AddonInfo::fromArray($default); } $this->profiler->startRecording('file'); $raw = file_get_contents($this->getAddonPath() . "/$addonId/$addonId.php"); $this->profiler->stopRecording(); return AddonInfo::fromString($addonId, $raw); } /** * Checks if the provided addon is enabled */ public function isAddonEnabled(string $addonId): bool { return in_array($addonId, $this->addons); } /** * Returns a list with the IDs of the enabled addons * * @return string[] */ public function getEnabledAddons(): array { return $this->addons; } /** * Returns a list with the IDs of the non-hidden enabled addons * * @return string[] */ public function getVisibleEnabledAddons(): array { return $this->proxy->getVisibleEnabledAddons(); } /** * Returns a list with the IDs of the enabled addons that provides admin settings. * * @return string[] */ public function getEnabledAddonsWithAdminSettings(): array { return $this->proxy->getEnabledAddonsWithAdminSettings(); } }