<?php
/**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
namespace Friendica\Core;
-use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Util\Strings;
* @return array
* @throws \Exception
*/
- public static function getAvailableList()
+ public static function getAvailableList(): array
{
$addons = [];
$files = glob('addon/*/');
* @return array
* @throws \Exception
*/
- public static function getAdminList()
+ public static function getAdminList(): array
{
$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 = array_filter(DI::config()->get('addons') ?? []);
+
+ ksort($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(array_filter(DI::config()->get('addons') ?? []));
}
/**
* @return void
* @throws \Exception
*/
- public static function uninstall($addon)
+ public static function uninstall(string $addon)
{
$addon = Strings::sanitizeFilePathItem($addon);
- Logger::notice("Addon {addon}: {action}", ['action' => 'uninstall', 'addon' => $addon]);
- DBA::delete('addon', ['name' => $addon]);
+ Logger::debug("Addon {addon}: {action}", ['action' => 'uninstall', 'addon' => $addon]);
+ DI::config()->delete('addons', $addon);
@include_once('addon/' . $addon . '/' . $addon . '.php');
if (function_exists($addon . '_uninstall')) {
* @return bool
* @throws \Exception
*/
- public static function install($addon)
+ public static function install(string $addon): bool
{
$addon = Strings::sanitizeFilePathItem($addon);
return false;
}
- Logger::notice("Addon {addon}: {action}", ['action' => 'install', 'addon' => $addon]);
+ Logger::debug("Addon {addon}: {action}", ['action' => 'install', 'addon' => $addon]);
$t = @filemtime($addon_file_path);
@include_once($addon_file_path);
if (function_exists($addon . '_install')) {
$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)) {
/**
* reload all updated addons
+ *
+ * @return void
+ * @throws \Exception
+ *
*/
public static function reload()
{
- $addons = DBA::selectToArray('addon', [], ['installed' => true]);
+ $addons = array_filter(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::notice("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);
}
}
* @return array with the addon information
* @throws \Exception
*/
- public static function getInfo($addon)
+ public static function getInfo(string $addon): array
{
$addon = Strings::sanitizeFilePathItem($addon);
* @param string $addon
* @return boolean
*/
- public static function isEnabled($addon)
+ public static function isEnabled(string $addon): bool
{
return in_array($addon, self::$addons);
}
*
* @return array
*/
- public static function getEnabledList()
+ public static function getEnabledList(): array
{
return self::$addons;
}
* @return array
* @throws \Exception
*/
- public static function getVisibleList()
+ 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 = array_filter(DI::config()->get('addons') ?? []);
+
+ foreach ($addons as $name => $data) {
+ $visible_addons[] = $name;
}
return $visible_addons;