summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfox <[email protected]>2020-12-16 11:06:48 +0000
committerGogs <[email protected]>2020-12-16 11:06:48 +0000
commitef7e67936350fce7b29499d6917d2a577105c779 (patch)
tree2f0ea59f0fc41d2ffed49c78214de69ae6b54d76
parentb4b2ba99effc4c6f8465e907bf95b6c2f6452fdb (diff)
parent62da307ef147b32eb214edecf1541f8ce896a700 (diff)
Merge branch 'feature/php8' of wn/tt-rss into master
-rwxr-xr-xclasses/pref/feeds.php12
-rwxr-xr-xclasses/pref/filters.php10
-rw-r--r--classes/pref/prefs.php4
-rw-r--r--classes/urlhelper.php13
-rw-r--r--errors.php42
-rw-r--r--include/errorhandler.php8
-rw-r--r--include/functions.php9
-rwxr-xr-xinclude/sanity_check.php12
-rw-r--r--lib/gettext/gettext.inc.php2
-rwxr-xr-xplugins/af_redditimgur/init.php6
-rwxr-xr-xupdate.php2
11 files changed, 67 insertions, 53 deletions
diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php
index 8c54a2a92..fb9925956 100755
--- a/classes/pref/feeds.php
+++ b/classes/pref/feeds.php
@@ -126,6 +126,7 @@ class Pref_Feeds extends Handler_Protected {
$root['id'] = 'root';
$root['name'] = __('Feeds');
$root['items'] = array();
+ $root['param'] = 0;
$root['type'] = 'category';
$enable_cats = get_pref('ENABLE_FEED_CATS');
@@ -229,7 +230,7 @@ class Pref_Feeds extends Handler_Protected {
$cat['items'] = $this->get_category_items($line['id']);
$num_children = $this->calculate_children_count($cat);
- $cat['param'] = vsprintf(_ngettext('(%d feed)', '(%d feeds)', (int) $num_children), $num_children);
+ $cat['param'] = sprintf(_ngettext('(%d feed)', '(%d feeds)', (int) $num_children), $num_children);
if ($num_children > 0 || $show_empty_cats)
array_push($root['items'], $cat);
@@ -277,13 +278,13 @@ class Pref_Feeds extends Handler_Protected {
array_push($cat['items'], $feed);
}
- $cat['param'] = vsprintf(_ngettext('(%d feed)', '(%d feeds)', count($cat['items'])), count($cat['items']));
+ $cat['param'] = sprintf(_ngettext('(%d feed)', '(%d feeds)', count($cat['items'])), count($cat['items']));
if (count($cat['items']) > 0 || $show_empty_cats)
array_push($root['items'], $cat);
$num_children = $this->calculate_children_count($root);
- $root['param'] = vsprintf(_ngettext('(%d feed)', '(%d feeds)', (int) $num_children), $num_children);
+ $root['param'] = sprintf(_ngettext('(%d feed)', '(%d feeds)', (int) $num_children), $num_children);
} else {
$fsth = $this->pdo->prepare("SELECT id, title, last_error,
@@ -312,7 +313,7 @@ class Pref_Feeds extends Handler_Protected {
array_push($root['items'], $feed);
}
- $root['param'] = vsprintf(_ngettext('(%d feed)', '(%d feeds)', count($root['items'])), count($root['items']));
+ $root['param'] = sprintf(_ngettext('(%d feed)', '(%d feeds)', count($root['items'])), count($root['items']));
}
$fl = array();
@@ -1208,10 +1209,11 @@ class Pref_Feeds extends Handler_Protected {
}
if ($num_errors > 0) {
-
$error_button = "<button dojoType=\"dijit.form.Button\"
onclick=\"CommonDialogs.showFeedsWithErrors()\" id=\"errorButton\">" .
__("Feeds with errors") . "</button>";
+ } else {
+ $error_button = "";
}
$inactive_button = "<button dojoType=\"dijit.form.Button\"
diff --git a/classes/pref/filters.php b/classes/pref/filters.php
index 00644c59f..70b7d0326 100755
--- a/classes/pref/filters.php
+++ b/classes/pref/filters.php
@@ -736,10 +736,8 @@ class Pref_Filters extends Handler_Protected {
}
function index() {
-
- $filter_search = clean($_REQUEST["search"]);
-
if (array_key_exists("search", $_REQUEST)) {
+ $filter_search = clean($_REQUEST["search"]);
$_SESSION["prefs_filter_search"] = $filter_search;
} else {
$filter_search = $_SESSION["prefs_filter_search"];
@@ -749,12 +747,6 @@ class Pref_Filters extends Handler_Protected {
print "<div style='padding : 0px' dojoType='dijit.layout.ContentPane' region='top'>";
print "<div dojoType='fox.Toolbar'>";
- if (array_key_exists("search", $_REQUEST)) {
- $_SESSION["prefs_filter_search"] = $filter_search;
- } else {
- $filter_search = $_SESSION["prefs_filter_search"];
- }
-
print "<div style='float : right; padding-right : 4px;'>
<input dojoType=\"dijit.form.TextBox\" id=\"filter_search\" size=\"20\" type=\"search\"
value=\"$filter_search\">
diff --git a/classes/pref/prefs.php b/classes/pref/prefs.php
index d7b486cbb..4e57ea846 100644
--- a/classes/pref/prefs.php
+++ b/classes/pref/prefs.php
@@ -1271,14 +1271,14 @@ class Pref_Prefs extends Handler_Protected {
}
private function getShortDesc($pref_name) {
- if (isset($this->pref_help[$pref_name])) {
+ if (isset($this->pref_help[$pref_name][0])) {
return $this->pref_help[$pref_name][0];
}
return "";
}
private function getHelpText($pref_name) {
- if (isset($this->pref_help[$pref_name])) {
+ if (isset($this->pref_help[$pref_name][1])) {
return $this->pref_help[$pref_name][1];
}
return "";
diff --git a/classes/urlhelper.php b/classes/urlhelper.php
index cc1074c55..fec36de51 100644
--- a/classes/urlhelper.php
+++ b/classes/urlhelper.php
@@ -1,8 +1,9 @@
<?php
class UrlHelper {
static function build_url($parts) {
- $tmp = $parts['scheme'] . "://" . $parts['host'] . $parts['path'];
+ $tmp = $parts['scheme'] . "://" . $parts['host'];
+ if (isset($parts['path'])) $tmp .= $parts['path'];
if (isset($parts['query'])) $tmp .= '?' . $parts['query'];
if (isset($parts['fragment'])) $tmp .= '#' . $parts['fragment'];
@@ -35,11 +36,13 @@ class UrlHelper {
$rel_parts['host'] = $parts['host'];
$rel_parts['scheme'] = $parts['scheme'];
- if (strpos($rel_parts['path'], '/') !== 0)
- $rel_parts['path'] = '/' . $rel_parts['path'];
+ if (isset($rel_parts['path'])) {
+ if (strpos($rel_parts['path'], '/') !== 0)
+ $rel_parts['path'] = '/' . $rel_parts['path'];
- $rel_parts['path'] = str_replace("/./", "/", $rel_parts['path']);
- $rel_parts['path'] = str_replace("//", "/", $rel_parts['path']);
+ $rel_parts['path'] = str_replace("/./", "/", $rel_parts['path']);
+ $rel_parts['path'] = str_replace("//", "/", $rel_parts['path']);
+ }
return self::validate(self::build_url($rel_parts));
}
diff --git a/errors.php b/errors.php
index deadb1e24..68164974b 100644
--- a/errors.php
+++ b/errors.php
@@ -4,48 +4,50 @@
require_once "functions.php";
- $ERRORS[0] = "";
+ function get_error_types() {
+ $ERRORS[0] = "";
- $ERRORS[1] = __("This program requires XmlHttpRequest " .
- "to function properly. Your browser doesn't seem to support it.");
+ $ERRORS[1] = __("This program requires XmlHttpRequest " .
+ "to function properly. Your browser doesn't seem to support it.");
- $ERRORS[2] = __("This program requires cookies " .
- "to function properly. Your browser doesn't seem to support them.");
+ $ERRORS[2] = __("This program requires cookies " .
+ "to function properly. Your browser doesn't seem to support them.");
- $ERRORS[3] = __("Backend sanity check failed.");
+ $ERRORS[3] = __("Backend sanity check failed.");
- $ERRORS[4] = __("Frontend sanity check failed.");
+ $ERRORS[4] = __("Frontend sanity check failed.");
- $ERRORS[5] = __("Incorrect database schema version. &lt;a href='db-updater.php'&gt;Please update&lt;/a&gt;.");
+ $ERRORS[5] = __("Incorrect database schema version. &lt;a href='db-updater.php'&gt;Please update&lt;/a&gt;.");
- $ERRORS[6] = __("Request not authorized.");
+ $ERRORS[6] = __("Request not authorized.");
- $ERRORS[7] = __("No operation to perform.");
+ $ERRORS[7] = __("No operation to perform.");
- $ERRORS[8] = __("Could not display feed: query failed. Please check label match syntax or local configuration.");
+ $ERRORS[8] = __("Could not display feed: query failed. Please check label match syntax or local configuration.");
- $ERRORS[8] = __("Denied. Your access level is insufficient to access this page.");
+ $ERRORS[8] = __("Denied. Your access level is insufficient to access this page.");
- $ERRORS[9] = __("Configuration check failed");
+ $ERRORS[9] = __("Configuration check failed");
- $ERRORS[10] = __("Your version of MySQL is not currently supported. Please see official site for more information.");
+ $ERRORS[10] = __("Your version of MySQL is not currently supported. Please see official site for more information.");
- $ERRORS[11] = "[This error is not returned by server]";
+ $ERRORS[11] = "[This error is not returned by server]";
- $ERRORS[12] = __("SQL escaping test failed, check your database and PHP configuration");
+ $ERRORS[12] = __("SQL escaping test failed, check your database and PHP configuration");
- $ERRORS[13] = __("Method not found");
+ $ERRORS[13] = __("Method not found");
- $ERRORS[14] = __("Plugin not found");
+ $ERRORS[14] = __("Plugin not found");
- $ERRORS[15] = __("Encoding data as JSON failed");
+ $ERRORS[15] = __("Encoding data as JSON failed");
+ }
if ($_REQUEST['mode'] == 'js') {
header("Content-Type: text/javascript; charset=UTF-8");
print "var ERRORS = [];\n";
- foreach ($ERRORS as $id => $error) {
+ foreach (get_error_types() as $id => $error) {
$error = preg_replace("/\n/", "", $error);
$error = preg_replace("/\"/", "\\\"", $error);
diff --git a/include/errorhandler.php b/include/errorhandler.php
index 95c9edc69..188c8c5ce 100644
--- a/include/errorhandler.php
+++ b/include/errorhandler.php
@@ -31,7 +31,13 @@ function format_backtrace($trace) {
return $rv;
}
-function ttrss_error_handler($errno, $errstr, $file, $line, $context) {
+function ttrss_error_handler($errno, $errstr, $file, $line) {
+ if (version_compare(PHP_VERSION, '8.0.0', '<')) {
+ if (error_reporting() == 0 || !$errno) return false;
+ } else {
+ if (!(error_reporting() & $errno)) return false;
+ }
+
if (error_reporting() == 0 || !$errno) return false;
$file = substr(str_replace(dirname(dirname(__FILE__)), "", $file), 1);
diff --git a/include/functions.php b/include/functions.php
index ceb7fbd9e..a70b4ac44 100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -18,7 +18,10 @@
$fetch_effective_url = false;
$fetch_curl_used = false;
- libxml_disable_entity_loader(true);
+ if (version_compare(PHP_VERSION, '8.0.0', '<')) {
+ libxml_disable_entity_loader(true);
+ }
+
libxml_use_internal_errors(true);
// separate test because this is included before sanity checks
@@ -327,7 +330,7 @@
function sanity_check() {
require_once 'errors.php';
- global $ERRORS;
+ $ERRORS = get_error_types();
$error_code = 0;
$schema_version = get_schema_version(true);
@@ -540,7 +543,7 @@
*/
function error_json($code) {
require_once "errors.php";
- global $ERRORS;
+ $ERRORS = get_error_types();
@$message = $ERRORS[$code];
diff --git a/include/sanity_check.php b/include/sanity_check.php
index 86dc7a5f0..e6c0e5d4b 100755
--- a/include/sanity_check.php
+++ b/include/sanity_check.php
@@ -21,6 +21,8 @@
}
function make_self_url_path() {
+ if (!isset($_SERVER["HTTP_HOST"])) return false;
+
$proto = is_server_https() ? 'https' : 'http';
$url_path = $proto . '://' . $_SERVER["HTTP_HOST"] . parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
@@ -115,14 +117,18 @@
}
$ref_self_url_path = make_self_url_path();
- $ref_self_url_path = preg_replace("/\w+\.php$/", "", $ref_self_url_path);
+
+ if ($ref_self_url_path) {
+ $ref_self_url_path = preg_replace("/\w+\.php$/", "", $ref_self_url_path);
+ }
if (SELF_URL_PATH == "http://example.org/tt-rss/") {
+ $hint = $ref_self_url_path ? "(possible value: <b>$ref_self_url_path</b>)" : "";
array_push($errors,
- "Please set SELF_URL_PATH to the correct value for your server (possible value: <b>$ref_self_url_path</b>)");
+ "Please set SELF_URL_PATH to the correct value for your server $hint");
}
- if (isset($_SERVER["HTTP_HOST"]) &&
+ if ($ref_self_url_path &&
(!defined('_SKIP_SELF_URL_PATH_CHECKS') || !_SKIP_SELF_URL_PATH_CHECKS) &&
SELF_URL_PATH != $ref_self_url_path && SELF_URL_PATH != mb_substr($ref_self_url_path, 0, mb_strlen($ref_self_url_path)-1)) {
array_push($errors,
diff --git a/lib/gettext/gettext.inc.php b/lib/gettext/gettext.inc.php
index ed5be6bbd..ef36924c7 100644
--- a/lib/gettext/gettext.inc.php
+++ b/lib/gettext/gettext.inc.php
@@ -167,7 +167,7 @@ function _check_locale_and_function($function=false) {
function _get_codeset($domain=null) {
global $text_domains, $default_domain, $LC_CATEGORIES;
if (!isset($domain)) $domain = $default_domain;
- return (isset($text_domains[$domain]->codeset))? $text_domains[$domain]->codeset : ini_get('mbstring.internal_encoding');
+ return (isset($text_domains[$domain]->codeset))? $text_domains[$domain]->codeset : ini_get('default_charset');
}
/**
diff --git a/plugins/af_redditimgur/init.php b/plugins/af_redditimgur/init.php
index d3e91f383..7a395801d 100755
--- a/plugins/af_redditimgur/init.php
+++ b/plugins/af_redditimgur/init.php
@@ -506,7 +506,7 @@ class Af_RedditImgur extends Plugin {
}
}
- private function get_header($url, $useragent = SELF_USER_AGENT, $header) {
+ private function get_header($url, $header, $useragent = SELF_USER_AGENT) {
$ret = false;
if (function_exists("curl_init") && !defined("NO_CURL")) {
@@ -526,11 +526,11 @@ class Af_RedditImgur extends Plugin {
}
private function get_content_type($url, $useragent = SELF_USER_AGENT) {
- return $this->get_header($url, $useragent, CURLINFO_CONTENT_TYPE);
+ return $this->get_header($url, CURLINFO_CONTENT_TYPE, $useragent);
}
private function get_location($url, $useragent = SELF_USER_AGENT) {
- return $this->get_header($url, $useragent, CURLINFO_EFFECTIVE_URL);
+ return $this->get_header($url, CURLINFO_EFFECTIVE_URL, $useragent);
}
/**
diff --git a/update.php b/update.php
index 95f19d022..d60b1a6a5 100755
--- a/update.php
+++ b/update.php
@@ -239,7 +239,7 @@
RSSUtils::update_daemon_common(DAEMON_FEED_LIMIT, $options);
RSSUtils::housekeeping_common();
- PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK, "hook_update_task", $op);
+ PluginHost::getInstance()->run_hooks(PluginHost::HOOK_UPDATE_TASK, "hook_update_task", $options);
}
if (isset($options["daemon"])) {