Browse Source

implement plugin API version compatibility check

Andrew Dolgov 7 years ago
parent
commit
ddf28801e4
2 changed files with 15 additions and 0 deletions
  1. 6 0
      classes/plugin.php
  2. 9 0
      classes/pluginhost.php

+ 6 - 0
classes/plugin.php

@@ -3,6 +3,8 @@ class Plugin {
 	private $dbh;
 	private $host;
 
+	const API_VERSION_COMPAT = 1;
+
 	function init($host) {
 		$this->dbh = $host->get_dbh();
 		$this->host = $host;
@@ -20,5 +22,9 @@ class Plugin {
 	function get_prefs_js() {
 		return "";
 	}
+
+	function api_version() {
+		return Plugin::API_VERSION_COMPAT;
+	}
 }
 ?>

+ 9 - 0
classes/pluginhost.php

@@ -13,6 +13,8 @@ class PluginHost {
 	private $last_registered;
 	private static $instance;
 
+	const API_VERSION = 1;
+
 	const HOOK_ARTICLE_BUTTON = 1;
 	const HOOK_ARTICLE_FILTER = 2;
 	const HOOK_PREFS_TAB = 3;
@@ -137,6 +139,13 @@ class PluginHost {
 				if (class_exists($class) && is_subclass_of($class, "Plugin")) {
 					$plugin = new $class($this);
 
+					$plugin_api = $plugin->api_version();
+
+					if ($plugin_api < PluginHost::API_VERSION) {
+						user_error("Plugin $class is not compatible with current API version (need: " . PluginHost::API_VERSION . ", got: $plugin_api)", E_USER_WARNING);
+						continue;
+					}
+
 					$this->last_registered = $class;
 
 					switch ($kind) {