From 5d037352383c6e9d262728d2f08ddc364c37b1b1 Mon Sep 17 00:00:00 2001 From: Adam Magness Date: Sat, 20 Jan 2018 08:22:18 -0500 Subject: [PATCH] Update hook names update hook names and other plugin references. --- mod/admin.php | 6 +- mod/settings.php | 38 +-- src/Core/Addon.php | 521 ++++++++++++++++++----------------- src/Database/DBStructure.php | 4 +- 4 files changed, 286 insertions(+), 283 deletions(-) diff --git a/mod/admin.php b/mod/admin.php index 33ea343c81..0b53dc93d8 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -62,8 +62,8 @@ function admin_post(App $a) if ($a->argc > 2 && is_file("addon/" . $a->argv[2] . "/" . $a->argv[2] . ".php")) { @include_once("addon/" . $a->argv[2] . "/" . $a->argv[2] . ".php"); - if (function_exists($a->argv[2] . '_plugin_admin_post')) { - $func = $a->argv[2] . '_plugin_admin_post'; + if (function_exists($a->argv[2] . '_addon_admin_post')) { + $func = $a->argv[2] . '_addon_admin_post'; $func($a); } } @@ -1790,7 +1790,7 @@ function admin_page_addons(App $a) $admin_form = ""; if (in_array($addon, $a->addons_admin)) { @require_once("addon/$addon/$addon.php"); - $func = $addon . '_plugin_admin'; + $func = $addon . '_addon_admin'; $func($a, $admin_form); } diff --git a/mod/settings.php b/mod/settings.php index c067f3db19..a5a4d4ad50 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -170,23 +170,25 @@ function settings_post(App $a) icon='%s', uid=%d WHERE client_id='%s'", - dbesc($key), - dbesc($secret), - dbesc($name), - dbesc($redirect), - dbesc($icon), - local_user(), - dbesc($key)); + dbesc($key), + dbesc($secret), + dbesc($name), + dbesc($redirect), + dbesc($icon), + local_user(), + dbesc($key) + ); } else { q("INSERT INTO clients (client_id, pw, name, redirect_uri, icon, uid) VALUES ('%s', '%s', '%s', '%s', '%s',%d)", - dbesc($key), - dbesc($secret), - dbesc($name), - dbesc($redirect), - dbesc($icon), - local_user()); + dbesc($key), + dbesc($secret), + dbesc($name), + dbesc($redirect), + dbesc($icon), + local_user() + ); } } goaway(System::baseUrl(true)."/settings/oauth/"); @@ -196,12 +198,12 @@ function settings_post(App $a) if (($a->argc > 1) && ($a->argv[1] == 'addon')) { check_form_security_token_redirectOnErr('/settings/addon', 'settings_addon'); - Addon::callHooks('plugin_settings_post', $_POST); + Addon::callHooks('addon_settings_post', $_POST); return; } - if (($a->argc > 1) && ($a->argv[1] == 'connectors')) { - + if (($a->argc > 1) && ($a->argv[1] == 'connectors')) + { check_form_security_token_redirectOnErr('/settings/connectors', 'settings_connectors'); if (x($_POST, 'general-submit')) { @@ -749,12 +751,12 @@ function settings_content(App $a) if (($a->argc > 1) && ($a->argv[1] === 'addon')) { $settings_addons = ""; - $r = q("SELECT * FROM `hook` WHERE `hook` = 'plugin_settings' "); + $r = q("SELECT * FROM `hook` WHERE `hook` = 'addon_settings' "); if (!DBM::is_result($r)) { $settings_addons = t('No Addon settings configured'); } - Addon::callHooks('plugin_settings', $settings_addons); + Addon::callHooks('addon_settings', $settings_addons); $tpl = get_markup_template('settings/addons.tpl'); diff --git a/src/Core/Addon.php b/src/Core/Addon.php index 7d5115b27d..af3d843a9a 100644 --- a/src/Core/Addon.php +++ b/src/Core/Addon.php @@ -17,298 +17,299 @@ require_once 'include/dba.php'; */ class Addon { - /** - * @brief uninstalls an addon. - * - * @param string $addon name of the addon - * @return boolean - */ - public static function uninstall($addon) - { - logger("Addons: uninstalling " . $addon); - dba::delete('addon', ['name' => $addon]); + /** + * @brief uninstalls an addon. + * + * @param string $addon name of the addon + * @return boolean + */ + public static function uninstall($addon) + { + logger("Addons: uninstalling " . $addon); + dba::delete('addon', ['name' => $addon]); - @include_once('addon/' . $addon . '/' . $addon . '.php'); - if (function_exists($addon . '_uninstall')) { - $func = $addon . '_uninstall'; - $func(); - } - } + @include_once('addon/' . $addon . '/' . $addon . '.php'); + if (function_exists($addon . '_uninstall')) { + $func = $addon . '_uninstall'; + $func(); + } + } - /** - * @brief installs an addon. - * - * @param string $addon name of the addon - * @return bool - */ - public static function install($addon) - { - // silently fail if addon was removed + /** + * @brief installs an addon. + * + * @param string $addon name of the addon + * @return bool + */ + public static function install($addon) + { + // silently fail if addon was removed - if (!file_exists('addon/' . $addon . '/' . $addon . '.php')) { - return false; - } - logger("Addons: installing " . $addon); - $t = @filemtime('addon/' . $addon . '/' . $addon . '.php'); - @include_once('addon/' . $addon . '/' . $addon . '.php'); - if (function_exists($addon . '_install')) { - $func = $addon . '_install'; - $func(); + if (!file_exists('addon/' . $addon . '/' . $addon . '.php')) { + return false; + } + logger("Addons: installing " . $addon); + $t = @filemtime('addon/' . $addon . '/' . $addon . '.php'); + @include_once('addon/' . $addon . '/' . $addon . '.php'); + if (function_exists($addon . '_install')) { + $func = $addon . '_install'; + $func(); - $addon_admin = (function_exists($addon."_plugin_admin") ? 1 : 0); + $addon_admin = (function_exists($addon."_addon_admin") ? 1 : 0); - dba::insert('addon', ['name' => $addon, 'installed' => true, - 'timestamp' => $t, 'plugin_admin' => $addon_admin]); + dba::insert('addon', ['name' => $addon, 'installed' => true, + 'timestamp' => $t, 'plugin_admin' => $addon_admin]); - // we can add the following with the previous SQL - // once most site tables have been updated. - // This way the system won't fall over dead during the update. + // we can add the following with the previous SQL + // once most site tables have been updated. + // This way the system won't fall over dead during the update. - if (file_exists('addon/' . $addon . '/.hidden')) { - dba::update('addon', ['hidden' => true], ['name' => $addon]); - } - return true; - } else { - logger("Addons: FAILED installing " . $addon); - return false; - } - } + if (file_exists('addon/' . $addon . '/.hidden')) { + dba::update('addon', ['hidden' => true], ['name' => $addon]); + } + return true; + } else { + logger("Addons: FAILED installing " . $addon); + return false; + } + } - /** - * reload all updated addons - */ - public static function reload() - { - $addons = Config::get('system', 'addon'); - if (strlen($addons)) { + /** + * reload all updated addons + */ + public static function reload() + { + $addons = Config::get('system', 'addon'); + if (strlen($addons)) { + $r = dba::select('addon', [], ['installed' => 1]); + if (DBM::is_result($r)) { + $installed = $r; + } else { + $installed = []; + } - $r = dba::select('addon', [], ['installed' => 1]); - if (DBM::is_result($r)) { - $installed = $r; - } else { - $installed = []; - } + $addon_list = explode(',', $addons); - $addon_list = explode(',', $addons); + if (count($addon_list)) { + foreach ($addon_list as $addon) { + $addon = trim($addon); + $fname = 'addon/' . $addon . '/' . $addon . '.php'; - if (count($addon_list)) { - foreach ($addon_list as $addon) { + 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); - $addon = trim($addon); + 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']]); + } + } + } + } + } + } + } - $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']]); - } - } - } - } - } - } - } - - /** - * @brief check if addon is enabled - * - * @param string $addon - * @return boolean - */ - public static function isEnabled($addon) - { - return dba::exists('addon', ['installed' => true, 'name' => $addon]); - } + /** + * @brief check if addon is enabled + * + * @param string $addon + * @return boolean + */ + public static function isEnabled($addon) + { + return dba::exists('addon', ['installed' => true, 'name' => $addon]); + } - /** - * @brief registers a hook. - * - * @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 - */ - public static function registerHook($hook, $file, $function, $priority = 0) - { - $condition = ['hook' => $hook, 'file' => $file, 'function' => $function]; - $exists = dba::exists('hook', $condition); - if ($exists) { - return true; - } + /** + * @brief registers a hook. + * + * @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 + */ + public static function registerHook($hook, $file, $function, $priority = 0) + { + $condition = ['hook' => $hook, 'file' => $file, 'function' => $function]; + $exists = dba::exists('hook', $condition); + if ($exists) { + return true; + } - $r = dba::insert('hook', ['hook' => $hook, 'file' => $file, 'function' => $function, 'priority' => $priority]); + $r = dba::insert('hook', ['hook' => $hook, 'file' => $file, 'function' => $function, 'priority' => $priority]); - return $r; - } + return $r; + } - /** - * @brief unregisters a hook. - * - * @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 array - */ - public static function unregisterHook($hook, $file, $function) - { - $condition = ['hook' => $hook, 'file' => $file, 'function' => $function]; - $r = dba::delete('hook', $condition); - return $r; - } + /** + * @brief unregisters a hook. + * + * @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 array + */ + public static function unregisterHook($hook, $file, $function) + { + $condition = ['hook' => $hook, 'file' => $file, 'function' => $function]; + $r = dba::delete('hook', $condition); + return $r; + } + /** + * Load hooks + */ + public static function loadHooks() + { + $a = get_app(); + $a->hooks = []; + $r = dba::select('hook', ['hook', 'file', 'function'], [], ['order' => ['priority' => 'desc', 'file']]); - public static function loadHooks() { - $a = get_app(); - $a->hooks = []; - $r = dba::select('hook', ['hook', 'file', 'function'], [], ['order' => ['priority' => 'desc', 'file']]); + while ($rr = dba::fetch($r)) { + if (! array_key_exists($rr['hook'], $a->hooks)) { + $a->hooks[$rr['hook']] = []; + } + $a->hooks[$rr['hook']][] = [$rr['file'],$rr['function']]; + } + dba::close($r); + } - while ($rr = dba::fetch($r)) { - if (! array_key_exists($rr['hook'],$a->hooks)) { - $a->hooks[$rr['hook']] = []; - } - $a->hooks[$rr['hook']][] = [$rr['file'],$rr['function']]; - } - dba::close($r); - } + /** + * @brief Calls a hook. + * + * Use this function when you want to be able to allow a hook to manipulate + * the provided data. + * + * @param string $name of the hook to call + * @param string|array &$data to transmit to the callback handler + */ + public static function callHooks($name, &$data = null) + { + $a = get_app(); - /** - * @brief Calls a hook. - * - * Use this function when you want to be able to allow a hook to manipulate - * the provided data. - * - * @param string $name of the hook to call - * @param string|array &$data to transmit to the callback handler - */ - public static function callHooks($name, &$data = null) - { - $a = get_app(); + if (is_array($a->hooks) && array_key_exists($name, $a->hooks)) { + foreach ($a->hooks[$name] as $hook) { + self::callSingleHook($a, $name, $hook, $data); + } + } + } - if (is_array($a->hooks) && array_key_exists($name, $a->hooks)) { - foreach ($a->hooks[$name] as $hook) { - self::callSingleHook($a, $name, $hook, $data); - } - } - } + /** + * @brief Calls a single hook. + * + * @param string $name of the hook to call + * @param array $hook Hook data + * @param string|array &$data to transmit to the callback handler + */ + public static function callSingleHook($a, $name, $hook, &$data = null) + { + // Don't run a theme's hook if the user isn't using the theme + if (strpos($hook[0], 'view/theme/') !== false && strpos($hook[0], 'view/theme/'.current_theme()) === false) { + return; + } - /** - * @brief Calls a single hook. - * - * @param string $name of the hook to call - * @param array $hook Hook data - * @param string|array &$data to transmit to the callback handler - */ - public static function callSingleHook($a, $name, $hook, &$data = null) - { - // Don't run a theme's hook if the user isn't using the theme - if (strpos($hook[0], 'view/theme/') !== false && strpos($hook[0], 'view/theme/'.current_theme()) === false) - return; + @include_once($hook[0]); + if (function_exists($hook[1])) { + $func = $hook[1]; + $func($a, $data); + } else { + // remove orphan hooks + $condition = ['hook' => $name, 'file' => $hook[0], 'function' => $hook[1]]; + dba::delete('hook', $condition); + } + } - @include_once($hook[0]); - if (function_exists($hook[1])) { - $func = $hook[1]; - $func($a, $data); - } else { - // remove orphan hooks - $condition = ['hook' => $name, 'file' => $hook[0], 'function' => $hook[1]]; - dba::delete('hook', $condition); - } - } + /** + * check if an app_menu hook exist for addon $name. + * Return true if the addon is an app + */ + public static function isApp($name) + { + $a = get_app(); - /** - * check if an app_menu hook exist for addon $name. - * Return true if the addon is an app - */ - function isApp($name) - { - $a = get_app(); + if (is_array($a->hooks) && (array_key_exists('app_menu', $a->hooks))) { + foreach ($a->hooks['app_menu'] as $hook) { + if ($hook[0] == 'addon/'.$name.'/'.$name.'.php') { + return true; + } + } + } - if (is_array($a->hooks) && (array_key_exists('app_menu',$a->hooks))) { - foreach ($a->hooks['app_menu'] as $hook) { - if ($hook[0] == 'addon/'.$name.'/'.$name.'.php') - return true; - } - } + return false; + } - return false; - } + /** + * @brief Parse addon comment in search of addon infos. + * + * like + * \code + *...* Name: addon + * * Description: An addon which plugs in + * . * Version: 1.2.3 + * * Author: John + * * Author: Jane + * * + * *\endcode + * @param string $addon the name of the addon + * @return array with the addon information + */ - /** - * @brief Parse addon comment in search of addon infos. - * - * like - * \code - *...* Name: addon - * * Description: An addon which plugs in - * . * Version: 1.2.3 - * * Author: John - * * Author: Jane - * * - * *\endcode - * @param string $addon the name of the addon - * @return array with the addon information - */ + public static function getInfo($addon) + { + $a = get_app(); - public static function getInfo($addon) { + $info=[ + 'name' => $addon, + 'description' => "", + 'author' => [], + 'version' => "", + 'status' => "" + ]; - $a = get_app(); + if (!is_file("addon/$addon/$addon.php")) { + return $info; + } - $info=[ - 'name' => $addon, - 'description' => "", - 'author' => [], - 'version' => "", - 'status' => "" - ]; + $stamp1 = microtime(true); + $f = file_get_contents("addon/$addon/$addon.php"); + $a->save_timestamp($stamp1, "file"); - if (!is_file("addon/$addon/$addon.php")) { - return $info; - } + $r = preg_match("|/\*.*\*/|msU", $f, $m); - $stamp1 = microtime(true); - $f = file_get_contents("addon/$addon/$addon.php"); - $a->save_timestamp($stamp1, "file"); - - $r = preg_match("|/\*.*\*/|msU", $f, $m); - - if ($r) { - $ll = explode("\n", $m[0]); - foreach ( $ll as $l ) { - $l = trim($l,"\t\n\r */"); - if ($l != "") { - list($k,$v) = array_map("trim", explode(":",$l,2)); - $k= strtolower($k); - if ($k == "author") { - $r=preg_match("|([^<]+)<([^>]+)>|", $v, $m); - if ($r) { - $info['author'][] = ['name'=>$m[1], 'link'=>$m[2]]; - } else { - $info['author'][] = ['name'=>$v]; - } - } else { - if (array_key_exists($k,$info)) { - $info[$k]=$v; - } - } - - } - } - } - return $info; - } + if ($r) { + $ll = explode("\n", $m[0]); + foreach ($ll as $l) { + $l = trim($l, "\t\n\r */"); + if ($l != "") { + list($k,$v) = array_map("trim", explode(":", $l, 2)); + $k= strtolower($k); + if ($k == "author") { + $r=preg_match("|([^<]+)<([^>]+)>|", $v, $m); + if ($r) { + $info['author'][] = ['name'=>$m[1], 'link'=>$m[2]]; + } else { + $info['author'][] = ['name'=>$v]; + } + } else { + if (array_key_exists($k, $info)) { + $info[$k]=$v; + } + } + } + } + } + return $info; + } } diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php index 973098d460..3f4614b6c7 100644 --- a/src/Database/DBStructure.php +++ b/src/Database/DBStructure.php @@ -661,7 +661,7 @@ class DBStructure { $database = []; $database["addon"] = [ - "comment" => "registered plugins", + "comment" => "registered addons", "fields" => [ "id" => ["type" => "int", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "name" => ["type" => "varchar(190)", "not null" => "1", "default" => "", "comment" => ""], @@ -1081,7 +1081,7 @@ class DBStructure { ] ]; $database["hook"] = [ - "comment" => "plugin hook registry", + "comment" => "addon hook registry", "fields" => [ "id" => ["type" => "int", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "hook" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],