namespace Friendica\Core;
-use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Util\Strings;
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;
}
*/
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') ?? []);
}
/**
$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')) {
$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)) {
*/
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);
}
}
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;
*
* Get a particular config value from the given category ($cat)
*
- * @param string $cat The category of the configuration value
- * @param string $key The configuration key to query
+ * @param string $cat The category of the configuration value
+ * @param ?string $key The configuration key to query (if null, the whole array at the category will get returned)
* @param mixed $default_value Deprecated, use `Config->get($cat, $key, null, $refresh) ?? $default_value` instead
*
* @return mixed Stored value or null if it does not exist
* @throws ConfigPersistenceException In case the persistence layer throws errors
*
*/
- public function get(string $cat, string $key, $default_value = null);
+ public function get(string $cat, string $key = null, $default_value = null);
/**
* Load all configuration values from a given cache and saves it back in the configuration node store
}
/** {@inheritDoc} */
- public function get(string $cat, string $key, $default_value = null)
+ public function get(string $cat, string $key = null, $default_value = null)
{
return $this->configCache->get($cat, $key) ?? $default_value;
}
* @var Database
*/
private $dba;
+ /**
+ * @var IManageConfigValues
+ */
+ private $config;
public function __construct(IManageConfigValues $config, Database $dba, IHandleSessions $session, array $server, array $get)
{
$this->dba = $dba;
+ $this->config = $config;
$this->loadTranslationTable(L10n::detectLanguage($server, $get, $config->get('system', 'language', self::DEFAULT)));
$this->setSessionVariable($session);
$a->strings = [];
// load enabled addons strings
- $addons = $this->dba->select('addon', ['name'], ['installed' => true]);
- while ($p = $this->dba->fetch($addons)) {
- $name = Strings::sanitizeFilePathItem($p['name']);
+ $addons = array_keys($this->config->get('addons') ?? []);
+ foreach ($addons as $addon) {
+ $name = Strings::sanitizeFilePathItem($addon);
if (file_exists(__DIR__ . "/../../addon/$name/lang/$lang/strings.php")) {
include __DIR__ . "/../../addon/$name/lang/$lang/strings.php";
}
// Enter 0 for no time limit.
'account_abandon_days' => 0,
- // addon (Comma-separated list)
- // Manual list of addons which are enabled on this system.
- 'addon' => '',
-
// add_missing_posts (boolean)
// Checks for missing entries in "post", "post-thread" or "post-thread-user" and creates them
'add_missing_posts' => false,
// the newCache entry wasn't set, because we Diff
self::assertNull($mergedCache->get('system', 'test_3'));
}
+
+ public function dataTestCat()
+ {
+ return [
+ 'test_with_hashmap' => [
+ 'data' => [
+ 'test_with_hashmap' => [
+ 'notifyall' => [
+ 'last_update' => 1671051565,
+ 'admin' => true,
+ ],
+ 'blockbot' => [
+ 'last_update' => 1658952852,
+ 'admin' => true,
+ ],
+ ],
+ 'config' => [
+ 'register_policy' => 2,
+ 'register_text' => '',
+ 'sitename' => 'Friendica Social Network23',
+ 'hostname' => 'friendica.local',
+ 'private_addons' => false,
+ ],
+ 'system' => [
+ 'dbclean_expire_conversation' => 90,
+ ],
+ ],
+ 'cat' => 'test_with_hashmap',
+ 'assertion' => [
+ 'notifyall' => [
+ 'last_update' => 1671051565,
+ 'admin' => true,
+ ],
+ 'blockbot' => [
+ 'last_update' => 1658952852,
+ 'admin' => true,
+ ],
+ ],
+ ],
+ 'test_with_keys' => [
+ 'data' => [
+ 'test_with_keys' => [
+ [
+ 'last_update' => 1671051565,
+ 'admin' => true,
+ ],
+ [
+ 'last_update' => 1658952852,
+ 'admin' => true,
+ ],
+ ],
+ 'config' => [
+ 'register_policy' => 2,
+ 'register_text' => '',
+ 'sitename' => 'Friendica Social Network23',
+ 'hostname' => 'friendica.local',
+ 'private_addons' => false,
+ ],
+ 'system' => [
+ 'dbclean_expire_conversation' => 90,
+ ],
+ ],
+ 'cat' => 'test_with_keys',
+ 'assertion' => [
+ [
+ 'last_update' => 1671051565,
+ 'admin' => true,
+ ],
+ [
+ 'last_update' => 1658952852,
+ 'admin' => true,
+ ],
+ ],
+ ],
+ 'test_with_inner_array' => [
+ 'data' => [
+ 'test_with_inner_array' => [
+ 'notifyall' => [
+ 'last_update' => 1671051565,
+ 'admin' => [
+ 'yes' => true,
+ 'no' => 1.5,
+ ],
+ ],
+ 'blogbot' => [
+ 'last_update' => 1658952852,
+ 'admin' => true,
+ ],
+ ],
+ 'config' => [
+ 'register_policy' => 2,
+ 'register_text' => '',
+ 'sitename' => 'Friendica Social Network23',
+ 'hostname' => 'friendica.local',
+ 'private_addons' => false,
+ ],
+ 'system' => [
+ 'dbclean_expire_conversation' => 90,
+ ],
+ ],
+ 'cat' => 'test_with_inner_array',
+ 'assertion' => [
+ 'notifyall' => [
+ 'last_update' => 1671051565,
+ 'admin' => [
+ 'yes' => true,
+ 'no' => 1.5,
+ ],
+ ],
+ 'blogbot' => [
+ 'last_update' => 1658952852,
+ 'admin' => true,
+ ],
+ ],
+ ],
+ ];
+ }
+
+ /**
+ * Tests that the Cache can return a whole category at once
+ *
+ * @dataProvider dataTestCat
+ */
+ public function testGetCategory(array $data, string $category, array $assertion)
+ {
+ $cache = new Cache($data);
+
+ self::assertEquals($assertion, $cache->get($category));
+ }
}
self::assertFalse($this->testedConfig->set('config', 'test', '123'));
self::assertEquals('prio', $this->testedConfig->get('config', 'test', '', true));
}
+
+
+ public function dataTestCat()
+ {
+ return [
+ 'test_with_hashmap' => [
+ 'data' => [
+ 'test_with_hashmap' => [
+ 'notifyall' => [
+ 'last_update' => 1671051565,
+ 'admin' => true,
+ ],
+ 'blockbot' => [
+ 'last_update' => 1658952852,
+ 'admin' => true,
+ ],
+ ],
+ 'config' => [
+ 'register_policy' => 2,
+ 'register_text' => '',
+ 'sitename' => 'Friendica Social Network23',
+ 'hostname' => 'friendica.local',
+ 'private_addons' => false,
+ ],
+ 'system' => [
+ 'dbclean_expire_conversation' => 90,
+ ],
+ ],
+ 'cat' => 'test_with_hashmap',
+ 'assertion' => [
+ 'notifyall' => [
+ 'last_update' => 1671051565,
+ 'admin' => true,
+ ],
+ 'blockbot' => [
+ 'last_update' => 1658952852,
+ 'admin' => true,
+ ],
+ ],
+ ],
+ 'test_with_keys' => [
+ 'data' => [
+ 'test_with_keys' => [
+ [
+ 'last_update' => 1671051565,
+ 'admin' => true,
+ ],
+ [
+ 'last_update' => 1658952852,
+ 'admin' => true,
+ ],
+ ],
+ 'config' => [
+ 'register_policy' => 2,
+ 'register_text' => '',
+ 'sitename' => 'Friendica Social Network23',
+ 'hostname' => 'friendica.local',
+ 'private_addons' => false,
+ ],
+ 'system' => [
+ 'dbclean_expire_conversation' => 90,
+ ],
+ ],
+ 'cat' => 'test_with_keys',
+ 'assertion' => [
+ [
+ 'last_update' => 1671051565,
+ 'admin' => true,
+ ],
+ [
+ 'last_update' => 1658952852,
+ 'admin' => true,
+ ],
+ ],
+ ],
+ 'test_with_inner_array' => [
+ 'data' => [
+ 'test_with_inner_array' => [
+ 'notifyall' => [
+ 'last_update' => 1671051565,
+ 'admin' => [
+ 'yes' => true,
+ 'no' => 1.5,
+ ],
+ ],
+ 'blogbot' => [
+ 'last_update' => 1658952852,
+ 'admin' => true,
+ ],
+ ],
+ 'config' => [
+ 'register_policy' => 2,
+ 'register_text' => '',
+ 'sitename' => 'Friendica Social Network23',
+ 'hostname' => 'friendica.local',
+ 'private_addons' => false,
+ ],
+ 'system' => [
+ 'dbclean_expire_conversation' => 90,
+ ],
+ ],
+ 'cat' => 'test_with_inner_array',
+ 'assertion' => [
+ 'notifyall' => [
+ 'last_update' => 1671051565,
+ 'admin' => [
+ 'yes' => true,
+ 'no' => 1.5,
+ ],
+ ],
+ 'blogbot' => [
+ 'last_update' => 1658952852,
+ 'admin' => true,
+ ],
+ ],
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider dataTestCat
+ */
+ public function testGetCategory(array $data, string $category, array $assertion)
+ {
+ $this->configCache = new Cache($data);
+ $config = new Config($this->configFileManager, $this->configCache);
+
+ self::assertEquals($assertion, $config->get($category));
+ }
}