summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2012-08-17 14:20:55 +0400
committerAndrew Dolgov <[email protected]>2012-08-17 14:22:33 +0400
commit369dbc19d6ae35c97a2306ae4821c7812e2f24b2 (patch)
treefff54920611300f99e0898874e0de04c99ac5586
parent3d2c9f5adfdc51642143d9fecf31ee353735bb8e (diff)
rework class system to use subdirectories
add placeholder plugin/hook system
-rw-r--r--backend.php2
-rw-r--r--classes/article.php2
-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.php18
-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.php2
-rw-r--r--classes/plugin.php21
-rw-r--r--classes/plugin/example.php11
-rw-r--r--classes/plugins.php44
-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.php4
-rw-r--r--include/functions.php12
-rw-r--r--include/rssfuncs.php5
-rw-r--r--public.php2
-rwxr-xr-xupdate.php2
-rwxr-xr-xupdate_daemon2.php2
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')) {