diff options
Diffstat (limited to 'classes')
-rw-r--r-- | classes/button.php | 11 | ||||
-rw-r--r-- | classes/button/mail.php | 192 | ||||
-rw-r--r-- | classes/button/note.php | 55 | ||||
-rw-r--r-- | classes/button/share.php | 54 | ||||
-rw-r--r-- | classes/button/tweet.php | 31 | ||||
-rw-r--r-- | classes/feeds.php | 10 | ||||
-rw-r--r-- | classes/filter.php | 14 | ||||
-rw-r--r-- | classes/filter/redditimgur.php | 47 | ||||
-rw-r--r-- | classes/pluginhandler.php | 18 | ||||
-rw-r--r-- | classes/pluginhost.php | 71 | ||||
-rw-r--r-- | classes/rpc.php | 4 |
11 files changed, 97 insertions, 410 deletions
diff --git a/classes/button.php b/classes/button.php deleted file mode 100644 index 24d576dae..000000000 --- a/classes/button.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -class Button { - - protected $link; - - function __construct($link) { - $this->link = $link; - } - -} -?> diff --git a/classes/button/mail.php b/classes/button/mail.php deleted file mode 100644 index 309493bbe..000000000 --- a/classes/button/mail.php +++ /dev/null @@ -1,192 +0,0 @@ -<?php -class Button_Mail extends Button { - function render($article_id) { - return "<img src=\"".theme_image($link, 'images/art-email.png')."\" - class='tagsPic' style=\"cursor : pointer\" - onclick=\"emailArticle($article_id)\" - alt='Zoom' title='".__('Forward by email')."'>"; - } - - function emailArticle() { - - $param = db_escape_string($_REQUEST['param']); - - $secretkey = sha1(uniqid(rand(), true)); - - $_SESSION['email_secretkey'] = $secretkey; - - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"secretkey\" value=\"$secretkey\">"; - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"rpc\">"; - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"buttonPlugin\">"; - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"plugin\" value=\"mail\">"; - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"plugin_method\" value=\"sendEmail\">"; - - $result = db_query($this->link, "SELECT email, full_name FROM ttrss_users WHERE - id = " . $_SESSION["uid"]); - - $user_email = htmlspecialchars(db_fetch_result($result, 0, "email")); - $user_name = htmlspecialchars(db_fetch_result($result, 0, "full_name")); - - if (!$user_name) $user_name = $_SESSION['name']; - - $_SESSION['email_replyto'] = $user_email; - $_SESSION['email_fromname'] = $user_name; - - require_once "lib/MiniTemplator.class.php"; - - $tpl = new MiniTemplator; - $tpl_t = new MiniTemplator; - - $tpl->readTemplateFromFile("templates/email_article_template.txt"); - - $tpl->setVariable('USER_NAME', $_SESSION["name"]); - $tpl->setVariable('USER_EMAIL', $user_email); - $tpl->setVariable('TTRSS_HOST', $_SERVER["HTTP_HOST"]); - - - $result = db_query($this->link, "SELECT link, content, title - FROM ttrss_user_entries, ttrss_entries WHERE id = ref_id AND - id IN ($param) AND owner_uid = " . $_SESSION["uid"]); - - if (db_num_rows($result) > 1) { - $subject = __("[Forwarded]") . " " . __("Multiple articles"); - } - - while ($line = db_fetch_assoc($result)) { - - if (!$subject) - $subject = __("[Forwarded]") . " " . htmlspecialchars($line["title"]); - - $tpl->setVariable('ARTICLE_TITLE', strip_tags($line["title"])); - $tpl->setVariable('ARTICLE_URL', strip_tags($line["link"])); - - $tpl->addBlock('article'); - } - - $tpl->addBlock('email'); - - $content = ""; - $tpl->generateOutputToString($content); - - print "<table width='100%'><tr><td>"; - - print __('From:'); - - print "</td><td>"; - - print "<input dojoType=\"dijit.form.TextBox\" disabled=\"1\" style=\"width : 30em;\" - value=\"$user_name <$user_email>\">"; - - print "</td></tr><tr><td>"; - - print __('To:'); - - print "</td><td>"; - - print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"true\" - style=\"width : 30em;\" - name=\"destination\" id=\"emailArticleDlg_destination\">"; - - print "<div class=\"autocomplete\" id=\"emailArticleDlg_dst_choices\" - style=\"z-index: 30; display : none\"></div>"; - - print "</td></tr><tr><td>"; - - print __('Subject:'); - - print "</td><td>"; - - print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"true\" - style=\"width : 30em;\" - name=\"subject\" value=\"$subject\" id=\"subject\">"; - - print "</td></tr>"; - - print "<tr><td colspan='2'><textarea dojoType=\"dijit.form.SimpleTextarea\" style='font-size : 12px; width : 100%' rows=\"20\" - name='content'>$content</textarea>"; - - print "</td></tr></table>"; - - print "<div class='dlgButtons'>"; - print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('emailArticleDlg').execute()\">".__('Send e-mail')."</button> "; - print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('emailArticleDlg').hide()\">".__('Cancel')."</button>"; - print "</div>"; - - //return; - } - - function sendEmail() { - $secretkey = $_REQUEST['secretkey']; - - require_once 'lib/phpmailer/class.phpmailer.php'; - - $reply = array(); - - if ($_SESSION['email_secretkey'] && - $secretkey == $_SESSION['email_secretkey']) { - - $_SESSION['email_secretkey'] = ''; - - $destination = $_REQUEST['destination']; - $subject = $_REQUEST['subject']; - $content = $_REQUEST['content']; - - $replyto = strip_tags($_SESSION['email_replyto']); - $fromname = strip_tags($_SESSION['email_fromname']); - - $mail = new PHPMailer(); - - $mail->PluginDir = "lib/phpmailer/"; - $mail->SetLanguage("en", "lib/phpmailer/language/"); - - $mail->CharSet = "UTF-8"; - - $mail->From = $replyto; - $mail->FromName = $fromname; - $mail->AddAddress($destination); - - if (SMTP_HOST) { - $mail->Host = SMTP_HOST; - $mail->Mailer = "smtp"; - $mail->SMTPAuth = SMTP_LOGIN != ''; - $mail->Username = SMTP_LOGIN; - $mail->Password = SMTP_PASSWORD; - } - - $mail->IsHTML(false); - $mail->Subject = $subject; - $mail->Body = $content; - - $rc = $mail->Send(); - - if (!$rc) { - $reply['error'] = $mail->ErrorInfo; - } else { - save_email_address($this->link, db_escape_string($destination)); - $reply['message'] = "UPDATE_COUNTERS"; - } - - } else { - $reply['error'] = "Not authorized."; - } - - print json_encode($reply); - } - - function completeEmails() { - $search = db_escape_string($_REQUEST["search"]); - - print "<ul>"; - - foreach ($_SESSION['stored_emails'] as $email) { - if (strpos($email, $search) !== false) { - print "<li>$email</li>"; - } - } - - print "</ul>"; - } - - -} -?> diff --git a/classes/button/note.php b/classes/button/note.php deleted file mode 100644 index d5b6e380c..000000000 --- a/classes/button/note.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php -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\" - onclick=\"editArticleNote($article_id)\" - class='tagsPic' title='".__('Edit article note')."'>"; - } - - function edit() { - $param = db_escape_string($_REQUEST['param']); - - $result = db_query($this->link, "SELECT note FROM ttrss_user_entries WHERE - ref_id = '$param' AND owner_uid = " . $_SESSION['uid']); - - $note = db_fetch_result($result, 0, "note"); - - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"id\" value=\"$param\">"; - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"rpc\">"; - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"buttonPlugin\">"; - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"plugin\" value=\"note\">"; - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"plugin_method\" value=\"setNote\">"; - - print "<table width='100%'><tr><td>"; - print "<textarea dojoType=\"dijit.form.SimpleTextarea\" - style='font-size : 12px; width : 100%; height: 100px;' - placeHolder='body#ttrssMain { font-size : 14px; };' - name='note'>$note</textarea>"; - print "</td></tr></table>"; - - print "<div class='dlgButtons'>"; - print "<button dojoType=\"dijit.form.Button\" - onclick=\"dijit.byId('editNoteDlg').execute()\">".__('Save')."</button> "; - print "<button dojoType=\"dijit.form.Button\" - onclick=\"dijit.byId('editNoteDlg').hide()\">".__('Cancel')."</button>"; - print "</div>"; - - } - - function setNote() { - $id = db_escape_string($_REQUEST["id"]); - $note = trim(strip_tags(db_escape_string($_REQUEST["note"]))); - - db_query($this->link, "UPDATE ttrss_user_entries SET note = '$note' - WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); - - $formatted_note = format_article_note($id, $note); - - print json_encode(array("note" => $formatted_note, - "raw_length" => mb_strlen($note))); - } - - -} -?> diff --git a/classes/button/share.php b/classes/button/share.php deleted file mode 100644 index 74d7128d9..000000000 --- a/classes/button/share.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php -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\" - onclick=\"shareArticle(".$line['int_id'].")\" - title='".__('Share by URL')."'>"; - } - - function shareArticle() { - $param = db_escape_string($_REQUEST['param']); - - $result = db_query($this->link, "SELECT uuid, ref_id FROM ttrss_user_entries WHERE int_id = '$param' - AND owner_uid = " . $_SESSION['uid']); - - if (db_num_rows($result) == 0) { - print "Article not found."; - } else { - - $uuid = db_fetch_result($result, 0, "uuid"); - $ref_id = db_fetch_result($result, 0, "ref_id"); - - if (!$uuid) { - $uuid = db_escape_string(sha1(uniqid(rand(), true))); - db_query($this->link, "UPDATE ttrss_user_entries SET uuid = '$uuid' WHERE int_id = '$param' - AND owner_uid = " . $_SESSION['uid']); - } - - print __("You can share this article by the following unique URL:"); - - $url_path = get_self_url_prefix(); - $url_path .= "/public.php?op=share&key=$uuid"; - - print "<div class=\"tagCloudContainer\">"; - print "<a id='pub_opml_url' href='$url_path' target='_blank'>$url_path</a>"; - print "</div>"; - - /* if (!label_find_id($this->link, __('Shared'), $_SESSION["uid"])) - label_create($this->link, __('Shared'), $_SESSION["uid"]); - - label_add_article($this->link, $ref_id, __('Shared'), $_SESSION['uid']); */ - } - - print "<div align='center'>"; - - print "<button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('shareArticleDlg').hide()\">". - __('Close this window')."</button>"; - - print "</div>"; - } - - -} -?> diff --git a/classes/button/tweet.php b/classes/button/tweet.php deleted file mode 100644 index 3157fb779..000000000 --- a/classes/button/tweet.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php -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\" - onclick=\"tweetArticle($article_id)\" - title='".__('Share on Twitter')."'>"; - - return $rv; - } - - function getTweetInfo() { - $id = db_escape_string($_REQUEST['id']); - - $result = db_query($this->link, "SELECT title, link - FROM ttrss_entries, ttrss_user_entries - WHERE id = '$id' AND ref_id = id AND owner_uid = " .$_SESSION['uid']); - - if (db_num_rows($result) != 0) { - $title = truncate_string(strip_tags(db_fetch_result($result, 0, 'title')), - 100, '...'); - $article_link = db_fetch_result($result, 0, 'link'); - } - - print json_encode(array("title" => $title, "link" => $article_link, - "id" => $id)); - } - - -} -?> diff --git a/classes/feeds.php b/classes/feeds.php index 49adf3879..a90b1c8ed 100644 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -249,7 +249,7 @@ class Feeds extends Handler_Protected { $headlines_count = db_num_rows($result);
- if (get_pref($this->link, 'COMBINED_DISPLAY_MODE')) {
+ /* if (get_pref($this->link, 'COMBINED_DISPLAY_MODE')) {
$button_plugins = array();
foreach (explode(",", ARTICLE_BUTTON_PLUGINS) as $p) {
$pclass = "button_" . trim($p);
@@ -259,7 +259,9 @@ class Feeds extends Handler_Protected { array_push($button_plugins, $plugin);
}
}
- }
+ } */
+
+ global $pluginhost;
if (db_num_rows($result) > 0) {
@@ -706,8 +708,8 @@ class Feeds extends Handler_Protected { //$note_escaped = htmlspecialchars($line['note'], ENT_QUOTES);
- foreach ($button_plugins as $p) {
- $reply['content'] .= $p->render($id, $line);
+ foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_BUTTON) as $p) {
+ $reply['content'] .= $p->hook_article_button($line);
}
$reply['content'] .= "<img src=\"images/digest_checkbox.png\"
diff --git a/classes/filter.php b/classes/filter.php deleted file mode 100644 index 8d6bf6f26..000000000 --- a/classes/filter.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -class Filter { - protected $link; - - function __construct($link) { - $this->link = $link; - } - - function filter_article($article) { - return $article; - } - -} -?> diff --git a/classes/filter/redditimgur.php b/classes/filter/redditimgur.php deleted file mode 100644 index b9ed24353..000000000 --- a/classes/filter/redditimgur.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php -class Filter_RedditImgur { - - function filter_article($article) { - - if (strpos($article["link"], "reddit.com/r/") !== FALSE) { - if (strpos($article["content"], "i.imgur.com") !== FALSE) { - - $doc = new DOMDocument(); - @$doc->loadHTML($article["content"]); - - if ($doc) { - $xpath = new DOMXPath($doc); - $entries = $xpath->query('(//a[@href]|//img[@src])'); - - foreach ($entries as $entry) { - if ($entry->hasAttribute("href")) { - if (preg_match("/\.(jpg|jpeg|gif|png)$/i", $entry->getAttribute("href"))) { - - $img = $doc->createElement('img'); - $img->setAttribute("src", $entry->getAttribute("href")); - - $entry->parentNode->replaceChild($img, $entry); - } - } - - // remove tiny thumbnails - if ($entry->hasAttribute("src")) { - if ($entry->parentNode && $entry->parentNode->parentNode) { - $entry->parentNode->parentNode->removeChild($entry->parentNode); - } - } - } - - $node = $doc->getElementsByTagName('body')->item(0); - - if ($node) { - $article["content"] = $doc->saveXML($node, LIBXML_NOEMPTYTAG); - } - } - } - } - - return $article; - } -} -?> diff --git a/classes/pluginhandler.php b/classes/pluginhandler.php new file mode 100644 index 000000000..df7058dcd --- /dev/null +++ b/classes/pluginhandler.php @@ -0,0 +1,18 @@ +<?php +class PluginHandler extends Handler_Protected { + function csrf_ignore($method) { + return true; + } + + function catchall($method) { + global $pluginhost; + + $plugin = $pluginhost->get_plugin($_REQUEST["plugin"]); + + if (method_exists($plugin, $method)) { + $plugin->$method(); + } + } +} + +?> diff --git a/classes/pluginhost.php b/classes/pluginhost.php new file mode 100644 index 000000000..4274ec37b --- /dev/null +++ b/classes/pluginhost.php @@ -0,0 +1,71 @@ +<?php +class PluginHost { + private $link; + private $hooks = array(); + private $plugins = array(); + + const HOOK_ARTICLE_BUTTON = 1; + const HOOK_ARTICLE_FILTER = 2; + + function __construct($link) { + $this->link = $link; + } + + private function register_plugin($name, $plugin) { + //array_push($this->plugins, $plugin); + $this->plugins[$name] = $plugin; + } + + function get_link() { + return $this->link; + } + + function get_plugins() { + return $this->plugins; + } + + function get_plugin($name) { + return $this->plugins[$name]; + } + + function add_hook($type, $sender) { + if (!is_array($this->hooks[$type])) { + $this->hooks[$type] = array(); + } + + array_push($this->hooks[$type], $sender); + } + + function del_hook($type, $sender) { + if (is_array($this->hooks[$type])) { + $key = array_Search($this->hooks[$type], $sender); + if ($key !== FALSE) { + unset($this->hooks[$type][$key]); + } + } + } + + function get_hooks($type) { + return $this->hooks[$type]; + } + + function load($classlist) { + $plugins = explode(",", $classlist); + + foreach ($plugins as $class) { + $class = trim($class); + $class_file = str_replace("_", "/", strtolower(basename($class))); + $file = dirname(__FILE__)."/../plugins/$class_file/$class_file.php"; + + if (file_exists($file)) require_once $file; + + if (class_exists($class)) { + $plugin = new $class($this); + + $this->register_plugin($class, $plugin); + } + } + } + +} +?> diff --git a/classes/rpc.php b/classes/rpc.php index 984187915..2bec8c54a 100644 --- a/classes/rpc.php +++ b/classes/rpc.php @@ -706,7 +706,7 @@ class RPC extends Handler_Protected { print json_encode(array("status" => $status)); } - function buttonPlugin() { + /* function buttonPlugin() { $pclass = "button_" . basename($_REQUEST['plugin']); $method = $_REQUEST['plugin_method']; @@ -716,7 +716,7 @@ class RPC extends Handler_Protected { return $plugin->$method(); } } - } + } */ function genHash() { $hash = sha1(uniqid(rand(), true)); |