From 08e79cb6b91fab4f86415d2b10e47567f6594988 Mon Sep 17 00:00:00 2001 From: JustAMacUser Date: Sun, 23 Aug 2015 13:08:48 -0400 Subject: Fixed height/width image attributes for enclosures. --- include/functions2.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'include/functions2.php') diff --git a/include/functions2.php b/include/functions2.php index dd9d1ad68..a135049a5 100644 --- a/include/functions2.php +++ b/include/functions2.php @@ -1953,9 +1953,9 @@ if (!$hide_images) { $encsize = ''; if ($entry['height'] > 0) - $encsize .= ' height="' . intval($entry['width']) . '"'; + $encsize .= ' height="' . intval($entry['height']) . '"'; if ($entry['width'] > 0) - $encsize .= ' width="' . intval($entry['height']) . '"'; + $encsize .= ' width="' . intval($entry['width']) . '"'; $rv .= "

\"".htmlspecialchars($entry["filename"])."\" Date: Sun, 13 Sep 2015 15:59:21 +0300 Subject: recently read: limit query by last_read --- include/functions2.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'include/functions2.php') diff --git a/include/functions2.php b/include/functions2.php index a135049a5..fb8a6a3d0 100644 --- a/include/functions2.php +++ b/include/functions2.php @@ -608,9 +608,9 @@ $query_strategy_part = "unread = false AND last_read IS NOT NULL"; if (DB_TYPE == "pgsql") { - $query_strategy_part .= " AND date_entered > NOW() - INTERVAL '1 DAY' "; + $query_strategy_part .= " AND last_read > NOW() - INTERVAL '1 DAY' "; } else { - $query_strategy_part .= " AND date_entered > DATE_SUB(NOW(), INTERVAL 1 DAY) "; + $query_strategy_part .= " AND last_read > DATE_SUB(NOW(), INTERVAL 1 DAY) "; } $vfeed_query_part = "ttrss_feeds.title AS feed_title,"; -- cgit v1.2.3-54-g00ecf From 94b8ce6cec3cdc8548cdfa7d1cd0d5d06a518886 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 15 Sep 2015 12:33:58 +0300 Subject: queryfeedheadlines: remove disable_offsets hack --- classes/api.php | 3 +-- include/functions2.php | 10 +--------- 2 files changed, 2 insertions(+), 11 deletions(-) (limited to 'include/functions2.php') diff --git a/classes/api.php b/classes/api.php index 2d420e527..08c1846d2 100644 --- a/classes/api.php +++ b/classes/api.php @@ -686,8 +686,7 @@ class API extends Handler { "offset" => $offset, "since_id" => $since_id, "include_children" => $include_nested, - "check_first_id" => $check_first_id, - "api_request" => true + "check_first_id" => $check_first_id ); $qfh_ret = queryFeedHeadlines($params); diff --git a/include/functions2.php b/include/functions2.php index fb8a6a3d0..bd1f9b860 100644 --- a/include/functions2.php +++ b/include/functions2.php @@ -465,7 +465,6 @@ $override_vfeed = isset($params["override_vfeed"]) ? $params["override_vfeed"] : false; $start_ts = isset($params["start_ts"]) ? $params["start_ts"] : false; $check_first_id = isset($params["check_first_id"]) ? $params["check_first_id"] : false; - $api_request = isset($params["api_request"]) ? $params["api_request"] : false; $ext_tables_part = ""; $query_strategy_part = ""; @@ -494,7 +493,6 @@ } $view_query_part = ""; - $disable_offsets = false; if ($view_mode == "adaptive") { if ($search) { @@ -508,7 +506,6 @@ if ($unread > 0) { $view_query_part = " unread = true AND "; - $disable_offsets = !$api_request && get_pref("CDM_AUTO_CATCHUP") && get_pref("CDM_EXPANDED"); } } } @@ -527,7 +524,6 @@ if ($view_mode == "unread" && $feed != -6) { $view_query_part = " unread = true AND "; - $disable_offsets = !$api_request && get_pref("CDM_AUTO_CATCHUP") && get_pref("CDM_EXPANDED"); } if ($limit > 0) { @@ -735,7 +731,7 @@ $sanity_interval_qpart = "date_entered >= DATE_SUB(NOW(), INTERVAL 1 hour) AND"; } - if (!$search && !$disable_offsets) { + if (!$search) { // if previous topmost article id changed that means our current pagination is no longer valid $query = "SELECT DISTINCT ttrss_feeds.title, @@ -775,10 +771,6 @@ } } - if ($disable_offsets) { - $offset_query_part = ""; - } - $query = "SELECT DISTINCT date_entered, guid, -- cgit v1.2.3-54-g00ecf From 9cc29abd41aa97ca58c3851d1238bbe23d4b9b26 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 8 Oct 2015 10:08:51 +0300 Subject: queryFeedHeadlines: int_id was not included when browsing by tag which broke several button plugins --- include/functions2.php | 1 + 1 file changed, 1 insertion(+) mode change 100644 => 100755 include/functions2.php (limited to 'include/functions2.php') diff --git a/include/functions2.php b/include/functions2.php old mode 100644 new mode 100755 index bd1f9b860..18ba7eb5c --- a/include/functions2.php +++ b/include/functions2.php @@ -824,6 +824,7 @@ marked, num_comments, comments, + int_id, tag_cache, label_cache, link, -- cgit v1.2.3-54-g00ecf From 389ae94a403917b76f89df753fca1c140c108f3b Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 26 Oct 2015 20:50:44 +0300 Subject: iframe_whitelisted: allow player.vimeo.com --- include/functions2.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include/functions2.php') diff --git a/include/functions2.php b/include/functions2.php index 18ba7eb5c..51759aea9 100755 --- a/include/functions2.php +++ b/include/functions2.php @@ -858,7 +858,7 @@ } function iframe_whitelisted($entry) { - $whitelist = array("youtube.com", "youtu.be", "vimeo.com"); + $whitelist = array("youtube.com", "youtu.be", "vimeo.com", "player.vimeo.com"); @$src = parse_url($entry->getAttribute("src"), PHP_URL_HOST); -- cgit v1.2.3-54-g00ecf From 4c46702672631c0cf84067d6f2c55b3bfda1db6f Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 19 Nov 2015 20:05:17 +0300 Subject: drop support for (obsolete, removed from recent php versions) php safe_mode setting remove ugly hacks for curl + open_basedir combination breaking support for http redirects --- include/functions.php | 15 ++------- include/functions2.php | 71 ----------------------------------------- include/sanity_check.php | 8 ++--- install/index.php | 10 ++---- plugins/af_readability/init.php | 3 +- plugins/af_redditimgur/init.php | 3 +- plugins/af_tumblr_1280/init.php | 8 ++--- plugins/af_unburn/init.php | 59 ++-------------------------------- 8 files changed, 17 insertions(+), 160 deletions(-) mode change 100644 => 100755 include/functions.php mode change 100644 => 100755 include/sanity_check.php mode change 100644 => 100755 install/index.php mode change 100644 => 100755 plugins/af_readability/init.php mode change 100644 => 100755 plugins/af_tumblr_1280/init.php mode change 100644 => 100755 plugins/af_unburn/init.php (limited to 'include/functions2.php') diff --git a/include/functions.php b/include/functions.php old mode 100644 new mode 100755 index 92d6e9790..8d1c2a625 --- a/include/functions.php +++ b/include/functions.php @@ -351,16 +351,7 @@ $fetch_curl_used = true; - if (ini_get("safe_mode") || ini_get("open_basedir") || defined("FORCE_GETURL")) { - $new_url = geturl($url); - if (!$new_url) { - // geturl has already populated $fetch_last_error - return false; - } - $ch = curl_init($new_url); - } else { - $ch = curl_init($url); - } + $ch = curl_init($url); if ($timestamp && !$post_query) { curl_setopt($ch, CURLOPT_HTTPHEADER, @@ -369,7 +360,7 @@ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout ? $timeout : FILE_FETCH_CONNECT_TIMEOUT); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout ? $timeout : FILE_FETCH_TIMEOUT); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("safe_mode") && !ini_get("open_basedir")); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("open_basedir")); curl_setopt($ch, CURLOPT_MAXREDIRS, 20); curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); @@ -379,7 +370,7 @@ curl_setopt($ch, CURLOPT_ENCODING, ""); //curl_setopt($ch, CURLOPT_REFERER, $url); - if (!ini_get("safe_mode") && !ini_get("open_basedir")) { + if (!ini_get("open_basedir")) { curl_setopt($ch, CURLOPT_COOKIEJAR, "/dev/null"); } diff --git a/include/functions2.php b/include/functions2.php index 51759aea9..779688716 100755 --- a/include/functions2.php +++ b/include/functions2.php @@ -2249,77 +2249,6 @@ return in_array($interface, class_implements($class)); } - function geturl($url, $depth = 0, $nobody = true){ - - if ($depth == 20) return $url; - - if (!function_exists('curl_init')) - return user_error('CURL Must be installed for geturl function to work. Ask your host to enable it or uncomment extension=php_curl.dll in php.ini', E_USER_ERROR); - - $curl = curl_init(); - $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; - $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; - $header[] = "Cache-Control: max-age=0"; - $header[] = "Connection: keep-alive"; - $header[] = "Keep-Alive: 300"; - $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; - $header[] = "Accept-Language: en-us,en;q=0.5"; - $header[] = "Pragma: "; - - curl_setopt($curl, CURLOPT_URL, $url); - curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 Firefox/5.0'); - curl_setopt($curl, CURLOPT_HTTPHEADER, $header); - curl_setopt($curl, CURLOPT_HEADER, true); - curl_setopt($curl, CURLOPT_NOBODY, $nobody); - curl_setopt($curl, CURLOPT_REFERER, $url); - curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); - curl_setopt($curl, CURLOPT_AUTOREFERER, true); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); - //curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); //CURLOPT_FOLLOWLOCATION Disabled... - curl_setopt($curl, CURLOPT_TIMEOUT, 60); - - if (defined('_CURL_HTTP_PROXY')) { - curl_setopt($curl, CURLOPT_PROXY, _CURL_HTTP_PROXY); - } - - $html = curl_exec($curl); - - $status = curl_getinfo($curl); - - if($status['http_code']!=200){ - - // idiot site not allowing http head - if($status['http_code'] == 405) { - curl_close($curl); - return geturl($url, $depth +1, false); - } - - if($status['http_code'] == 301 || $status['http_code'] == 302) { - curl_close($curl); - list($header) = explode("\r\n\r\n", $html, 2); - $matches = array(); - preg_match("/(Location:|URI:)[^(\n)]*/", $header, $matches); - $url = trim(str_replace($matches[1],"",$matches[0])); - $url_parsed = parse_url($url); - return (isset($url_parsed))? geturl($url, $depth + 1):''; - } - - global $fetch_last_error; - - $fetch_last_error = curl_errno($curl) . " " . curl_error($curl); - curl_close($curl); - -# $oline=''; -# foreach($status as $key=>$eline){$oline.='['.$key.']'.$eline.' ';} -# $line =$oline." \r\n ".$url."\r\n-----------------\r\n"; -# $handle = @fopen('./curl.error.log', 'a'); -# fwrite($handle, $line); - return FALSE; - } - curl_close($curl); - return $url; - } - function get_minified_js($files) { require_once 'lib/jshrink/Minifier.php'; diff --git a/include/sanity_check.php b/include/sanity_check.php old mode 100644 new mode 100755 index 6bec43051..be314f4e2 --- a/include/sanity_check.php +++ b/include/sanity_check.php @@ -134,14 +134,10 @@ array_push($errors, "PHP support for hash() function is required but was not found."); } - if (!function_exists("ctype_lower")) { - array_push($errors, "PHP support for ctype functions are required by HTMLPurifier."); + if (ini_get("safe_mode")) { + array_push($errors, "PHP safe mode setting is obsolete and not supported by tt-rss."); } - /* if (ini_get("safe_mode")) { - array_push($errors, "PHP safe mode setting is not supported."); - } */ - if ((PUBSUBHUBBUB_HUB || PUBSUBHUBBUB_ENABLED) && !function_exists("curl_init")) { array_push($errors, "PHP support for CURL is required for PubSubHubbub."); } diff --git a/install/index.php b/install/index.php old mode 100644 new mode 100755 index e18583436..959dc6c0e --- a/install/index.php +++ b/install/index.php @@ -67,17 +67,13 @@ array_push($errors, "PHP support for hash() function is required but was not found."); } - if (!function_exists("ctype_lower")) { - array_push($errors, "PHP support for ctype functions are required by HTMLPurifier."); - } - if (!function_exists("iconv")) { array_push($errors, "PHP support for iconv is required to handle multiple charsets."); } - /* if (ini_get("safe_mode")) { - array_push($errors, "PHP safe mode setting is not supported."); - } */ + if (ini_get("safe_mode")) { + array_push($errors, "PHP safe mode setting is obsolete and not supported by tt-rss."); + } if (!class_exists("DOMDocument")) { array_push($errors, "PHP support for DOMDocument is required, but was not found."); diff --git a/plugins/af_readability/init.php b/plugins/af_readability/init.php old mode 100644 new mode 100755 index cfdcb69d3..6216d510a --- a/plugins/af_readability/init.php +++ b/plugins/af_readability/init.php @@ -106,8 +106,7 @@ class Af_Readability extends Plugin { curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, - !ini_get("safe_mode") && !ini_get("open_basedir")); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("open_basedir")); curl_setopt($ch, CURLOPT_USERAGENT, SELF_USER_AGENT); @$result = curl_exec($ch); diff --git a/plugins/af_redditimgur/init.php b/plugins/af_redditimgur/init.php index 051d51780..f99941477 100755 --- a/plugins/af_redditimgur/init.php +++ b/plugins/af_redditimgur/init.php @@ -262,8 +262,7 @@ class Af_RedditImgur extends Plugin { curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, - !ini_get("safe_mode") && !ini_get("open_basedir")); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("open_basedir")); curl_setopt($ch, CURLOPT_USERAGENT, SELF_USER_AGENT); @$result = curl_exec($ch); diff --git a/plugins/af_tumblr_1280/init.php b/plugins/af_tumblr_1280/init.php old mode 100644 new mode 100755 index f9938048b..985d8c5f8 --- a/plugins/af_tumblr_1280/init.php +++ b/plugins/af_tumblr_1280/init.php @@ -4,7 +4,7 @@ class Af_Tumblr_1280 extends Plugin { function about() { return array(1.0, - "Replace Tumblr pictures with largest size if available", + "Replace Tumblr pictures with largest size if available (requires CURL)", "fox"); } @@ -18,7 +18,8 @@ class Af_Tumblr_1280 extends Plugin { function hook_article_filter($article) { - $owner_uid = $article["owner_uid"]; + if (!function_exists("curl_init") || ini_get("open_basedir")) + return $article; $charset_hack = ' @@ -46,8 +47,7 @@ class Af_Tumblr_1280 extends Plugin { curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, - !ini_get("safe_mode") && !ini_get("open_basedir")); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_USERAGENT, SELF_USER_AGENT); @$result = curl_exec($ch); diff --git a/plugins/af_unburn/init.php b/plugins/af_unburn/init.php old mode 100644 new mode 100755 index 5c9bc1387..593038871 --- a/plugins/af_unburn/init.php +++ b/plugins/af_unburn/init.php @@ -17,23 +17,19 @@ class Af_Unburn extends Plugin { function hook_article_filter($article) { $owner_uid = $article["owner_uid"]; - if (!function_exists("curl_init")) + if (!function_exists("curl_init") || ini_get("open_basedir")) return $article; if ((strpos($article["link"], "feedproxy.google.com") !== FALSE || strpos($article["link"], "/~r/") !== FALSE || strpos($article["link"], "feedsportal.com") !== FALSE)) { - if (ini_get("safe_mode") || ini_get("open_basedir")) { - $ch = curl_init(geturl($article["link"])); - } else { - $ch = curl_init($article["link"]); - } + $ch = curl_init($article["link"]); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("safe_mode") && !ini_get("open_basedir")); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_USERAGENT, SELF_USER_AGENT); if (defined('_CURL_HTTP_PROXY')) { @@ -76,55 +72,6 @@ class Af_Unburn extends Plugin { return $article; } - function geturl($url){ - - (function_exists('curl_init')) ? '' : die('cURL Must be installed for geturl function to work. Ask your host to enable it or uncomment extension=php_curl.dll in php.ini'); - - $curl = curl_init(); - $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; - $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; - $header[] = "Cache-Control: max-age=0"; - $header[] = "Connection: keep-alive"; - $header[] = "Keep-Alive: 300"; - $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; - $header[] = "Accept-Language: en-us,en;q=0.5"; - $header[] = "Pragma: "; - - curl_setopt($curl, CURLOPT_URL, $url); - curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 Firefox/5.0'); - curl_setopt($curl, CURLOPT_HTTPHEADER, $header); - curl_setopt($curl, CURLOPT_HEADER, true); - curl_setopt($curl, CURLOPT_REFERER, $url); - curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); - curl_setopt($curl, CURLOPT_AUTOREFERER, true); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); - //curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); //CURLOPT_FOLLOWLOCATION Disabled... - curl_setopt($curl, CURLOPT_TIMEOUT, 60); - - $html = curl_exec($curl); - - $status = curl_getinfo($curl); - curl_close($curl); - - if($status['http_code']!=200){ - if($status['http_code'] == 301 || $status['http_code'] == 302) { - list($header) = explode("\r\n\r\n", $html, 2); - $matches = array(); - preg_match("/(Location:|URI:)[^(\n)]*/", $header, $matches); - $url = trim(str_replace($matches[1],"",$matches[0])); - $url_parsed = parse_url($url); - return (isset($url_parsed))? geturl($url):''; - } - $oline=''; - foreach($status as $key=>$eline){$oline.='['.$key.']'.$eline.' ';} - $line =$oline." \r\n ".$url."\r\n-----------------\r\n"; - $handle = @fopen('./curl.error.log', 'a'); - fwrite($handle, $line); - return FALSE; - } - return $url; - } - function api_version() { return 2; } -- cgit v1.2.3-54-g00ecf From 19e47ad60bc390b52cfe1545a6d401545e6568a5 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sat, 21 Nov 2015 22:20:00 +0300 Subject: queryFeedHeadlines: don't check first_id when sorting by oldest first --- classes/api.php | 10 +++++++--- classes/feeds.php | 10 +++++++--- include/functions2.php | 3 ++- 3 files changed, 16 insertions(+), 7 deletions(-) mode change 100644 => 100755 classes/api.php mode change 100644 => 100755 classes/feeds.php (limited to 'include/functions2.php') diff --git a/classes/api.php b/classes/api.php old mode 100644 new mode 100755 index 08c1846d2..dfe9ef6cb --- a/classes/api.php +++ b/classes/api.php @@ -210,6 +210,8 @@ class API extends Handler { $_SESSION['hasSandbox'] = $has_sandbox; + $skip_first_id_check = false; + $override_order = false; switch ($_REQUEST["order_by"]) { case "title": @@ -217,6 +219,7 @@ class API extends Handler { break; case "date_reverse": $override_order = "score DESC, date_entered, updated"; + $skip_first_id_check = true; break; case "feed_dates": $override_order = "updated DESC"; @@ -230,7 +233,7 @@ class API extends Handler { list($headlines, $headlines_header) = $this->api_get_headlines($feed_id, $limit, $offset, $filter, $is_cat, $show_excerpt, $show_content, $view_mode, $override_order, $include_attachments, $since_id, $search, - $include_nested, $sanitize_content, $force_update, $excerpt_length, $check_first_id); + $include_nested, $sanitize_content, $force_update, $excerpt_length, $check_first_id, $skip_first_id_check); if ($include_header) { $this->wrap(self::STATUS_OK, array($headlines_header, $headlines)); @@ -644,7 +647,7 @@ class API extends Handler { $filter, $is_cat, $show_excerpt, $show_content, $view_mode, $order, $include_attachments, $since_id, $search = "", $include_nested = false, $sanitize_content = true, - $force_update = false, $excerpt_length = 100, $check_first_id = false) { + $force_update = false, $excerpt_length = 100, $check_first_id = false, $skip_first_id_check = false) { if ($force_update && $feed_id > 0 && is_numeric($feed_id)) { // Update the feed if required with some basic flood control @@ -686,7 +689,8 @@ class API extends Handler { "offset" => $offset, "since_id" => $since_id, "include_children" => $include_nested, - "check_first_id" => $check_first_id + "check_first_id" => $check_first_id, + "skip_first_id_check" => $skip_first_id_check ); $qfh_ret = queryFeedHeadlines($params); diff --git a/classes/feeds.php b/classes/feeds.php old mode 100644 new mode 100755 index c3cb72da8..07a18741d --- a/classes/feeds.php +++ b/classes/feeds.php @@ -148,7 +148,8 @@ class Feeds extends Handler_Protected { private function format_headlines_list($feed, $method, $view_mode, $limit, $cat_view, $next_unread_feed, $offset, $vgr_last_feed = false, - $override_order = false, $include_children = false, $check_first_id = false) { + $override_order = false, $include_children = false, $check_first_id = false, + $skip_first_id_check = false) { $disable_cache = false; @@ -252,7 +253,8 @@ class Feeds extends Handler_Protected { "override_order" => $override_order, "offset" => $offset, "include_children" => $include_children, - "check_first_id" => $check_first_id + "check_first_id" => $check_first_id, + "skip_first_id_check" => $skip_first_id_check ); $qfh_ret = queryFeedHeadlines($params); @@ -903,6 +905,7 @@ class Feeds extends Handler_Protected { $reply['headlines'] = array(); $override_order = false; + $skip_first_id_check = false; switch ($order_by) { case "title": @@ -910,6 +913,7 @@ class Feeds extends Handler_Protected { break; case "date_reverse": $override_order = "score DESC, date_entered, updated"; + $skip_first_id_check = true; break; case "feed_dates": $override_order = "updated DESC"; @@ -920,7 +924,7 @@ class Feeds extends Handler_Protected { $ret = $this->format_headlines_list($feed, $method, $view_mode, $limit, $cat_view, $next_unread_feed, $offset, - $vgroup_last_feed, $override_order, true, $check_first_id); + $vgroup_last_feed, $override_order, true, $check_first_id, $skip_first_id_check); //$topmost_article_ids = $ret[0]; $headlines_count = $ret[1]; diff --git a/include/functions2.php b/include/functions2.php index 779688716..0386b52ed 100755 --- a/include/functions2.php +++ b/include/functions2.php @@ -465,6 +465,7 @@ $override_vfeed = isset($params["override_vfeed"]) ? $params["override_vfeed"] : false; $start_ts = isset($params["start_ts"]) ? $params["start_ts"] : false; $check_first_id = isset($params["check_first_id"]) ? $params["check_first_id"] : false; + $skip_first_id_check = isset($params["skip_first_id_check"]) ? $params["skip_first_id_check"] : false; $ext_tables_part = ""; $query_strategy_part = ""; @@ -731,7 +732,7 @@ $sanity_interval_qpart = "date_entered >= DATE_SUB(NOW(), INTERVAL 1 hour) AND"; } - if (!$search) { + if (!$search && !$skip_first_id_check) { // if previous topmost article id changed that means our current pagination is no longer valid $query = "SELECT DISTINCT ttrss_feeds.title, -- cgit v1.2.3-54-g00ecf