diff options
Diffstat (limited to 'classes/pluginhost.php')
-rwxr-xr-x | classes/pluginhost.php | 75 |
1 files changed, 42 insertions, 33 deletions
diff --git a/classes/pluginhost.php b/classes/pluginhost.php index b6f645a9c..17d1e0c5f 100755 --- a/classes/pluginhost.php +++ b/classes/pluginhost.php @@ -61,7 +61,7 @@ class PluginHost { const HOOK_FEED_BASIC_INFO = "hook_feed_basic_info"; // hook_feed_basic_info($basic_info, $fetch_url, $owner_uid, $feed_id, $auth_login, $auth_pass) (byref) const HOOK_SEND_LOCAL_FILE = "hook_send_local_file"; // hook_send_local_file($filename) const HOOK_UNSUBSCRIBE_FEED = "hook_unsubscribe_feed"; // hook_unsubscribe_feed($feed_id, $owner_uid) - const HOOK_SEND_MAIL = "hook_send_mail"; // hook_send_mail($mailer, $params) + const HOOK_SEND_MAIL = "hook_send_mail"; // hook_send_mail(Mailer $mailer, $params) const HOOK_FILTER_TRIGGERED = "hook_filter_triggered"; // hook_filter_triggered($feed_id, $owner_uid, $article, $matched_filters, $matched_rules, $article_filters) const HOOK_GET_FULL_TEXT = "hook_get_full_text"; // hook_get_full_text($url) const HOOK_ARTICLE_IMAGE = "hook_article_image"; // hook_article_image($enclosures, $content, $site_url) @@ -274,16 +274,14 @@ class PluginHost { $class = trim($class); $class_file = strtolower(basename(clean($class))); - if (!is_dir(__DIR__ . "/../plugins/$class_file") && - !is_dir(__DIR__ . "/../plugins.local/$class_file")) continue; - // try system plugin directory first - $file = __DIR__ . "/../plugins/$class_file/init.php"; - $vendor_dir = __DIR__ . "/../plugins/$class_file/vendor"; + $file = dirname(__DIR__) . "/plugins/$class_file/init.php"; if (!file_exists($file)) { - $file = __DIR__ . "/../plugins.local/$class_file/init.php"; - $vendor_dir = __DIR__ . "/../plugins.local/$class_file/vendor"; + $file = dirname(__DIR__) . "/plugins.local/$class_file/init.php"; + + if (!file_exists($file)) + continue; } if (!isset($this->plugins[$class])) { @@ -296,27 +294,7 @@ class PluginHost { if (class_exists($class) && is_subclass_of($class, "Plugin")) { - // register plugin autoloader if necessary, for namespaced classes ONLY - // layout corresponds to tt-rss main /vendor/author/Package/Class.php - - if (file_exists($vendor_dir)) { - spl_autoload_register(function($class) use ($vendor_dir) { - - if (strpos($class, '\\') !== false) { - list ($namespace, $class_name) = explode('\\', $class, 2); - - if ($namespace && $class_name) { - $class_file = "$vendor_dir/$namespace/" . str_replace('\\', '/', $class_name) . ".php"; - - if (file_exists($class_file)) - require_once $class_file; - } - } - }); - } - $plugin = new $class($this); - $plugin_api = $plugin->api_version(); if ($plugin_api < self::API_VERSION) { @@ -491,7 +469,7 @@ class PluginHost { } } - function set(Plugin $sender, string $name, $value, bool $sync = true) { + function set(Plugin $sender, string $name, $value) { $idx = get_class($sender); if (!isset($this->storage[$idx])) @@ -499,7 +477,19 @@ class PluginHost { $this->storage[$idx][$name] = $value; - if ($sync) $this->save_data(get_class($sender)); + $this->save_data(get_class($sender)); + } + + function set_array(Plugin $sender, array $params) { + $idx = get_class($sender); + + if (!isset($this->storage[$idx])) + $this->storage[$idx] = array(); + + foreach ($params as $name => $value) + $this->storage[$idx][$name] = $value; + + $this->save_data(get_class($sender)); } function get(Plugin $sender, string $name, $default_value = false) { @@ -514,6 +504,14 @@ class PluginHost { } } + function get_array(Plugin $sender, string $name, array $default_value = []) { + $tmp = $this->get($sender, $name); + + if (!is_array($tmp)) $tmp = $default_value; + + return $tmp; + } + function get_all($sender) { $idx = get_class($sender); @@ -601,7 +599,7 @@ class PluginHost { // handled by classes/pluginhandler.php, requires valid session function get_method_url(Plugin $sender, string $method, $params = []) { - return get_self_url_prefix() . "/backend.php?" . + return Config::get_self_url() . "/backend.php?" . http_build_query( array_merge( [ @@ -614,7 +612,7 @@ class PluginHost { // shortcut syntax (disabled for now) /* function get_method_url(Plugin $sender, string $method, $params) { - return get_self_url_prefix() . "/backend.php?" . + return Config::get_self_url() . "/backend.php?" . http_build_query( array_merge( [ @@ -626,7 +624,7 @@ class PluginHost { // WARNING: endpoint in public.php, exposed to unauthenticated users function get_public_method_url(Plugin $sender, string $method, $params = []) { if ($sender->is_public_method($method)) { - return get_self_url_prefix() . "/public.php?" . + return Config::get_self_url() . "/public.php?" . http_build_query( array_merge( [ @@ -637,4 +635,15 @@ class PluginHost { user_error("get_public_method_url: requested method '$method' of '" . get_class($sender) . "' is private."); } } + + function get_plugin_dir(Plugin $plugin) { + $ref = new ReflectionClass(get_class($plugin)); + return dirname($ref->getFileName()); + } + + // TODO: use get_plugin_dir() + function is_local(Plugin $plugin) { + $ref = new ReflectionClass(get_class($plugin)); + return basename(dirname(dirname($ref->getFileName()))) == "plugins.local"; + } } |