X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FAddon.php;h=252acd31f0e270d1c0da4b0ef5f2c76e4eb1b6c3;hb=0dbce6e58ba6494daf1ad30812cdffd5a779eda4;hp=06a731b2cdd594b4b6cebba0e542e06bd69a01b2;hpb=b73caa83fc1febd943b232a83186cbdce6460866;p=friendica.git diff --git a/src/Core/Addon.php b/src/Core/Addon.php index 06a731b2cd..252acd31f0 100644 --- a/src/Core/Addon.php +++ b/src/Core/Addon.php @@ -2,16 +2,17 @@ /** * @file src/Core/Addon.php */ + namespace Friendica\Core; -use Friendica\BaseObject; use Friendica\Database\DBA; +use Friendica\DI; use Friendica\Util\Strings; /** * Some functions to handle addons */ -class Addon extends BaseObject +class Addon { /** * The addon sub-directory @@ -26,6 +27,61 @@ class Addon extends BaseObject */ private static $addons = []; + /** + * Returns the list of available addons with their current status and info. + * 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 array + * @throws \Exception + */ + public static function getAvailableList() + { + $addons = []; + $files = glob('addon/*/'); + if (is_array($files)) { + foreach ($files as $file) { + if (is_dir($file)) { + list($tmp, $addon) = array_map('trim', explode('/', $file)); + $info = self::getInfo($addon); + + if (Config::get('system', 'show_unsupported_addons') + || strtolower($info['status']) != 'unsupported' + || self::isEnabled($addon) + ) { + $addons[] = [$addon, (self::isEnabled($addon) ? 'on' : 'off'), $info]; + } + } + } + } + + return $addons; + } + + /** + * Returns a list of addons that can be configured at the node level. + * The list is formatted for display in the admin panel aside. + * + * @return array + * @throws \Exception + */ + 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'], + 'class' => 'addon' + ]; + } + DBA::close($addonsAdminStmt); + + return $addons_admin; + } + + /** * @brief Synchronize addons: * @@ -93,7 +149,11 @@ class Addon extends BaseObject $func(); } + DBA::delete('hook', ['file' => 'addon/' . $addon . '/' . $addon . '.php']); + unset(self::$addons[array_search($addon, self::$addons)]); + + Addon::saveEnabledList(); } /** @@ -117,7 +177,7 @@ class Addon extends BaseObject @include_once('addon/' . $addon . '/' . $addon . '.php'); if (function_exists($addon . '_install')) { $func = $addon . '_install'; - $func(self::getApp()); + $func(DI::app()); $addon_admin = (function_exists($addon . "_addon_admin") ? 1 : 0); @@ -136,9 +196,11 @@ class Addon extends BaseObject self::$addons[] = $addon; } + Addon::saveEnabledList(); + return true; } else { - Logger::error("Addon {addon}: {action} failed", ['action' => 'uninstall', 'addon' => $addon]); + Logger::error("Addon {addon}: {action} failed", ['action' => 'install', 'addon' => $addon]); return false; } } @@ -172,11 +234,11 @@ class Addon extends BaseObject if (function_exists($addon . '_uninstall')) { $func = $addon . '_uninstall'; - $func(self::getApp()); + $func(DI::app()); } if (function_exists($addon . '_install')) { $func = $addon . '_install'; - $func(self::getApp()); + $func(DI::app()); } DBA::update('addon', ['timestamp' => $t], ['id' => $i['id']]); } @@ -205,7 +267,7 @@ class Addon extends BaseObject */ public static function getInfo($addon) { - $a = self::getApp(); + $a = DI::app(); $addon = Strings::sanitizeFilePathItem($addon); @@ -224,7 +286,7 @@ class Addon extends BaseObject $stamp1 = microtime(true); $f = file_get_contents("addon/$addon/$addon.php"); - $a->getProfiler()->saveTimestamp($stamp1, "file", System::callstack()); + DI::profiler()->saveTimestamp($stamp1, "file", System::callstack()); $r = preg_match("|/\*.*\*/|msU", $f, $m); @@ -283,11 +345,10 @@ class Addon extends BaseObject * Saves the current enabled addon list in the system.addon config key * * @return boolean - * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ public static function saveEnabledList() { - return Config::set("system", "addon", implode(", ", self::$addons)); + return Config::set('system', 'addon', implode(',', self::$addons)); } /**