3 * @copyright Copyright (C) 2010-2023, the Friendica project
5 * @license GNU AGPL version 3 or any later version
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Affero General Public License as
9 * published by the Free Software Foundation, either version 3 of the
10 * License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Affero General Public License for more details.
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 namespace Friendica\Core\Addon\Model;
24 use Friendica\Core\Addon\Capabilities\ICanLoadAddons;
25 use Friendica\Core\Addon\Exception\AddonInvalidConfigFileException;
26 use Friendica\Core\Config\Capability\IManageConfigValues;
27 use Friendica\Util\Strings;
29 class AddonLoader implements ICanLoadAddons
31 const STATIC_PATH = 'static';
34 /** @var IManageConfigValues */
37 public function __construct(string $basePath, IManageConfigValues $config)
39 $this->basePath = $basePath;
40 $this->config = $config;
44 public function getActiveAddonConfig(string $configName): array
46 $addons = array_keys(array_filter($this->config->get('addons') ?? []));
49 foreach ($addons as $addon) {
50 $addonName = Strings::sanitizeFilePathItem(trim($addon));
52 $configFile = $this->basePath . '/addon/' . $addonName . '/' . static::STATIC_PATH . '/' . $configName . '.config.php';
54 if (!file_exists($configFile)) {
55 // Addon unmodified, skipping
59 $config = include $configFile;
61 if (!is_array($config)) {
62 throw new AddonInvalidConfigFileException('Error loading config file ' . $configFile);
65 $returnConfig = array_merge_recursive($returnConfig, $config);