summaryrefslogtreecommitdiff
path: root/classes/pluginhost.php
diff options
context:
space:
mode:
Diffstat (limited to 'classes/pluginhost.php')
-rwxr-xr-xclasses/pluginhost.php75
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";
+ }
}