X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FAddon.php;h=06a731b2cdd594b4b6cebba0e542e06bd69a01b2;hb=c713c2bf622257dbecf223b5f58bf8a98dde9d65;hp=c3f559c7087720ae972df14c341039f718045f58;hpb=ff203c277dfd8619ccfb63edebaf54274e27bf2d;p=friendica.git diff --git a/src/Core/Addon.php b/src/Core/Addon.php index c3f559c708..06a731b2cd 100644 --- a/src/Core/Addon.php +++ b/src/Core/Addon.php @@ -4,15 +4,21 @@ */ namespace Friendica\Core; -use Friendica\App; use Friendica\BaseObject; use Friendica\Database\DBA; +use Friendica\Util\Strings; /** * Some functions to handle addons */ class Addon extends BaseObject { + /** + * The addon sub-directory + * @var string + */ + const DIRECTORY = 'addon'; + /** * List of the names of enabled addons * @@ -71,11 +77,14 @@ class Addon extends BaseObject * @brief uninstalls an addon. * * @param string $addon name of the addon - * @return boolean + * @return void + * @throws \Exception */ public static function uninstall($addon) { - logger("Addons: uninstalling " . $addon); + $addon = Strings::sanitizeFilePathItem($addon); + + Logger::notice("Addon {addon}: {action}", ['action' => 'uninstall', 'addon' => $addon]); DBA::delete('addon', ['name' => $addon]); @include_once('addon/' . $addon . '/' . $addon . '.php'); @@ -84,7 +93,7 @@ class Addon extends BaseObject $func(); } - unset(self::$addons[$idx]); + unset(self::$addons[array_search($addon, self::$addons)]); } /** @@ -92,20 +101,23 @@ class Addon extends BaseObject * * @param string $addon name of the addon * @return bool + * @throws \Exception */ public static function install($addon) { - // silently fail if addon was removed + $addon = Strings::sanitizeFilePathItem($addon); + // silently fail if addon was removed of if $addon is funky if (!file_exists('addon/' . $addon . '/' . $addon . '.php')) { return false; } - logger("Addons: installing " . $addon); + + Logger::notice("Addon {addon}: {action}", ['action' => 'install', 'addon' => $addon]); $t = @filemtime('addon/' . $addon . '/' . $addon . '.php'); @include_once('addon/' . $addon . '/' . $addon . '.php'); if (function_exists($addon . '_install')) { $func = $addon . '_install'; - $func(); + $func(self::getApp()); $addon_admin = (function_exists($addon . "_addon_admin") ? 1 : 0); @@ -123,9 +135,10 @@ class Addon extends BaseObject if (!self::isEnabled($addon)) { self::$addons[] = $addon; } + return true; } else { - logger("Addons: FAILED installing " . $addon); + Logger::error("Addon {addon}: {action} failed", ['action' => 'uninstall', 'addon' => $addon]); return false; } } @@ -146,28 +159,26 @@ class Addon extends BaseObject $addon_list = explode(',', $addons); - if (count($addon_list)) { - foreach ($addon_list as $addon) { - $addon = trim($addon); - $fname = 'addon/' . $addon . '/' . $addon . '.php'; - - if (file_exists($fname)) { - $t = @filemtime($fname); - foreach ($installed as $i) { - if (($i['name'] == $addon) && ($i['timestamp'] != $t)) { - logger('Reloading addon: ' . $i['name']); - @include_once($fname); - - if (function_exists($addon . '_uninstall')) { - $func = $addon . '_uninstall'; - $func(); - } - if (function_exists($addon . '_install')) { - $func = $addon . '_install'; - $func(); - } - DBA::update('addon', ['timestamp' => $t], ['id' => $i['id']]); + foreach ($addon_list as $addon) { + $addon = Strings::sanitizeFilePathItem(trim($addon)); + $fname = 'addon/' . $addon . '/' . $addon . '.php'; + if (file_exists($fname)) { + $t = @filemtime($fname); + foreach ($installed as $i) { + if (($i['name'] == $addon) && ($i['timestamp'] != $t)) { + + Logger::notice("Addon {addon}: {action}", ['action' => 'reload', 'addon' => $i['name']]); + @include_once($fname); + + if (function_exists($addon . '_uninstall')) { + $func = $addon . '_uninstall'; + $func(self::getApp()); + } + if (function_exists($addon . '_install')) { + $func = $addon . '_install'; + $func(self::getApp()); } + DBA::update('addon', ['timestamp' => $t], ['id' => $i['id']]); } } } @@ -190,11 +201,14 @@ class Addon extends BaseObject * *\endcode * @param string $addon the name of the addon * @return array with the addon information + * @throws \Exception */ public static function getInfo($addon) { $a = self::getApp(); + $addon = Strings::sanitizeFilePathItem($addon); + $info = [ 'name' => $addon, 'description' => "", @@ -210,7 +224,7 @@ class Addon extends BaseObject $stamp1 = microtime(true); $f = file_get_contents("addon/$addon/$addon.php"); - $a->saveTimestamp($stamp1, "file"); + $a->getProfiler()->saveTimestamp($stamp1, "file", System::callstack()); $r = preg_match("|/\*.*\*/|msU", $f, $m); @@ -269,6 +283,7 @@ 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() { @@ -279,6 +294,7 @@ class Addon extends BaseObject * Returns the list of non-hidden enabled addon names * * @return array + * @throws \Exception */ public static function getVisibleList() { @@ -296,13 +312,14 @@ class Addon extends BaseObject /** * Shim of Hook::register left for backward compatibility purpose. * - * @see Hook::register + * @see Hook::register * @deprecated since version 2018.12 * @param string $hook the name of the hook * @param string $file the name of the file that hooks into * @param string $function the name of the function that the hook will call * @param int $priority A priority (defaults to 0) * @return mixed|bool + * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ public static function registerHook($hook, $file, $function, $priority = 0) { @@ -312,12 +329,13 @@ class Addon extends BaseObject /** * Shim of Hook::unregister left for backward compatibility purpose. * - * @see Hook::unregister + * @see Hook::unregister * @deprecated since version 2018.12 * @param string $hook the name of the hook * @param string $file the name of the file that hooks into * @param string $function the name of the function that the hook called * @return boolean + * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ public static function unregisterHook($hook, $file, $function) { @@ -327,10 +345,11 @@ class Addon extends BaseObject /** * Shim of Hook::callAll left for backward-compatibility purpose. * - * @see Hook::callAll + * @see Hook::callAll * @deprecated since version 2018.12 - * @param string $name of the hook to call + * @param string $name of the hook to call * @param string|array &$data to transmit to the callback handler + * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ public static function callHooks($name, &$data = null) {