diff options
Diffstat (limited to 'classes/rpc.php')
-rwxr-xr-x | classes/rpc.php | 132 |
1 files changed, 90 insertions, 42 deletions
diff --git a/classes/rpc.php b/classes/rpc.php index 8945823c6..630ea50cb 100755 --- a/classes/rpc.php +++ b/classes/rpc.php @@ -7,6 +7,36 @@ class RPC extends Handler_Protected { return array_search($method, $csrf_ignored) !== false; }*/ + private function _translations_as_array() { + + global $text_domains; + + $rv = []; + + foreach (array_keys($text_domains) as $domain) { + + /** @var gettext_reader $l10n */ + $l10n = _get_reader($domain); + + for ($i = 0; $i < $l10n->total; $i++) { + if (isset($l10n->table_originals[$i * 2 + 2]) && $orig = $l10n->get_original_string($i)) { + if(strpos($orig, "\000") !== false) { // Plural forms + $key = explode(chr(0), $orig); + + $rv[$key[0]] = _ngettext($key[0], $key[1], 1); // Singular + $rv[$key[1]] = _ngettext($key[0], $key[1], 2); // Plural + } else { + $translation = _dgettext($domain,$orig); + $rv[$orig] = $translation; + } + } + } + } + + return $rv; + } + + function togglepref() { $key = clean($_REQUEST["key"]); set_pref($key, !get_pref($key)); @@ -20,7 +50,7 @@ class RPC extends Handler_Protected { $key = clean($_REQUEST['key']); $value = $_REQUEST['value']; - set_pref($key, $value, false, $key != 'USER_STYLESHEET'); + set_pref($key, $value, $_SESSION["uid"], $key != 'USER_STYLESHEET'); print json_encode(array("param" =>$key, "value" => $value)); } @@ -66,7 +96,7 @@ class RPC extends Handler_Protected { function getRuntimeInfo() { $reply = [ - 'runtime-info' => $this->make_runtime_info() + 'runtime-info' => $this->_make_runtime_info() ]; print json_encode($reply); @@ -91,7 +121,6 @@ class RPC extends Handler_Protected { else $label_ids = array_map("intval", clean($_REQUEST["label_ids"] ?? [])); - // @phpstan-ignore-next-line $counters = is_array($feed_ids) ? Counters::get_conditional($feed_ids, $label_ids) : Counters::get_all(); $reply = [ @@ -139,21 +168,33 @@ class RPC extends Handler_Protected { $_SESSION["hasSandbox"] = clean($_REQUEST["hasSandbox"]) === "true"; $_SESSION["clientTzOffset"] = clean($_REQUEST["clientTzOffset"]); + $client_location = $_REQUEST["clientLocation"]; + $error = Errors::E_SUCCESS; + $error_params = []; + + $client_scheme = parse_url($client_location, PHP_URL_SCHEME); + $server_scheme = parse_url(get_self_url_prefix(), PHP_URL_SCHEME); - if (get_schema_version(true) != SCHEMA_VERSION) { + if (get_schema_version() != SCHEMA_VERSION) { $error = Errors::E_SCHEMA_MISMATCH; + } else if ($client_scheme != $server_scheme) { + $error = Errors::E_URL_SCHEME_MISMATCH; + $error_params["client_scheme"] = $client_scheme; + $error_params["server_scheme"] = $server_scheme; + $error_params["self_url_path"] = get_self_url_prefix(); } if ($error == Errors::E_SUCCESS) { $reply = []; - $reply['init-params'] = $this->make_init_params(); - $reply['runtime-info'] = $this->make_runtime_info(); + $reply['init-params'] = $this->_make_init_params(); + $reply['runtime-info'] = $this->_make_runtime_info(); + $reply['translations'] = $this->_translations_as_array(); print json_encode($reply); } else { - print Errors::to_json($error); + print Errors::to_json($error, $error_params); } } @@ -201,36 +242,42 @@ class RPC extends Handler_Protected { static function updaterandomfeed_real() { + $default_interval = (int) Prefs::get_default(Prefs::DEFAULT_UPDATE_INTERVAL); + // Test if the feed need a update (update interval exceded). if (Config::get(Config::DB_TYPE) == "pgsql") { $update_limit_qpart = "AND (( - ttrss_feeds.update_interval = 0 - AND ttrss_feeds.last_updated < NOW() - CAST((ttrss_user_prefs.value || ' minutes') AS INTERVAL) + update_interval = 0 + AND p.value != '-1' + AND last_updated < NOW() - CAST((COALESCE(p.value, '$default_interval') || ' minutes') AS INTERVAL) ) OR ( - ttrss_feeds.update_interval > 0 - AND ttrss_feeds.last_updated < NOW() - CAST((ttrss_feeds.update_interval || ' minutes') AS INTERVAL) + update_interval > 0 + AND last_updated < NOW() - CAST((update_interval || ' minutes') AS INTERVAL) ) OR ( - ttrss_feeds.update_interval >= 0 - AND (last_updated = '1970-01-01 00:00:00' OR last_updated IS NULL) + update_interval >= 0 + AND p.value != '-1' + AND (last_updated = '1970-01-01 00:00:00' OR last_updated IS NULL) ))"; } else { $update_limit_qpart = "AND (( - ttrss_feeds.update_interval = 0 - AND ttrss_feeds.last_updated < DATE_SUB(NOW(), INTERVAL CONVERT(ttrss_user_prefs.value, SIGNED INTEGER) MINUTE) + update_interval = 0 + AND p.value != '-1' + AND last_updated < DATE_SUB(NOW(), INTERVAL CONVERT(COALESCE(p.value, '$default_interval'), SIGNED INTEGER) MINUTE) ) OR ( - ttrss_feeds.update_interval > 0 - AND ttrss_feeds.last_updated < DATE_SUB(NOW(), INTERVAL ttrss_feeds.update_interval MINUTE) + update_interval > 0 + AND last_updated < DATE_SUB(NOW(), INTERVAL update_interval MINUTE) ) OR ( - ttrss_feeds.update_interval >= 0 - AND (last_updated = '1970-01-01 00:00:00' OR last_updated IS NULL) + update_interval >= 0 + AND p.value != '-1' + AND (last_updated = '1970-01-01 00:00:00' OR last_updated IS NULL) ))"; } // Test if feed is currently being updated by another process. if (Config::get(Config::DB_TYPE) == "pgsql") { - $updstart_thresh_qpart = "AND (ttrss_feeds.last_update_started IS NULL OR ttrss_feeds.last_update_started < NOW() - INTERVAL '5 minutes')"; + $updstart_thresh_qpart = "AND (last_update_started IS NULL OR last_update_started < NOW() - INTERVAL '5 minutes')"; } else { - $updstart_thresh_qpart = "AND (ttrss_feeds.last_update_started IS NULL OR ttrss_feeds.last_update_started < DATE_SUB(NOW(), INTERVAL 5 MINUTE))"; + $updstart_thresh_qpart = "AND (last_update_started IS NULL OR last_update_started < DATE_SUB(NOW(), INTERVAL 5 MINUTE))"; } $random_qpart = Db::sql_random_function(); @@ -238,24 +285,24 @@ class RPC extends Handler_Protected { $pdo = Db::pdo(); // we could be invoked from public.php with no active session - if ($_SESSION["uid"]) { - $owner_check_qpart = "AND ttrss_feeds.owner_uid = ".$pdo->quote($_SESSION["uid"]); + if (!empty($_SESSION["uid"])) { + $owner_check_qpart = "AND f.owner_uid = ".$pdo->quote($_SESSION["uid"]); } else { $owner_check_qpart = ""; } - // We search for feed needing update. - $res = $pdo->query("SELECT ttrss_feeds.feed_url,ttrss_feeds.id + $query = "SELECT f.feed_url,f.id FROM - ttrss_feeds, ttrss_users, ttrss_user_prefs + ttrss_feeds f, ttrss_users u LEFT JOIN ttrss_user_prefs2 p ON + (p.owner_uid = u.id AND profile IS NULL AND pref_name = 'DEFAULT_UPDATE_INTERVAL') WHERE - ttrss_feeds.owner_uid = ttrss_users.id - AND ttrss_users.id = ttrss_user_prefs.owner_uid - AND ttrss_user_prefs.pref_name = 'DEFAULT_UPDATE_INTERVAL' + f.owner_uid = u.id $owner_check_qpart $update_limit_qpart $updstart_thresh_qpart - ORDER BY $random_qpart LIMIT 30"); + ORDER BY $random_qpart LIMIT 30"; + + $res = $pdo->query($query); $num_updated = 0; @@ -338,7 +385,7 @@ class RPC extends Handler_Protected { $context = clean($_REQUEST['context']); if ($msg) { - Logger::get()->log_error(E_USER_WARNING, + Logger::log_error(E_USER_WARNING, $msg, 'client-js:' . $file, $line, $context); echo json_encode(array("message" => "HOST_ERROR_LOGGED")); @@ -372,13 +419,14 @@ class RPC extends Handler_Protected { print json_encode($rv); } - private function make_init_params() { + private function _make_init_params() { $params = array(); - foreach (array("ON_CATCHUP_SHOW_NEXT_FEED", "HIDE_READ_FEEDS", - "ENABLE_FEED_CATS", "FEEDS_SORT_BY_UNREAD", "CONFIRM_FEED_CATCHUP", - "CDM_AUTO_CATCHUP", "FRESH_ARTICLE_MAX_AGE", - "HIDE_READ_SHOWS_SPECIAL", "COMBINED_DISPLAY_MODE") as $param) { + foreach ([Prefs::ON_CATCHUP_SHOW_NEXT_FEED, Prefs::HIDE_READ_FEEDS, + Prefs::ENABLE_FEED_CATS, Prefs::FEEDS_SORT_BY_UNREAD, + Prefs::CONFIRM_FEED_CATCHUP, Prefs::CDM_AUTO_CATCHUP, + Prefs::FRESH_ARTICLE_MAX_AGE, Prefs::HIDE_READ_SHOWS_SPECIAL, + Prefs::COMBINED_DISPLAY_MODE, Prefs::DEBUG_HEADLINE_IDS] as $param) { $params[strtolower($param)] = (int) get_pref($param); } @@ -387,14 +435,14 @@ class RPC extends Handler_Protected { $params["check_for_updates"] = Config::get(Config::CHECK_FOR_UPDATES); $params["icons_url"] = Config::get(Config::ICONS_URL); $params["cookie_lifetime"] = Config::get(Config::SESSION_COOKIE_LIFETIME); - $params["default_view_mode"] = get_pref("_DEFAULT_VIEW_MODE"); - $params["default_view_limit"] = (int) get_pref("_DEFAULT_VIEW_LIMIT"); - $params["default_view_order_by"] = get_pref("_DEFAULT_VIEW_ORDER_BY"); + $params["default_view_mode"] = get_pref(Prefs::_DEFAULT_VIEW_MODE); + $params["default_view_limit"] = (int) get_pref(Prefs::_DEFAULT_VIEW_LIMIT); + $params["default_view_order_by"] = get_pref(Prefs::_DEFAULT_VIEW_ORDER_BY); $params["bw_limit"] = (int) $_SESSION["bw_limit"]; $params["is_default_pw"] = Pref_Prefs::isdefaultpassword(); $params["label_base_index"] = LABEL_BASE_INDEX; - $theme = get_pref( "USER_CSS_THEME", false, false); + $theme = get_pref(Prefs::USER_CSS_THEME); $params["theme"] = theme_exists($theme) ? $theme : ""; $params["plugins"] = implode(", ", PluginHost::getInstance()->get_plugin_names()); @@ -434,7 +482,7 @@ class RPC extends Handler_Protected { } } - static function make_runtime_info() { + static function _make_runtime_info() { $data = array(); $pdo = Db::pdo(); @@ -449,7 +497,7 @@ class RPC extends Handler_Protected { $data["max_feed_id"] = (int) $max_feed_id; $data["num_feeds"] = (int) $num_feeds; - $data['cdm_expanded'] = get_pref('CDM_EXPANDED'); + $data['cdm_expanded'] = get_pref(Prefs::CDM_EXPANDED); $data["labels"] = Labels::get_all($_SESSION["uid"]); if (Config::get(Config::LOG_DESTINATION) == 'sql' && $_SESSION['access_level'] >= 10) { |