diff options
-rw-r--r-- | backend.php | 2 | ||||
-rw-r--r-- | classes/article.php | 2 | ||||
-rw-r--r-- | classes/auth/base.php (renamed from classes/auth_base.php) | 0 | ||||
-rw-r--r-- | classes/auth/internal.php (renamed from classes/auth_internal.php) | 0 | ||||
-rw-r--r-- | classes/auth/remote.php (renamed from classes/auth_remote.php) | 0 | ||||
-rw-r--r-- | classes/button.php (renamed from classes/plugin_button.php) | 2 | ||||
-rw-r--r-- | classes/button/mail.php (renamed from classes/mail_button.php) | 2 | ||||
-rw-r--r-- | classes/button/note.php (renamed from classes/note_button.php) | 2 | ||||
-rw-r--r-- | classes/button/share.php (renamed from classes/share_button.php) | 2 | ||||
-rw-r--r-- | classes/button/tweet.php (renamed from classes/tweet_button.php) | 2 | ||||
-rw-r--r-- | classes/feeds.php | 18 | ||||
-rw-r--r-- | classes/handler/protected.php (renamed from classes/protected_handler.php) | 2 | ||||
-rw-r--r-- | classes/handler/public.php (renamed from classes/public_handler.php) | 2 | ||||
-rw-r--r-- | classes/opml.php | 2 | ||||
-rw-r--r-- | classes/plugin.php | 21 | ||||
-rw-r--r-- | classes/plugin/example.php | 11 | ||||
-rw-r--r-- | classes/plugins.php | 44 | ||||
-rw-r--r-- | classes/pref/feeds.php (renamed from classes/pref_feeds.php) | 2 | ||||
-rw-r--r-- | classes/pref/filters.php (renamed from classes/pref_filters.php) | 2 | ||||
-rw-r--r-- | classes/pref/instances.php (renamed from classes/pref_instances.php) | 2 | ||||
-rw-r--r-- | classes/pref/labels.php (renamed from classes/pref_labels.php) | 2 | ||||
-rw-r--r-- | classes/pref/prefs.php (renamed from classes/pref_prefs.php) | 2 | ||||
-rw-r--r-- | classes/pref/users.php (renamed from classes/pref_users.php) | 2 | ||||
-rw-r--r-- | classes/rpc.php | 4 | ||||
-rw-r--r-- | include/functions.php | 12 | ||||
-rw-r--r-- | include/rssfuncs.php | 5 | ||||
-rw-r--r-- | public.php | 2 | ||||
-rwxr-xr-x | update.php | 2 | ||||
-rwxr-xr-x | update_daemon2.php | 2 |
29 files changed, 131 insertions, 22 deletions
diff --git a/backend.php b/backend.php index 13568d165..b0ef5e0f1 100644 --- a/backend.php +++ b/backend.php @@ -77,6 +77,8 @@ return; } + $plugins = new Plugins($link); + $purge_intervals = array( 0 => __("Use default"), -1 => __("Never purge"), diff --git a/classes/article.php b/classes/article.php index 30f0c7d10..16619c9ad 100644 --- a/classes/article.php +++ b/classes/article.php @@ -1,5 +1,5 @@ <?php
-class Article extends Protected_Handler {
+class Article extends Handler_Protected {
function csrf_ignore($method) {
$csrf_ignored = array("redirect");
diff --git a/classes/auth_base.php b/classes/auth/base.php index 7c37967af..7c37967af 100644 --- a/classes/auth_base.php +++ b/classes/auth/base.php diff --git a/classes/auth_internal.php b/classes/auth/internal.php index 8890d4455..8890d4455 100644 --- a/classes/auth_internal.php +++ b/classes/auth/internal.php diff --git a/classes/auth_remote.php b/classes/auth/remote.php index 6892a3528..6892a3528 100644 --- a/classes/auth_remote.php +++ b/classes/auth/remote.php diff --git a/classes/plugin_button.php b/classes/button.php index 6cb8ec1b9..24d576dae 100644 --- a/classes/plugin_button.php +++ b/classes/button.php @@ -1,5 +1,5 @@ <?php -class Plugin_Button { +class Button { protected $link; diff --git a/classes/mail_button.php b/classes/button/mail.php index b299ccef8..309493bbe 100644 --- a/classes/mail_button.php +++ b/classes/button/mail.php @@ -1,5 +1,5 @@ <?php -class Mail_Button extends Plugin_Button { +class Button_Mail extends Button { function render($article_id) { return "<img src=\"".theme_image($link, 'images/art-email.png')."\" class='tagsPic' style=\"cursor : pointer\" diff --git a/classes/note_button.php b/classes/button/note.php index 794f17734..d5b6e380c 100644 --- a/classes/note_button.php +++ b/classes/button/note.php @@ -1,5 +1,5 @@ <?php -class Note_Button extends Plugin_Button { +class Button_Note extends Button { function render($article_id) { return "<img src=\"".theme_image($this->link, "images/art-pub-note.png")."\" style=\"cursor : pointer\" style=\"cursor : pointer\" diff --git a/classes/share_button.php b/classes/button/share.php index 9402eddb6..74d7128d9 100644 --- a/classes/share_button.php +++ b/classes/button/share.php @@ -1,5 +1,5 @@ <?php -class Share_Button extends Plugin_Button { +class Button_Share extends Button { function render($article_id, $line) { return "<img src=\"".theme_image($this->link, 'images/art-share.png')."\" class='tagsPic' style=\"cursor : pointer\" diff --git a/classes/tweet_button.php b/classes/button/tweet.php index 470bc63a1..3157fb779 100644 --- a/classes/tweet_button.php +++ b/classes/button/tweet.php @@ -1,5 +1,5 @@ <?php -class Tweet_Button extends Plugin_Button { +class Button_Tweet extends Button { function render($article_id) { $rv = "<img src=\"".theme_image($this->link, 'images/art-tweet.png')."\" class='tagsPic' style=\"cursor : pointer\" diff --git a/classes/feeds.php b/classes/feeds.php index a3062565a..7598b0af8 100644 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -1,5 +1,5 @@ <?php
-class Feeds extends Protected_Handler {
+class Feeds extends Handler_Protected {
function csrf_ignore($method) {
$csrf_ignored = array("index");
@@ -121,6 +121,8 @@ class Feeds extends Protected_Handler { $next_unread_feed, $offset, $vgr_last_feed = false,
$override_order = false, $include_children = false) {
+ global $plugins;
+
$disable_cache = false;
$reply = array();
@@ -220,10 +222,12 @@ class Feeds extends Protected_Handler { $headlines_count = db_num_rows($result);
+ $plugins->hook('headlines_before', $reply);
+
if (get_pref($this->link, 'COMBINED_DISPLAY_MODE')) {
$button_plugins = array();
foreach (explode(",", ARTICLE_BUTTON_PLUGINS) as $p) {
- $pclass = trim("${p}_button");
+ $pclass = trim("button_${p}");
if (class_exists($pclass)) {
$plugin = new $pclass($link);
@@ -245,6 +249,12 @@ class Feeds extends Protected_Handler { while ($line = db_fetch_assoc($result)) {
+ if (get_pref($this->link, 'COMBINED_DISPLAY_MODE')) {
+ $plugins->hook('cdm_article_before', $line);
+ } else {
+ $plugins->hook('headlines_row', $line);
+ }
+
$class = ($lnum % 2) ? "even" : "odd";
$id = $line["id"];
@@ -673,11 +683,15 @@ class Feeds extends Protected_Handler { $reply['content'] .= "</div>";
+ $plugins->hook('cdm_article_after', $reply['content']);
+
}
++$lnum;
}
+ $plugins->hook('headlines_after', $reply);
+
if ($_REQUEST["debug"]) $timing_info = print_checkpoint("PE", $timing_info);
} else {
diff --git a/classes/protected_handler.php b/classes/handler/protected.php index 5d8d690c3..4ce86534d 100644 --- a/classes/protected_handler.php +++ b/classes/handler/protected.php @@ -1,5 +1,5 @@ <?php -class Protected_Handler extends Handler { +class Handler_Protected extends Handler { function before($method) { return parent::before($method) && $_SESSION['uid']; diff --git a/classes/public_handler.php b/classes/handler/public.php index 5b7b523b9..983f0aaa9 100644 --- a/classes/public_handler.php +++ b/classes/handler/public.php @@ -1,5 +1,5 @@ <?php -class Public_Handler extends Handler { +class Handler_Public extends Handler { private function generate_syndicated_feed($owner_uid, $feed, $is_cat, $limit, $search, $search_mode, $match_on, $view_mode = false) { diff --git a/classes/opml.php b/classes/opml.php index af597caf4..8683fb73a 100644 --- a/classes/opml.php +++ b/classes/opml.php @@ -1,5 +1,5 @@ <?php -class Opml extends Protected_Handler { +class Opml extends Handler_Protected { function csrf_ignore($method) { $csrf_ignored = array("export", "import"); diff --git a/classes/plugin.php b/classes/plugin.php new file mode 100644 index 000000000..b96874a20 --- /dev/null +++ b/classes/plugin.php @@ -0,0 +1,21 @@ +<?php +class Plugin { + protected $link; + protected $handler; + + function __construct($link, $handler) { + $this->link = $link; + $this->handler = $handler; + $this->initialize(); + } + + function initialize() { + + + } + + function add_listener($hook) { + $this->handler->add_listener($hook, $this); + } +} +?> diff --git a/classes/plugin/example.php b/classes/plugin/example.php new file mode 100644 index 000000000..e10781aa0 --- /dev/null +++ b/classes/plugin/example.php @@ -0,0 +1,11 @@ +<? + class Plugin_Example extends Plugin { + function initialize() { + $this->add_listener('article_before'); + } + + function article_before(&$line) { + $line["title"] = "EXAMPLE/REPLACED:" . $line["title"]; + } + } +?> diff --git a/classes/plugins.php b/classes/plugins.php new file mode 100644 index 000000000..6f3720ca9 --- /dev/null +++ b/classes/plugins.php @@ -0,0 +1,44 @@ +<?php +class Plugins { + protected $link; + protected $plugins; + protected $listeners; + + function __construct($link) { + $this->link = $link; + $this->listeners = array(); + $this->load_plugins(); + } + + function load_plugins() { + if (defined('_ENABLE_PLUGINS')) { + $plugins = explode(",", _ENABLE_PLUGINS); + + foreach ($plugins as $p) { + $plugin_class = "plugin_$p"; + if (class_exists($plugin_class)) { + $plugin = new $plugin_class($this->link, $this); + } + } + } + } + + function add_listener($hook_name, $plugin) { + if (!is_array($this->listeners[$hook_name])) + $this->listeners[$hook_name] = array(); + + array_push($this->listeners[$hook_name], $plugin); + } + + function hook($hook_name, &$params) { + if (is_array($this->listeners[$hook_name])) { + foreach ($this->listeners[$hook_name] as $p) { + if (method_exists($p, $hook_name)) { + $p->$hook_name($params); + } + } + } + } + +} +?> diff --git a/classes/pref_feeds.php b/classes/pref/feeds.php index b10561195..5899115b4 100644 --- a/classes/pref_feeds.php +++ b/classes/pref/feeds.php @@ -1,5 +1,5 @@ <?php -class Pref_Feeds extends Protected_Handler { +class Pref_Feeds extends Handler_Protected { function csrf_ignore($method) { $csrf_ignored = array("index", "getfeedtree", "add", "editcats", "editfeed", diff --git a/classes/pref_filters.php b/classes/pref/filters.php index ea99d56e3..9cd59e96f 100644 --- a/classes/pref_filters.php +++ b/classes/pref/filters.php @@ -1,5 +1,5 @@ <?php -class Pref_Filters extends Protected_Handler { +class Pref_Filters extends Handler_Protected { function csrf_ignore($method) { $csrf_ignored = array("index", "getfiltertree", "edit"); diff --git a/classes/pref_instances.php b/classes/pref/instances.php index fec95780a..c017ee9d2 100644 --- a/classes/pref_instances.php +++ b/classes/pref/instances.php @@ -1,5 +1,5 @@ <?php -class Pref_Instances extends Protected_Handler { +class Pref_Instances extends Handler_Protected { function csrf_ignore($method) { $csrf_ignored = array("index", "edit"); diff --git a/classes/pref_labels.php b/classes/pref/labels.php index 951ae45ed..317f92738 100644 --- a/classes/pref_labels.php +++ b/classes/pref/labels.php @@ -1,5 +1,5 @@ <?php -class Pref_Labels extends Protected_Handler { +class Pref_Labels extends Handler_Protected { function csrf_ignore($method) { $csrf_ignored = array("index", "getlabeltree", "edit"); diff --git a/classes/pref_prefs.php b/classes/pref/prefs.php index 60d241103..ff8a17cdb 100644 --- a/classes/pref_prefs.php +++ b/classes/pref/prefs.php @@ -1,5 +1,5 @@ <?php -class Pref_Prefs extends Protected_Handler { +class Pref_Prefs extends Handler_Protected { function csrf_ignore($method) { $csrf_ignored = array("index"); diff --git a/classes/pref_users.php b/classes/pref/users.php index 8f8f819f3..e54f899d7 100644 --- a/classes/pref_users.php +++ b/classes/pref/users.php @@ -1,5 +1,5 @@ <?php -class Pref_Users extends Protected_Handler { +class Pref_Users extends Handler_Protected { function before($method) { if (parent::before($method)) { if ($_SESSION["access_level"] < 10) { diff --git a/classes/rpc.php b/classes/rpc.php index bf693d2a2..d9caae4db 100644 --- a/classes/rpc.php +++ b/classes/rpc.php @@ -1,5 +1,5 @@ <?php -class RPC extends Protected_Handler { +class RPC extends Handler_Protected { function csrf_ignore($method) { $csrf_ignored = array("sanitycheck", "buttonplugin", "exportget"); @@ -766,7 +766,7 @@ class RPC extends Protected_Handler { } function buttonPlugin() { - $pclass = basename($_REQUEST['plugin']) . "_button"; + $pclass = "button_" . basename($_REQUEST['plugin']); $method = $_REQUEST['plugin_method']; if (class_exists($pclass)) { diff --git a/include/functions.php b/include/functions.php index 702843c16..ac07974e8 100644 --- a/include/functions.php +++ b/include/functions.php @@ -3,7 +3,10 @@ define('SCHEMA_VERSION', 94); function __autoload($class) { - $file = dirname(__FILE__)."/../classes/".strtolower(basename($class)).".php"; + $class_file = str_replace("_", "/", strtolower(basename($class))); + + $file = dirname(__FILE__)."/../classes/$class_file.php"; + if (file_exists($file)) { require $file; } @@ -3194,6 +3197,7 @@ } function format_article($link, $id, $mark_as_read = true, $zoom_mode = false, $owner_uid = false) { + global $plugins; if (!$owner_uid) $owner_uid = $_SESSION["uid"]; @@ -3256,6 +3260,8 @@ $line = db_fetch_assoc($result); + $plugins->hook('article_before', $line); + if ($line["icon_url"]) { $feed_icon = "<img src=\"" . $line["icon_url"] . "\">"; } else { @@ -3359,7 +3365,7 @@ $button_plugins = explode(",", ARTICLE_BUTTON_PLUGINS); foreach ($button_plugins as $p) { - $pclass = trim("${p}_button"); + $pclass = trim("button_${p}"); if (class_exists($pclass)) { $plugin = new $pclass($link); @@ -3468,6 +3474,8 @@ $rv['content'] .= "</body></html>"; } + $plugins->hook('article_after', $rv); + return $rv; } diff --git a/include/rssfuncs.php b/include/rssfuncs.php index 59fa3d547..4ad08df32 100644 --- a/include/rssfuncs.php +++ b/include/rssfuncs.php @@ -212,6 +212,8 @@ function update_rss_feed($link, $feed, $ignore_daemon = false, $no_cache = false, $override_url = false) { + global $plugins; + require_once "lib/simplepie/simplepie.inc"; require_once "lib/magpierss/rss_fetch.inc"; require_once 'lib/magpierss/rss_utils.inc'; @@ -557,6 +559,9 @@ } foreach ($iterator as $item) { + $hook_params = array("item" => &$item, "feed" => $feed); + + $plugins->hook('rss_update_item', $hook_params); if ($_REQUEST['xdebug'] == 2) { print_r($item); diff --git a/public.php b/public.php index a17fa5959..bf13fdd58 100644 --- a/public.php +++ b/public.php @@ -40,7 +40,7 @@ $method = $_REQUEST["op"]; - $handler = new Public_Handler($link, $_REQUEST); + $handler = new Handler_Public($link, $_REQUEST); if ($handler->before($method)) { if ($method && method_exists($handler, $method)) { diff --git a/update.php b/update.php index 292b5c1be..2c7f347d9 100755 --- a/update.php +++ b/update.php @@ -56,6 +56,8 @@ init_connection($link); + $plugins = new Plugins($link); + if (in_array("-feeds", $op)) { // Update all feeds needing a update. update_daemon_common($link); diff --git a/update_daemon2.php b/update_daemon2.php index 6410709ad..b79a1a2b2 100755 --- a/update_daemon2.php +++ b/update_daemon2.php @@ -189,6 +189,8 @@ if (!init_connection($link)) return; + $plugins = new Plugins($link); + // We disable stamp file, since it is of no use in a multiprocess update. // not really, tho for the time being -fox if (!make_stampfile('update_daemon.stamp')) { |