Browse Source

make pluginhost a singleton

Andrew Dolgov 6 years ago
parent
commit
1ffe3391f9

+ 1 - 2
backend.php

@@ -113,8 +113,7 @@
 
 	$op = str_replace("-", "_", $op);
 
-	global $pluginhost;
-	$override = $pluginhost->lookup_handler($op, $method);
+	$override = PluginHost::getInstance()->lookup_handler($op, $method);
 
 	if (class_exists($op) || $override) {
 

+ 3 - 7
classes/api.php

@@ -341,8 +341,7 @@ class API extends Handler {
 					"score" => (int)$line["score"]
 				);
 
-				global $pluginhost;
-				foreach ($pluginhost->get_hooks($pluginhost::HOOK_RENDER_ARTICLE_API) as $p) {
+				foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_API) as $p) {
 					$article = $p->hook_render_article_api(array("article" => $article));
 				}
 
@@ -466,9 +465,7 @@ class API extends Handler {
 	}
 
 	function index($method) {
-		global $pluginhost;
-
-		$plugin = $pluginhost->get_api_method(strtolower($method));
+		$plugin = PluginHost::getInstance()->get_api_method(strtolower($method));
 
 		if ($plugin && method_exists($plugin, $method)) {
 			$reply = $plugin->$method();
@@ -697,8 +694,7 @@ class API extends Handler {
 				$headline_row["author"] = $line["author"];
 				$headline_row["score"] = (int)$line["score"];
 
-				global $pluginhost;
-				foreach ($pluginhost->get_hooks($pluginhost::HOOK_RENDER_ARTICLE_API) as $p) {
+				foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_API) as $p) {
 					$headline_row = $p->hook_render_article_api(array("headline" => $headline_row));
 				}
 

+ 7 - 13
classes/feeds.php

@@ -108,14 +108,12 @@ class Feeds extends Handler_Protected {
 
 		}
 
-		global $pluginhost;
-
-		if ($pluginhost->get_plugin("mail")) {
+		if (PluginHost::getInstance()->get_plugin("mail")) {
 			$reply .= "<option value=\"emailArticle(false)\">".__('Forward by email').
 				"</option>";
 		}
 
-		if ($pluginhost->get_plugin("mailto")) {
+		if (PluginHost::getInstance()->get_plugin("mailto")) {
 			$reply .= "<option value=\"mailtoArticle(false)\">".__('Forward by email').
 				"</option>";
 		}
@@ -132,7 +130,7 @@ class Feeds extends Handler_Protected {
 
 		//$reply .= "</h2";
 
-		foreach ($pluginhost->get_hooks($pluginhost::HOOK_HEADLINE_TOOLBAR_BUTTON) as $p) {
+		foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_HEADLINE_TOOLBAR_BUTTON) as $p) {
 			 echo $p->hook_headline_toolbar_button($feed_id, $is_cat);
 		}
 
@@ -214,9 +212,7 @@ class Feeds extends Handler_Protected {
 //		error_log("search_mode: " . $search_mode);
 
 		if (!$cat_view && is_numeric($feed) && $feed < PLUGIN_FEED_BASE_INDEX && $feed > LABEL_BASE_INDEX) {
-			global $pluginhost;
-
-			$handler = $pluginhost->get_feed_handler(
+			$handler = PluginHost::getInstance()->get_feed_handler(
 				PluginHost::feed_to_pfeed_id($feed));
 
 		//	function queryFeedHeadlines($feed, $limit, $view_mode, $cat_view, $search, $search_mode, $override_order = false, $offset = 0, $owner_uid = 0, $filter = false, $since_id = 0, $include_children = false, $ignore_vfeed_group = false) {
@@ -273,8 +269,6 @@ class Feeds extends Handler_Protected {
 			}
 		} */
 
-		global $pluginhost;
-
 		if ($this->dbh->num_rows($result) > 0) {
 
 			$lnum = $offset;
@@ -521,7 +515,7 @@ class Feeds extends Handler_Protected {
 					$line["content"] = sanitize($line["content_preview"],
 							sql_bool_to_bool($line['hide_images']), false, $entry_site_url);
 
-					foreach ($pluginhost->get_hooks($pluginhost::HOOK_RENDER_ARTICLE_CDM) as $p) {
+					foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_CDM) as $p) {
 						$line = $p->hook_render_article_cdm($line);
 					}
 
@@ -679,7 +673,7 @@ class Feeds extends Handler_Protected {
 
 					$reply['content'] .= "<div class=\"cdmFooter\">";
 
-					foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_LEFT_BUTTON) as $p) {
+					foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_LEFT_BUTTON) as $p) {
 						$reply['content'] .= $p->hook_article_left_button($line);
 					}
 
@@ -713,7 +707,7 @@ class Feeds extends Handler_Protected {
 //					$reply['content'] .= "$marked_pic";
 //					$reply['content'] .= "$published_pic";
 
-					foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_BUTTON) as $p) {
+					foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_BUTTON) as $p) {
 						$reply['content'] .= $p->hook_article_button($line);
 					}
 

+ 1 - 2
classes/handler/public.php

@@ -377,8 +377,7 @@ class Handler_Public extends Handler {
 
 		cleanup_tags(14, 50000);
 
-		global $pluginhost;
-		$pluginhost->run_hooks($pluginhost::HOOK_UPDATE_TASK, "hook_update_task", $op);
+		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK, "hook_update_task", $op);
 
 	}
 

+ 1 - 3
classes/pluginhandler.php

@@ -5,9 +5,7 @@ class PluginHandler extends Handler_Protected {
 	}
 
 	function catchall($method) {
-		global $pluginhost;
-
-		$plugin = $pluginhost->get_plugin($_REQUEST["plugin"]);
+		$plugin = PluginHost::getInstance()->get_plugin($_REQUEST["plugin"]);
 
 		if ($plugin) {
 			if (method_exists($plugin, $method)) {

+ 14 - 2
classes/pluginhost.php

@@ -10,6 +10,7 @@ class PluginHost {
 	private $api_methods = array();
 	private $owner_uid;
 	private $debug;
+	private static $instance;
 
 	const HOOK_ARTICLE_BUTTON = 1;
 	const HOOK_ARTICLE_FILTER = 2;
@@ -35,13 +36,24 @@ class PluginHost {
 	const KIND_SYSTEM = 2;
 	const KIND_USER = 3;
 
-	function __construct($dbh) {
-		$this->dbh = $dbh;
+	function __construct($ignored = false) {
+		$this->dbh = Db::get();
 		$this->storage = $_SESSION["plugin_storage"];
 
 		if (!$this->storage) $this->storage = array();
 	}
 
+	private function __clone() {
+		//
+	}
+
+	public static function getInstance() {
+		if (self::$instance == null)
+			self::$instance = new self();
+
+		return self::$instance;
+	}
+
 	private function register_plugin($name, $plugin) {
 		//array_push($this->plugins, $plugin);
 		$this->plugins[$name] = $plugin;

+ 4 - 10
classes/pref/feeds.php

@@ -124,9 +124,7 @@ class Pref_Feeds extends Handler_Protected {
 
 			/* Plugin feeds for -1 */
 
-			global $pluginhost;
-
-			$feeds = $pluginhost->get_feeds(-1);
+			$feeds = PluginHost::getInstance()->get_feeds(-1);
 
 			if ($feeds) {
 				foreach ($feeds as $feed) {
@@ -1456,8 +1454,7 @@ class Pref_Feeds extends Handler_Protected {
 		print "<button dojoType=\"dijit.form.Button\" onclick=\"return displayDlg('".__("Public OPML URL")."','pubOPMLUrl')\">".
 			__('Display published OPML URL')."</button> ";
 
-		global $pluginhost;
-		$pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB_SECTION,
+		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB_SECTION,
 			"hook_prefs_tab_section", "prefFeedsOPML");
 
 		print "</div>"; # pane
@@ -1503,15 +1500,12 @@ class Pref_Feeds extends Handler_Protected {
 		print "<button dojoType=\"dijit.form.Button\" onclick=\"return clearArticleAccessKeys()\">".
 			__('Unshare all articles')."</button> ";
 
-		global $pluginhost;
-		$pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB_SECTION,
+		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB_SECTION,
 			"hook_prefs_tab_section", "prefFeedsPublishedGenerated");
 
 		print "</div>"; #pane
 
-		global $pluginhost;
-
-		$pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB,
+		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB,
 			"hook_prefs_tab", "prefFeeds");
 
 		print "</div>"; #container

+ 1 - 2
classes/pref/filters.php

@@ -706,8 +706,7 @@ class Pref_Filters extends Handler_Protected {
 
 		print "</div>"; #pane
 
-		global $pluginhost;
-		$pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB,
+		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB,
 			"hook_prefs_tab", "prefFilters");
 
 		print "</div>"; #container

+ 1 - 2
classes/pref/labels.php

@@ -319,8 +319,7 @@ class Pref_Labels extends Handler_Protected {
 
 		print "</div>"; #pane
 
-		global $pluginhost;
-		$pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB,
+		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB,
 			"hook_prefs_tab", "prefLabels");
 
 		print "</div>"; #container

+ 9 - 20
classes/pref/prefs.php

@@ -79,8 +79,7 @@ class Pref_Prefs extends Handler_Protected {
 			return;
 		}
 
-		global $pluginhost;
-		$authenticator = $pluginhost->get_plugin($_SESSION["auth_module"]);
+		$authenticator = PluginHost::getInstance()->get_plugin($_SESSION["auth_module"]);
 
 		if (method_exists($authenticator, "change_password")) {
 			print $authenticator->change_password($_SESSION["uid"], $old_pw, $new_pw);
@@ -255,10 +254,7 @@ class Pref_Prefs extends Handler_Protected {
 		print "</form>";
 
 		if ($_SESSION["auth_module"]) {
-			global $pluginhost;
-
-			$authenticator = $pluginhost->get_plugin($_SESSION["auth_module"]);
-
+			$authenticator = PluginHost::getInstance()->get_plugin($_SESSION["auth_module"]);
 		} else {
 			$authenticator = false;
 		}
@@ -436,8 +432,7 @@ class Pref_Prefs extends Handler_Protected {
 			}
 		}
 
-		global $pluginhost;
-		$pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB_SECTION,
+		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB_SECTION,
 			"hook_prefs_tab_section", "prefPrefsAuth");
 
 		print "</div>"; #pane
@@ -675,8 +670,7 @@ class Pref_Prefs extends Handler_Protected {
 
 		print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"boolean_prefs\" value=\"$listed_boolean_prefs\">";
 
-		global $pluginhost;
-		$pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB_SECTION,
+		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB_SECTION,
 			"hook_prefs_tab_section", "prefPrefsPrefsInside");
 
 		print '</div>'; # inside pane
@@ -712,8 +706,7 @@ class Pref_Prefs extends Handler_Protected {
 				<label for='prefs_show_advanced'>" .
 				__("Show additional preferences") . "</label>"; */
 
-		global $pluginhost;
-		$pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB_SECTION,
+		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB_SECTION,
 			"hook_prefs_tab_section", "prefPrefsPrefsOutside");
 
 		print "</form>";
@@ -877,8 +870,7 @@ class Pref_Prefs extends Handler_Protected {
 
 		print "</div>"; #pane
 
-		global $pluginhost;
-		$pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB,
+		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB,
 			"hook_prefs_tab", "prefPrefs");
 
 		print "</div>"; #container
@@ -918,8 +910,7 @@ class Pref_Prefs extends Handler_Protected {
 		$password = $_REQUEST["password"];
 		$otp = $_REQUEST["otp"];
 
-		global $pluginhost;
-		$authenticator = $pluginhost->get_plugin($_SESSION["auth_module"]);
+		$authenticator = PluginHost::getInstance()->get_plugin($_SESSION["auth_module"]);
 
 		if ($authenticator->check_password($_SESSION["uid"], $password)) {
 
@@ -951,8 +942,7 @@ class Pref_Prefs extends Handler_Protected {
 	function otpdisable() {
 		$password = $this->dbh->escape_string($_REQUEST["password"]);
 
-		global $pluginhost;
-		$authenticator = $pluginhost->get_plugin($_SESSION["auth_module"]);
+		$authenticator = PluginHost::getInstance()->get_plugin($_SESSION["auth_module"]);
 
 		if ($authenticator->check_password($_SESSION["uid"], $password)) {
 
@@ -978,8 +968,7 @@ class Pref_Prefs extends Handler_Protected {
 	function clearplugindata() {
 		$name = $this->dbh->escape_string($_REQUEST["name"]);
 
-		global $pluginhost;
-		$pluginhost->clear_data($pluginhost->get_plugin($name));
+		PluginHost::getInstance()->clear_data(PluginHost::getInstance()->get_plugin($name));
 	}
 
 	function customizeCSS() {

+ 1 - 2
classes/pref/system.php

@@ -66,8 +66,7 @@ class Pref_System extends Handler_Protected {
 
 		print "</div>";
 
-		global $pluginhost;
-		$pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB,
+		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB,
 			"hook_prefs_tab", "prefSystem");
 
 		print "</div>"; #container

+ 1 - 2
classes/pref/users.php

@@ -453,8 +453,7 @@ class Pref_Users extends Handler_Protected {
 
 			print "</div>"; #pane
 
-			global $pluginhost;
-			$pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB,
+			PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB,
 				"hook_prefs_tab", "prefUsers");
 
 			print "</div>"; #container

+ 22 - 43
include/functions.php

@@ -9,7 +9,6 @@
 	$fetch_last_error_code = false;
 	$fetch_last_content_type = false;
 	$fetch_curl_used = false;
-	$pluginhost = false;
 
 	mb_internal_encoding("UTF-8");
 	date_default_timezone_set('UTC');
@@ -622,8 +621,7 @@
 		if (!SINGLE_USER_MODE) {
 			$user_id = false;
 
-			global $pluginhost;
-			foreach ($pluginhost->get_hooks($pluginhost::HOOK_AUTH_USER) as $plugin) {
+			foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_AUTH_USER) as $plugin) {
 
 				$user_id = (int) $plugin->authenticate($login, $password);
 
@@ -734,11 +732,10 @@
 		if ($owner_uid) {
 			$plugins = get_pref("_ENABLED_PLUGINS", $owner_uid);
 
-			global $pluginhost;
-			$pluginhost->load($plugins, $pluginhost::KIND_USER, $owner_uid);
+			PluginHost::getInstance()->load($plugins, PluginHost::KIND_USER, $owner_uid);
 
 			if (get_schema_version() > 100) {
-				$pluginhost->load_data();
+				PluginHost::getInstance()->load_data();
 			}
 		}
 	}
@@ -1443,18 +1440,13 @@
 			array_push($ret_arr, $cv);
 		}
 
-		global $pluginhost;
-
-		if ($pluginhost) {
-			$feeds = $pluginhost->get_feeds(-1);
-
-			if (is_array($feeds)) {
-				foreach ($feeds as $feed) {
-					$cv = array("id" => PluginHost::pfeed_to_feed_id($feed['id']),
-						"counter" => $feed['sender']->get_unread($feed['id']));
+		$feeds = PluginHost::getInstance()->get_feeds(-1);
 
+		if (is_array($feeds)) {
+			foreach ($feeds as $feed) {
+				$cv = array("id" => PluginHost::pfeed_to_feed_id($feed['id']),
+					"counter" => $feed['sender']->get_unread($feed['id']));
 					array_push($ret_arr, $cv);
-				}
 			}
 		}
 
@@ -1982,8 +1974,7 @@
 				"help_dialog" => __("Show help dialog"))
 			);
 
-		global $pluginhost;
-		foreach ($pluginhost->get_hooks($pluginhost::HOOK_HOTKEY_INFO) as $plugin) {
+		foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_HOTKEY_INFO) as $plugin) {
 			$hotkeys = $plugin->hook_hotkey_info($hotkeys);
 		}
 
@@ -2059,8 +2050,7 @@
 			$hotkeys["^(40)|Ctrl-down"] = "next_article_noscroll";
 		}
 
-		global $pluginhost;
-		foreach ($pluginhost->get_hooks($pluginhost::HOOK_HOTKEY_MAP) as $plugin) {
+		foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_HOTKEY_MAP) as $plugin) {
 			$hotkeys = $plugin->hook_hotkey_map($hotkeys);
 		}
 
@@ -2753,18 +2743,14 @@
 
 		$disallowed_attributes = array('id', 'style', 'class');
 
-		global $pluginhost;
-
-		if (isset($pluginhost)) {
-			foreach ($pluginhost->get_hooks($pluginhost::HOOK_SANITIZE) as $plugin) {
-				$retval = $plugin->hook_sanitize($doc, $site_url, $allowed_elements, $disallowed_attributes);
-				if (is_array($retval)) {
-					$doc = $retval[0];
-					$allowed_elements = $retval[1];
-					$disallowed_attributes = $retval[2];
-				} else {
-					$doc = $retval;
-				}
+		foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_SANITIZE) as $plugin) {
+			$retval = $plugin->hook_sanitize($doc, $site_url, $allowed_elements, $disallowed_attributes);
+			if (is_array($retval)) {
+				$doc = $retval[0];
+				$allowed_elements = $retval[1];
+				$disallowed_attributes = $retval[2];
+			} else {
+				$doc = $retval;
 			}
 		}
 
@@ -3065,9 +3051,7 @@
 
 			$line["content"] = sanitize($line["content"], false, $owner_uid,	$line["site_url"]);
 
-			global $pluginhost;
-
-			foreach ($pluginhost->get_hooks($pluginhost::HOOK_RENDER_ARTICLE) as $p) {
+			foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE) as $p) {
 				$line = $p->hook_render_article($line);
 			}
 
@@ -3142,8 +3126,7 @@
 					id=\"ATSTRTIP-$id\" connectId=\"ATSTR-$id\"
 					position=\"below\">$tags_str_full</div>";
 
-				global $pluginhost;
-				foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_BUTTON) as $p) {
+				foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_BUTTON) as $p) {
 					$rv['content'] .= $p->hook_article_button($line);
 				}
 
@@ -3154,8 +3137,7 @@
 			$rv['content'] .= "</div>";
 			$rv['content'] .= "<div clear='both'>";
 
-			global $pluginhost;
-			foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_LEFT_BUTTON) as $p) {
+			foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_LEFT_BUTTON) as $p) {
 				$rv['content'] .= $p->hook_article_left_button($line);
 			}
 
@@ -3361,10 +3343,7 @@
 	}
 
 	function init_plugins() {
-		global $pluginhost;
-
-		$pluginhost = new PluginHost(Db::get());
-		$pluginhost->load(PLUGINS, $pluginhost::KIND_ALL);
+		PluginHost::getInstance()->load(PLUGINS, PluginHost::KIND_ALL);
 
 		return true;
 	}

+ 6 - 6
include/rssfuncs.php

@@ -343,15 +343,15 @@
 			}
 		}
 
-		$pluginhost = new PluginHost(Db::get());
+		$pluginhost = new PluginHost();
 		$pluginhost->set_debug($debug_enabled);
 		$user_plugins = get_pref("_ENABLED_PLUGINS", $owner_uid);
 
-		$pluginhost->load(PLUGINS, $pluginhost::KIND_ALL);
-		$pluginhost->load($user_plugins, $pluginhost::KIND_USER, $owner_uid);
+		$pluginhost->load(PLUGINS, PluginHost::KIND_ALL);
+		$pluginhost->load($user_plugins, PluginHost::KIND_USER, $owner_uid);
 		$pluginhost->load_data();
 
-		foreach ($pluginhost->get_hooks($pluginhost::HOOK_FEED_FETCHED) as $plugin) {
+		foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_FETCHED) as $plugin) {
 			$feed_data = $plugin->hook_feed_fetched($feed_data);
 		}
 
@@ -388,7 +388,7 @@
 			}
 
 			// We use local pluginhost here because we need to load different per-user feed plugins
-			$pluginhost->run_hooks($pluginhost::HOOK_FEED_PARSED, "hook_feed_parsed", $rss);
+			$pluginhost->run_hooks(PluginHost::HOOK_FEED_PARSED, "hook_feed_parsed", $rss);
 
 			if ($debug_enabled) {
 				_debug("update_rss_feed: processing feed data...");
@@ -673,7 +673,7 @@
 					"author" => $entry_author,
 					"stored" => $stored_article);
 
-				foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_FILTER) as $plugin) {
+				foreach ($pluginhost->get_hooks(PluginHost::HOOK_ARTICLE_FILTER) as $plugin) {
 					$article = $plugin->hook_article_filter($article);
 				}
 

+ 8 - 17
index.php

@@ -32,16 +32,14 @@
 
 	if (!init_plugins()) return;
 
-	global $pluginhost;
-
 	if (!$_REQUEST['mobile']) {
-		if ($mobile->isTablet() && $pluginhost->get_plugin("digest")) {
+		if ($mobile->isTablet() && PluginHost::getInstance()->get_plugin("digest")) {
 			header('Location: backend.php?op=digest');
 			exit;
-		} else if ($mobile->isMobile() && $pluginhost->get_plugin("mobile")) {
+		} else if ($mobile->isMobile() && PluginHost::getInstance()->get_plugin("mobile")) {
 			header('Location: backend.php?op=mobile');
 			exit;
-		} else if ($mobile->isMobile() && $pluginhost->get_plugin("digest")) {
+		} else if ($mobile->isMobile() && PluginHost::getInstance()->get_plugin("digest")) {
 			header('Location: backend.php?op=digest');
 			exit;
 		}
@@ -74,7 +72,7 @@
 
 	<style type="text/css">
 	<?php
-		foreach ($pluginhost->get_plugins() as $n => $p) {
+		foreach (PluginHost::getInstance()->get_plugins() as $n => $p) {
 			if (method_exists($p, "get_css")) {
 				echo $p->get_css();
 			}
@@ -104,9 +102,7 @@
 		print get_minified_js(array("tt-rss",
 			"functions", "feedlist", "viewfeed", "FeedTree"));
 
-		global $pluginhost;
-
-		foreach ($pluginhost->get_plugins() as $n => $p) {
+		foreach (PluginHost::getInstance()->get_plugins() as $n => $p) {
 			if (method_exists($p, "get_js")) {
 				echo JShrink\Minifier::minify($p->get_js());
 			}
@@ -205,8 +201,7 @@
 		<div class="actionChooser">
 
 			<?php
-				global $pluginhost;
-				foreach ($pluginhost->get_hooks($pluginhost::HOOK_TOOLBAR_BUTTON) as $p) {
+				foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_TOOLBAR_BUTTON) as $p) {
 					 echo $p->hook_toolbar_button();
 				}
 			?>
@@ -238,18 +233,14 @@
 					<div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcCatchupAll')"><?php echo __('Mark as read') ?></div>
 					<div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcShowOnlyUnread')"><?php echo __('(Un)hide read feeds') ?></div>
 					<div dojoType="dijit.MenuItem" disabled="1"><?php echo __('Other actions:') ?></div>
-					<!-- <?php if ($pluginhost->get_plugin("digest")) { ?>
-					<div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcDigest')"><?php echo __('Switch to digest...') ?></div>
-					<?php } ?> -->
-						<!-- <div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcTagCloud')"><?php echo __('Show tag cloud...') ?></div> -->
-						<div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcToggleWidescreen')"><?php echo __('Toggle widescreen mode') ?></div>
+					<div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcToggleWidescreen')"><?php echo __('Toggle widescreen mode') ?></div>
 					<div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcTagSelect')"><?php echo __('Select by tags...') ?></div>
 					<!-- <div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcAddLabel')"><?php echo __('Create label...') ?></div>
 					<div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcAddFilter')"><?php echo __('Create filter...') ?></div> -->
 					<div dojoType="dijit.MenuItem" onclick="quickMenuGo('qmcHKhelp')"><?php echo __('Keyboard shortcuts help') ?></div>
 
 					<?php
-						foreach ($pluginhost->get_hooks($pluginhost::HOOK_ACTION_ITEM) as $p) {
+						foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ACTION_ITEM) as $p) {
 						 echo $p->hook_action_item();
 						}
 					?>

+ 1 - 2
plugins/instances/init.php

@@ -351,8 +351,7 @@ class Instances extends Plugin implements IHandler {
 
 		print "</div>"; #pane
 
-		global $pluginhost;
-		$pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB,
+		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB,
 			"hook_prefs_tab", "prefInstances");
 
 		print "</div>"; #container

+ 2 - 4
prefs.php

@@ -66,9 +66,7 @@
 	<?php
 		require 'lib/jshrink/Minifier.php';
 
-		global $pluginhost;
-
-		foreach ($pluginhost->get_plugins() as $n => $p) {
+		foreach (PluginHost::getInstance()->get_plugins() as $n => $p) {
 			if (method_exists($p, "get_prefs_js")) {
 				echo JShrink\Minifier::minify($p->get_prefs_js());
 			}
@@ -134,7 +132,7 @@
 		title="<?php echo __('System') ?>"></div>
 <?php } ?>
 <?php
-	$pluginhost->run_hooks($pluginhost::HOOK_PREFS_TABS,
+	PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TABS,
 		"hook_prefs_tabs", false);
 ?>
 </div>

+ 1 - 2
public.php

@@ -37,8 +37,7 @@
 
 	$method = $_REQUEST["op"];
 
-	global $pluginhost;
-	$override = $pluginhost->lookup_handler("public", $method);
+	$override = PluginHost::getInstance()->lookup_handler("public", $method);
 
 	if ($override) {
 		$handler = $override;

+ 5 - 7
update.php

@@ -36,7 +36,7 @@
 			"list-plugins",
 			"help");
 
-	foreach ($pluginhost->get_commands() as $command => $data) {
+	foreach (PluginHost::getInstance()->get_commands() as $command => $data) {
 		array_push($longopts, $command . $data["suffix"]);
 	}
 
@@ -79,7 +79,7 @@
 		print "  --help               - show this help\n";
 		print "Plugin options:\n";
 
-		foreach ($pluginhost->get_commands() as $command => $data) {
+		foreach (PluginHost::getInstance()->get_commands() as $command => $data) {
 			$args = $data['arghelp'];
 			printf(" --%-19s - %s\n", "$command $args", $data["description"]);
 		}
@@ -161,8 +161,7 @@
 		$rc = cleanup_tags( 14, 50000);
 		_debug("Cleaned $rc cached tags.");
 
-		global $pluginhost;
-		$pluginhost->run_hooks($pluginhost::HOOK_UPDATE_TASK, "hook_update_task", $op);
+		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK, "hook_update_task", $op);
 	}
 
 	if (isset($options["feedbrowser"])) {
@@ -200,8 +199,7 @@
 
 			_debug("Cleaned $rc cached tags.");
 
-			global $pluginhost;
-			$pluginhost->run_hooks($pluginhost::HOOK_UPDATE_TASK, "hook_update_task", $op);
+			PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK, "hook_update_task", $op);
 		}
 
 	}
@@ -368,7 +366,7 @@
 
 	}
 
-	$pluginhost->run_commands($options);
+	PluginHost::getInstance()->run_commands($options);
 
 	if ($lock_handle != false) {
 		fclose($lock_handle);