From 345dbb35217c36b258520dbf815133613c339a72 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 8 Feb 2021 22:46:01 +0300 Subject: rewrite some more hooks --- classes/feeds.php | 46 +++++++++++++++++++++++++++++----------------- classes/pref/feeds.php | 9 +++------ 2 files changed, 32 insertions(+), 23 deletions(-) (limited to 'classes') diff --git a/classes/feeds.php b/classes/feeds.php index 194a41c98..2ad4c541f 100755 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -874,13 +874,17 @@ class Feeds extends Handler_Protected { if (is_array($search) && $search[0]) { $search_qpart = ""; - foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_SEARCH) as $plugin) { - list($search_qpart, $search_words) = $plugin->hook_search($search[0]); - break; - } + PluginHost::getInstance()->chain_hooks_callback(PluginHost::HOOK_SEARCH, + function ($result) use (&$search_qpart, &$search_words) { + if (!empty($result)) { + list($search_qpart, $search_words) = $result; + return true; + } + }, + $search[0]); // fall back in case of no plugins - if (!$search_qpart) { + if (empty($search_qpart)) { list($search_qpart, $search_words) = self::search_to_sql($search[0], $search[1], $owner_uid); } } else { @@ -1160,11 +1164,13 @@ class Feeds extends Handler_Protected { $contents = @UrlHelper::fetch($url, false, $auth_login, $auth_pass); - foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_SUBSCRIBE_FEED) as $plugin) { - $contents = $plugin->hook_subscribe_feed($contents, $url, $auth_login, $auth_pass); - } + PluginHost::getInstance()->chain_hooks_callback(PluginHost::HOOK_SUBSCRIBE_FEED, + function ($result) use (&$contents) { + $contents = $result; + }, + $contents, $url, $auth_login, $auth_pass); - if (!$contents) { + if (empty($contents)) { if (preg_match("/cloudflare\.com/", $fetch_last_error_content)) { $fetch_last_error .= " (feed behind Cloudflare)"; } @@ -1473,10 +1479,14 @@ class Feeds extends Handler_Protected { if ($search) { $search_query_part = ""; - foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_SEARCH) as $plugin) { - list($search_query_part, $search_words) = $plugin->hook_search($search); - break; - } + PluginHost::getInstance()->chain_hooks_callback(PluginHost::HOOK_SEARCH, + function ($result) use (&$search_query_part, &$search_words) { + if (!empty($result)) { + list($search_query_part, $search_words) = $result; + return true; + } + }, + $search); // fall back in case of no plugins if (!$search_query_part) { @@ -2347,11 +2357,13 @@ class Feeds extends Handler_Protected { $query = ""; $skip_first_id = false; - foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_HEADLINES_CUSTOM_SORT_OVERRIDE) as $p) { - list ($query, $skip_first_id) = $p->hook_headlines_custom_sort_override($order); + PluginHost::getInstance()->chain_hooks_callback(PluginHost::HOOK_HEADLINES_CUSTOM_SORT_OVERRIDE, + function ($result) use (&$query, &$skip_first_id) { + list ($query, $skip_first_id) = $result; + }, + $order); - if ($query) return [$query, $skip_first_id]; - } + if ($query) return [$query, $skip_first_id]; switch ($order) { case "title": diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php index 058acec34..5dc0e75e5 100755 --- a/classes/pref/feeds.php +++ b/classes/pref/feeds.php @@ -1586,12 +1586,9 @@ class Pref_Feeds extends Handler_Protected { } static function remove_feed($id, $owner_uid) { - foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_UNSUBSCRIBE_FEED) as $p) { - if (! $p->hook_unsubscribe_feed($id, $owner_uid)) { - user_error("Feed $id (owner: $owner_uid) not removed due to plugin error (HOOK_UNSUBSCRIBE_FEED).", E_USER_WARNING); - return; - } - } + + if (PluginHost::getInstance()->run_hooks_until(PluginHost::HOOK_UNSUBSCRIBE_FEED, true, $id, $owner_uid)) + return; $pdo = Db::pdo(); -- cgit v1.2.3