From 29a963c14f4acfdb530e10384550b728e6d47b69 Mon Sep 17 00:00:00 2001 From: shibuya246 Date: Mon, 1 Jul 2013 19:51:32 +0900 Subject: [PATCH 01/14] add to feed rss output --- templates/generated_feed.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/generated_feed.txt b/templates/generated_feed.txt index 6bfa50b1..6a673e86 100644 --- a/templates/generated_feed.txt +++ b/templates/generated_feed.txt @@ -20,6 +20,7 @@ <content type="html"><![CDATA[${ARTICLE_CONTENT}]]></content> <updated>${ARTICLE_UPDATED_ATOM}</updated> <author><name>${ARTICLE_AUTHOR}</name></author> + <source><title>${ARTICLE_SOURCE_TITLE} From ab10707facb7e338b2f6ed6a98865b9c754c5f32 Mon Sep 17 00:00:00 2001 From: shibuya246 Date: Mon, 1 Jul 2013 19:53:27 +0900 Subject: [PATCH 02/14] add to feed rss output --- classes/handler/public.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/classes/handler/public.php b/classes/handler/public.php index f05beafd..205853ea 100644 --- a/classes/handler/public.php +++ b/classes/handler/public.php @@ -110,6 +110,8 @@ class Handler_Public extends Handler { date(DATE_RFC822, strtotime($line["updated"])), true); $tpl->setVariable('ARTICLE_AUTHOR', htmlspecialchars($line['author']), true); + + $tpl->setVariable('ARTICLE_SOURCE_TITLE', htmlspecialchars($line['feed_title']), true); $tags = get_article_tags($line["id"], $owner_uid); From af26179d15a42451ea67a171bdb71d800e210194 Mon Sep 17 00:00:00 2001 From: Konstantin Ufimtsev <kestl1st@gmail.com> Date: Mon, 1 Jul 2013 22:52:14 +1000 Subject: [PATCH 03/14] getting last_marked value from starred.json --- plugins/googlereaderimport/init.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/googlereaderimport/init.php b/plugins/googlereaderimport/init.php index 2e22161b..dcb335a0 100644 --- a/plugins/googlereaderimport/init.php +++ b/plugins/googlereaderimport/init.php @@ -114,6 +114,7 @@ class GoogleReaderImport extends Plugin { $guid = db_escape_string(mb_substr($item['id'], 0, 250)); $title = db_escape_string($item['title']); $updated = date('Y-m-d h:i:s', $item['updated']); + $last_marked = date('Y-m-d h:i:s', mb_substr($item['crawlTimeMsec'], 0, 10)); $link = ''; $content = ''; $author = db_escape_string($item['author']); @@ -165,7 +166,7 @@ class GoogleReaderImport extends Plugin { $imported += (int) $this->create_article($owner_uid, $guid, $title, $link, $updated, $content, $author, $sql_set_marked, $tags, - $orig_feed_data); + $orig_feed_data, $last_marked); if ($file && $processed % 25 == 0) { _debug("processed $processed articles..."); @@ -196,7 +197,7 @@ class GoogleReaderImport extends Plugin { } // expects ESCAPED data - private function create_article($owner_uid, $guid, $title, $link, $updated, $content, $author, $marked, $tags, $orig_feed_data) { + private function create_article($owner_uid, $guid, $title, $link, $updated, $content, $author, $marked, $tags, $orig_feed_data, $last_marked) { if (!$guid) $guid = sha1($link); @@ -299,7 +300,7 @@ class GoogleReaderImport extends Plugin { (ref_id, uuid, feed_id, orig_feed_id, owner_uid, marked, tag_cache, label_cache, last_read, note, unread, last_marked) VALUES - ('$ref_id', '', NULL, $orig_feed_id, $owner_uid, $marked, '', '', NOW(), '', false, NOW())"); + ('$ref_id', '', NULL, $orig_feed_id, $owner_uid, $marked, '', '', '$last_marked', '', false, '$last_marked')"); $result = db_query("SELECT int_id FROM ttrss_user_entries, ttrss_entries WHERE owner_uid = $owner_uid AND ref_id = id AND ref_id = $ref_id"); From d999bc3eb2e0000aad7f92f73ed26938c7a83519 Mon Sep 17 00:00:00 2001 From: Andrew Herron <thespyder@programmer.net> Date: Tue, 2 Jul 2013 22:29:19 +1000 Subject: [PATCH 04/14] prevent accidental ctrl_key global --- js/tt-rss.js | 1 + 1 file changed, 1 insertion(+) diff --git a/js/tt-rss.js b/js/tt-rss.js index a1d7d641..c14c65f2 100644 --- a/js/tt-rss.js +++ b/js/tt-rss.js @@ -847,6 +847,7 @@ function hotkey_handler(e) { var keycode = false; var shift_key = false; + var ctrl_key = false; var cmdline = $('cmdline'); From c65bd1027ab46848493973da0515640a93815d27 Mon Sep 17 00:00:00 2001 From: Andrew Herron <thespyder@programmer.net> Date: Tue, 2 Jul 2013 22:36:29 +1000 Subject: [PATCH 05/14] Added alt and meta key handling to hotkeys --- js/tt-rss.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/js/tt-rss.js b/js/tt-rss.js index c14c65f2..46e28235 100644 --- a/js/tt-rss.js +++ b/js/tt-rss.js @@ -848,11 +848,15 @@ function hotkey_handler(e) { var keycode = false; var shift_key = false; var ctrl_key = false; + var alt_key = false; + var meta_key = false; var cmdline = $('cmdline'); shift_key = e.shiftKey; ctrl_key = e.ctrlKey; + alt_key = e.altKey; + meta_key = e.metaKey; if (window.event) { keycode = window.event.keyCode; @@ -894,6 +898,8 @@ function hotkey_handler(e) { // ensure ^*char notation if (shift_key) hotkey = "*" + hotkey; if (ctrl_key) hotkey = "^" + hotkey; + if (alt_key) hotkey = "+" + hotkey; + if (meta_key) hotkey = "%" + hotkey; hotkey = hotkey_prefix ? hotkey_prefix + " " + hotkey : hotkey; hotkey_prefix = false; From 4cb2c55025c2ca56034117629af4d26856b9c7e8 Mon Sep 17 00:00:00 2001 From: Joakim <joakim@my domain name here.com> Date: Fri, 5 Jul 2013 20:34:38 +0200 Subject: [PATCH 06/14] Filter test from web interface now replicates behaviour from pull #167 --- include/functions.php | 1 + 1 file changed, 1 insertion(+) diff --git a/include/functions.php b/include/functions.php index 355eec2c..0eceed62 100644 --- a/include/functions.php +++ b/include/functions.php @@ -3958,6 +3958,7 @@ $reg_qpart = "REGEXP"; foreach ($filter["rules"] AS $rule) { + $rule['reg_exp'] = str_replace('/', '\/', $rule["reg_exp"]); $regexp_valid = preg_match('/' . $rule['reg_exp'] . '/', $rule['reg_exp']) !== FALSE; From e9687f67e0196c063536c8e7770094129a42f2ef Mon Sep 17 00:00:00 2001 From: Andrew Dolgov <fox@madoka.volgo-balt.ru> Date: Sat, 6 Jul 2013 12:03:01 +0400 Subject: [PATCH 07/14] date_reverse view mode: take scoring into account --- classes/api.php | 2 +- classes/feeds.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/api.php b/classes/api.php index 23866072..334f5fdc 100644 --- a/classes/api.php +++ b/classes/api.php @@ -203,7 +203,7 @@ class API extends Handler { $override_order = false; switch ($_REQUEST["order_by"]) { case "date_reverse": - $override_order = "date_entered, updated"; + $override_order = "score DESC, date_entered, updated"; break; case "feed_dates": $override_order = "updated DESC"; diff --git a/classes/feeds.php b/classes/feeds.php index 33f239ee..aeadcf25 100644 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -863,7 +863,7 @@ class Feeds extends Handler_Protected { $override_order = "ttrss_entries.title"; break; case "date_reverse": - $override_order = "date_entered, updated"; + $override_order = "score DESC, date_entered, updated"; break; case "feed_dates": $override_order = "updated DESC"; From 04a8c2065f73fd425a61dc55b4735de866fc01c5 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov <fox@madoka.volgo-balt.ru> Date: Sat, 6 Jul 2013 12:05:52 +0400 Subject: [PATCH 08/14] better error reporting in session validation --- include/sessions.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/include/sessions.php b/include/sessions.php index 423ef0ed..66214afe 100644 --- a/include/sessions.php +++ b/include/sessions.php @@ -62,11 +62,17 @@ return false; } - if ($_SESSION["ref_schema_version"] != session_get_schema_version(true)) + if ($_SESSION["ref_schema_version"] != session_get_schema_version(true)) { + $_SESSION["login_error_msg"] = + __("Session failed to validate (schema version changed)"); return false; + } - if (sha1($_SERVER['HTTP_USER_AGENT']) != $_SESSION["user_agent"]) + if (sha1($_SERVER['HTTP_USER_AGENT']) != $_SESSION["user_agent"]) { + $_SESSION["login_error_msg"] = + __("Session failed to validate (user agent changed)"); return false; + } if ($_SESSION["uid"]) { $result = Db::get()->query( @@ -74,11 +80,19 @@ // user not found if (Db::get()->num_rows($result) == 0) { + + $_SESSION["login_error_msg"] = + __("Session failed to validate (user not found)"); + return false; } else { $pwd_hash = Db::get()->fetch_result($result, 0, "pwd_hash"); if ($pwd_hash != $_SESSION["pwd_hash"]) { + + $_SESSION["login_error_msg"] = + __("Session failed to validate (password changed)"); + return false; } } From 4b7ebe93a8a59a3bd2e7fb820795314be3db51ce Mon Sep 17 00:00:00 2001 From: Andrew Dolgov <fox@madoka.volgo-balt.ru> Date: Sat, 6 Jul 2013 12:34:58 +0400 Subject: [PATCH 09/14] fix broken highlighting of high-scored rows --- classes/feeds.php | 14 +++++++------- css/cdm.css | 19 +++++++++++++++++++ css/tt-rss.css | 19 +++++++------------ 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/classes/feeds.php b/classes/feeds.php index aeadcf25..b15875bd 100644 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -377,9 +377,9 @@ class Feeds extends Handler_Protected { title=\"$score\">"; if ($score > 500) { - $hlc_suffix = "H"; + $hlc_suffix = "high"; } else if ($score < -100) { - $hlc_suffix = "L"; + $hlc_suffix = "low"; } else { $hlc_suffix = ""; } @@ -448,8 +448,8 @@ class Feeds extends Handler_Protected { $reply['content'] .= "</div>"; $reply['content'] .= "<div onclick='return hlClicked(event, $id)' - class=\"hlTitle\"><span class='hlContent$hlc_suffix'>"; - $reply['content'] .= "<a id=\"RTITLE-$id\" class=\"title\" + class=\"hlTitle\"><span class='hlContent $hlc_suffix'>"; + $reply['content'] .= "<a id=\"RTITLE-$id\" class=\"title $hlc_suffix\" href=\"" . htmlspecialchars($line["link"]) . "\" onclick=\"\">" . truncate_string($line["title"], 200); @@ -539,7 +539,7 @@ class Feeds extends Handler_Protected { $expanded_class = $expand_cdm ? "expanded" : "expandable"; - $reply['content'] .= "<div class=\"cdm $expanded_class $class\" + $reply['content'] .= "<div class=\"cdm $hlc_suffix $expanded_class $class\" id=\"RROW-$id\" $mouseover_attrs>"; $reply['content'] .= "<div class=\"cdmHeader\" style=\"$row_background\">"; @@ -556,8 +556,8 @@ class Feeds extends Handler_Protected { $reply['content'] .= "<span id=\"RTITLE-$id\" onclick=\"return cdmClicked(event, $id);\" - class=\"titleWrap$hlc_suffix\"> - <a class=\"title\" + class=\"titleWrap $hlc_suffix\"> + <a class=\"title $hlc_suffix\" target=\"_blank\" href=\"". htmlspecialchars($line["link"])."\">". $line["title"] . diff --git a/css/cdm.css b/css/cdm.css index 18bedce0..7e85cbff 100644 --- a/css/cdm.css +++ b/css/cdm.css @@ -265,3 +265,22 @@ div#floatingTitle span.author, div#floatingTitle img.tinyFeedIcon { display : none; } + +.cdm.high .cdmHeader a.title.high, .cdm.high .cdmHeader .cdmExcerpt, +.cdm.high .cdmHeader span.author { + color : #00aa00; +} + +.cdm.Unread.high .cdmHeader a.title.high, .cdm.Unread.high .cdmHeader .cdmExcerpt, +.cdm.Unread.high .cdmHeader span.author { + color : #00dd00; +} + +.cdm .cdmHeader a.title.low, .cdm.low .cdmHeader .cdmExcerpt, +.cdm.Unread .cdmHeader a.title.low, .cdm.Unread.low .cdmHeader .cdmExcerpt, +.cdm.low .cdmHeader span.author { + color : #909090; + text-decoration : line-through; +} + + diff --git a/css/tt-rss.css b/css/tt-rss.css index 3e6b8cd3..c5ab8d99 100644 --- a/css/tt-rss.css +++ b/css/tt-rss.css @@ -606,20 +606,15 @@ div#headlines-frame.wide .hlTitle { white-space : normal; } -.hlContentH a, .hlContentH span { - color : #00cc00; +.hl a.title.high, span.hlContent.high .contentPreview { + color : #00aa00; +} +.hl.Unread a.title.high, .hl.Unread span.hlContent.high .contentPreview { + color : #00dd00; } -.hlContentL a, .hlContentL span { - color : #909090; - text-decoration : line-through; -} - -span.titleWrapH, span.titleWrapH a { - color : #00cc00; -} - -span.titleWrapL, span.titleWrapL a { +.hl a.title.low, span.hlContent.low .contentPreview, +.hl.Unread a.title.low, .hl.Unread span.hlContent.low .contentPreview { color : #909090; text-decoration : line-through; } From c4cab4ecf476d3db6e62126541abb5f318ff2188 Mon Sep 17 00:00:00 2001 From: guillaume-uH57J9 <guillaume@atto.be> Date: Sat, 6 Jul 2013 15:34:42 +0200 Subject: [PATCH 10/14] Report failed login attemps using user_error --- classes/handler/public.php | 1 + 1 file changed, 1 insertion(+) diff --git a/classes/handler/public.php b/classes/handler/public.php index 205853ea..f67c4fb9 100644 --- a/classes/handler/public.php +++ b/classes/handler/public.php @@ -545,6 +545,7 @@ class Handler_Public extends Handler { } } else { $_SESSION["login_error_msg"] = __("Incorrect username or password"); + user_error("Failed login attempt from {$_SERVER['REMOTE_ADDR']}", E_USER_WARNING); } if ($_REQUEST['return']) { From fcf6bfba328fb7774e8f1c8da2b4d62577c959c1 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov <fox@madoka.volgo-balt.ru> Date: Sun, 7 Jul 2013 00:59:23 +0400 Subject: [PATCH 11/14] syndicated feeds: add orig_guid to optionally alter item id to workaround duplicate checking for syndicated content; add <link> element to <source> --- classes/handler/public.php | 15 ++++++++++----- templates/generated_feed.txt | 4 +++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/classes/handler/public.php b/classes/handler/public.php index 205853ea..1be32200 100644 --- a/classes/handler/public.php +++ b/classes/handler/public.php @@ -3,7 +3,7 @@ class Handler_Public extends Handler { private function generate_syndicated_feed($owner_uid, $feed, $is_cat, $limit, $offset, $search, $search_mode, - $view_mode = false, $format = 'atom', $order = false) { + $view_mode = false, $format = 'atom', $order = false, $orig_guid = false) { require_once "lib/MiniTemplator.class.php"; @@ -88,7 +88,10 @@ class Handler_Public extends Handler { while ($line = $this->dbh->fetch_assoc($result)) { - $tpl->setVariable('ARTICLE_ID', htmlspecialchars($line['link']), true); + $tpl->setVariable('ARTICLE_ID', + htmlspecialchars($orig_guid ? $line['link'] : + get_self_url_prefix() . + "/public.php?url=" . urlencode($line['link'])), true); $tpl->setVariable('ARTICLE_LINK', htmlspecialchars($line['link']), true); $tpl->setVariable('ARTICLE_TITLE', htmlspecialchars($line['title']), true); $tpl->setVariable('ARTICLE_EXCERPT', @@ -110,7 +113,8 @@ class Handler_Public extends Handler { date(DATE_RFC822, strtotime($line["updated"])), true); $tpl->setVariable('ARTICLE_AUTHOR', htmlspecialchars($line['author']), true); - + + $tpl->setVariable('ARTICLE_SOURCE_LINK', htmlspecialchars($line['site_url']), true); $tpl->setVariable('ARTICLE_SOURCE_TITLE', htmlspecialchars($line['feed_title']), true); $tags = get_article_tags($line["id"], $owner_uid); @@ -344,7 +348,7 @@ class Handler_Public extends Handler { function rss() { $feed = $this->dbh->escape_string($_REQUEST["id"]); $key = $this->dbh->escape_string($_REQUEST["key"]); - $is_cat = $_REQUEST["is_cat"] != false; + $is_cat = $_REQUEST["is_cat"] != "false"; $limit = (int)$this->dbh->escape_string($_REQUEST["limit"]); $offset = (int)$this->dbh->escape_string($_REQUEST["offset"]); @@ -354,6 +358,7 @@ class Handler_Public extends Handler { $order = $this->dbh->escape_string($_REQUEST["order"]); $format = $this->dbh->escape_string($_REQUEST['format']); + $orig_guid = $_REQUEST["orig_guid"] != "false"; if (!$format) $format = 'atom'; @@ -373,7 +378,7 @@ class Handler_Public extends Handler { if ($owner_id) { $this->generate_syndicated_feed($owner_id, $feed, $is_cat, $limit, - $offset, $search, $search_mode, $view_mode, $format, $order); + $offset, $search, $search_mode, $view_mode, $format, $order, $orig_guid); } else { header('HTTP/1.1 403 Forbidden'); } diff --git a/templates/generated_feed.txt b/templates/generated_feed.txt index 6a673e86..c1f921c4 100644 --- a/templates/generated_feed.txt +++ b/templates/generated_feed.txt @@ -20,7 +20,9 @@ <content type="html"><![CDATA[${ARTICLE_CONTENT}]]></content> <updated>${ARTICLE_UPDATED_ATOM}</updated> <author><name>${ARTICLE_AUTHOR}</name></author> - <source><title>${ARTICLE_SOURCE_TITLE} + + + ${ARTICLE_SOURCE_TITLE} From 356e13b161cabf9e116a3d057c527b0eeee5b25a Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 7 Jul 2013 01:03:45 +0400 Subject: [PATCH 12/14] rename orig_guid to no_orig_guid --- classes/handler/public.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/handler/public.php b/classes/handler/public.php index 1be32200..810fce78 100644 --- a/classes/handler/public.php +++ b/classes/handler/public.php @@ -348,7 +348,7 @@ class Handler_Public extends Handler { function rss() { $feed = $this->dbh->escape_string($_REQUEST["id"]); $key = $this->dbh->escape_string($_REQUEST["key"]); - $is_cat = $_REQUEST["is_cat"] != "false"; + $is_cat = sql_bool_to_bool($_REQUEST["is_cat"]); $limit = (int)$this->dbh->escape_string($_REQUEST["limit"]); $offset = (int)$this->dbh->escape_string($_REQUEST["offset"]); @@ -358,7 +358,7 @@ class Handler_Public extends Handler { $order = $this->dbh->escape_string($_REQUEST["order"]); $format = $this->dbh->escape_string($_REQUEST['format']); - $orig_guid = $_REQUEST["orig_guid"] != "false"; + $orig_guid = !sql_bool_to_bool($_REQUEST["no_orig_guid"]); if (!$format) $format = 'atom'; From c722c0be1788c99f54782cb44295bfd4a3085bad Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 7 Jul 2013 11:23:59 +0400 Subject: [PATCH 13/14] rewrite_relative_url: don't touch stuff which has sheme in it (closes #738) --- include/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/functions.php b/include/functions.php index 0eceed62..bcded7e5 100644 --- a/include/functions.php +++ b/include/functions.php @@ -3788,7 +3788,7 @@ * @return string Absolute URL */ function rewrite_relative_url($url, $rel_url) { - if (strpos($rel_url, "magnet:") === 0) { + if (strpos($rel_url, ":") !== false) { return $rel_url; } else if (strpos($rel_url, "://") !== false) { return $rel_url; From 39119f02167454a44025b4a15c09553e5c221938 Mon Sep 17 00:00:00 2001 From: Julien Tardot Date: Sun, 7 Jul 2013 11:55:06 +0200 Subject: [PATCH 14/14] Correct feed ID in feeds self URL. --- classes/handler/public.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/handler/public.php b/classes/handler/public.php index 0d6ef11c..b1546356 100644 --- a/classes/handler/public.php +++ b/classes/handler/public.php @@ -65,8 +65,8 @@ class Handler_Public extends Handler { $last_error = $qfh_ret[3]; $feed_self_url = get_self_url_prefix() . - "/public.php?op=rss&id=-2&key=" . - get_feed_access_key(-2, false, $owner_uid); + "/public.php?op=rss&id=$feed&key=" . + get_feed_access_key($feed, false, $owner_uid); if (!$feed_site_url) $feed_site_url = get_self_url_prefix();