= __('Categories') ?>
@@ -1196,7 +1199,7 @@ class Pref_Feeds extends Handler_Protected {
function batchSubscribe(): void {
print json_encode([
- "enable_cats" => (int)get_pref(Prefs::ENABLE_FEED_CATS),
+ "enable_cats" => (int)Prefs::get(Prefs::ENABLE_FEED_CATS, $_SESSION['uid'], $_SESSION['profile'] ?? null),
"cat_select" => \Controls\select_feeds_cats("cat")
]);
}
diff --git a/classes/Pref_Filters.php b/classes/Pref_Filters.php
index 87237342a..46cf6c30c 100644
--- a/classes/Pref_Filters.php
+++ b/classes/Pref_Filters.php
@@ -873,7 +873,7 @@ class Pref_Filters extends Handler_Protected {
}
}
- if (get_pref(Prefs::ENABLE_FEED_CATS)) {
+ if (Prefs::get(Prefs::ENABLE_FEED_CATS, $_SESSION['uid'], $_SESSION['profile'] ?? null)) {
if (!$root_id) $root_id = null;
diff --git a/classes/Pref_Prefs.php b/classes/Pref_Prefs.php
index 47d6886f9..5c4bd6872 100644
--- a/classes/Pref_Prefs.php
+++ b/classes/Pref_Prefs.php
@@ -185,6 +185,8 @@ class Pref_Prefs extends Handler_Protected {
}
function saveconfig(): void {
+ $profile = $_SESSION['profile'] ?? null;
+
$boolean_prefs = explode(",", clean($_POST["boolean_prefs"]));
foreach ($boolean_prefs as $pref) {
@@ -199,7 +201,7 @@ class Pref_Prefs extends Handler_Protected {
switch ($pref_name) {
case Prefs::DIGEST_PREFERRED_TIME:
- if (get_pref(Prefs::DIGEST_PREFERRED_TIME) != $value) {
+ if (Prefs::get(Prefs::DIGEST_PREFERRED_TIME, $_SESSION['uid']) != $value) {
$sth = $this->pdo->prepare("UPDATE ttrss_users SET
last_digest_sent = NULL WHERE id = ?");
@@ -212,7 +214,7 @@ class Pref_Prefs extends Handler_Protected {
break;
case Prefs::USER_CSS_THEME:
- if (!$need_reload) $need_reload = get_pref($pref_name) != $value;
+ if (!$need_reload) $need_reload = Prefs::get(Prefs::USER_CSS_THEME, $_SESSION['uid'], $profile) != $value;
break;
case Prefs::BLACKLISTED_TAGS:
@@ -223,7 +225,7 @@ class Pref_Prefs extends Handler_Protected {
}
if (Prefs::is_valid($pref_name)) {
- Prefs::set($pref_name, $value, $_SESSION["uid"], $_SESSION["profile"] ?? null);
+ Prefs::set($pref_name, $value, $_SESSION['uid'], $profile);
}
}
@@ -802,7 +804,7 @@ class Pref_Prefs extends Handler_Protected {
function getPluginsList(): void {
$system_enabled = array_map("trim", explode(",", (string)Config::get(Config::PLUGINS)));
- $user_enabled = array_map("trim", explode(",", get_pref(Prefs::_ENABLED_PLUGINS)));
+ $user_enabled = array_map('trim', explode(',', Prefs::get(Prefs::_ENABLED_PLUGINS, $_SESSION['uid'], $_SESSION['profile'] ?? null)));
$tmppluginhost = new PluginHost();
$tmppluginhost->load_all($tmppluginhost::KIND_ALL, $_SESSION["uid"], true);
@@ -1031,7 +1033,7 @@ class Pref_Prefs extends Handler_Protected {
function setplugins(): void {
$plugins = array_filter($_REQUEST["plugins"] ?? [], 'clean');
- set_pref(Prefs::_ENABLED_PLUGINS, implode(",", $plugins));
+ Prefs::set(Prefs::_ENABLED_PLUGINS, implode(',', $plugins), $_SESSION['uid'], $_SESSION['profile'] ?? null);
}
function _get_plugin_version(Plugin $plugin): string {
@@ -1350,7 +1352,7 @@ class Pref_Prefs extends Handler_Protected {
}
function customizeCSS(): void {
- $value = get_pref(Prefs::USER_STYLESHEET);
+ $value = Prefs::get(Prefs::USER_STYLESHEET, $_SESSION['uid'], $_SESSION['profile'] ?? null);
$value = str_replace("
", "\n", $value);
print json_encode(["value" => $value]);
diff --git a/classes/RPC.php b/classes/RPC.php
index ca8021877..4f7df652c 100644
--- a/classes/RPC.php
+++ b/classes/RPC.php
@@ -42,8 +42,9 @@ class RPC extends Handler_Protected {
function togglepref(): void {
$key = clean($_REQUEST["key"]);
- set_pref($key, !get_pref($key));
- $value = get_pref($key);
+ $profile = $_SESSION['profile'] ?? null;
+ Prefs::set($key, !Prefs::get($key, $_SESSION['uid'], $profile), $_SESSION['uid'], $profile);
+ $value = Prefs::get($key, $_SESSION['uid'], $profile);
print json_encode(array("param" =>$key, "value" => $value));
}
@@ -53,7 +54,7 @@ class RPC extends Handler_Protected {
$key = clean($_REQUEST['key']);
$value = $_REQUEST['value'];
- set_pref($key, $value, $_SESSION["uid"], $key != 'USER_STYLESHEET');
+ Prefs::set($key, $value, $_SESSION['uid'], $_SESSION['profile'] ?? null, $key != 'USER_STYLESHEET');
print json_encode(array("param" =>$key, "value" => $value));
}
@@ -124,7 +125,8 @@ class RPC extends Handler_Protected {
else
$label_ids = array_map("intval", clean($_REQUEST["label_ids"] ?? []));
- $counters = is_array($feed_ids) && !get_pref(Prefs::DISABLE_CONDITIONAL_COUNTERS) ?
+ $counters = is_array($feed_ids)
+ && !Prefs::get(Prefs::DISABLE_CONDITIONAL_COUNTERS, $_SESSION['uid'], $_SESSION['profile'] ?? null) ?
Counters::get_conditional($feed_ids, $label_ids) : Counters::get_all();
$reply = [
@@ -241,7 +243,7 @@ class RPC extends Handler_Protected {
function setWidescreen(): void {
$wide = (int) clean($_REQUEST["wide"]);
- set_pref(Prefs::WIDESCREEN_MODE, $wide);
+ Prefs::set(Prefs::WIDESCREEN_MODE, $wide, $_SESSION['uid'], $_SESSION['profile'] ?? null);
print json_encode(["wide" => $wide]);
}
@@ -436,6 +438,7 @@ class RPC extends Handler_Protected {
* @return array
*/
private function _make_init_params(): array {
+ $profile = $_SESSION['profile'] ?? null;
$params = array();
foreach ([Prefs::ON_CATCHUP_SHOW_NEXT_FEED, Prefs::HIDE_READ_FEEDS,
@@ -444,21 +447,21 @@ class RPC extends Handler_Protected {
Prefs::FRESH_ARTICLE_MAX_AGE, Prefs::HIDE_READ_SHOWS_SPECIAL,
Prefs::COMBINED_DISPLAY_MODE, Prefs::DEBUG_HEADLINE_IDS, Prefs::CDM_ENABLE_GRID] as $param) {
- $params[strtolower($param)] = (int) get_pref($param);
+ $params[strtolower($param)] = (int) Prefs::get($param, $_SESSION['uid'], $profile);
}
$params["safe_mode"] = !empty($_SESSION["safe_mode"]);
$params["check_for_updates"] = Config::get(Config::CHECK_FOR_UPDATES);
$params["icons_url"] = Config::get_self_url() . '/public.php';
$params["cookie_lifetime"] = Config::get(Config::SESSION_COOKIE_LIFETIME);
- $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["default_view_mode"] = Prefs::get(Prefs::_DEFAULT_VIEW_MODE, $_SESSION['uid'], $profile);
+ $params["default_view_limit"] = (int) Prefs::get(Prefs::_DEFAULT_VIEW_LIMIT, $_SESSION['uid'], $profile);
+ $params["default_view_order_by"] = Prefs::get(Prefs::_DEFAULT_VIEW_ORDER_BY, $_SESSION['uid'], $profile);
$params["bw_limit"] = (int) ($_SESSION["bw_limit"] ?? false);
$params["is_default_pw"] = UserHelper::is_default_password();
$params["label_base_index"] = LABEL_BASE_INDEX;
- $theme = get_pref(Prefs::USER_CSS_THEME);
+ $theme = Prefs::get(Prefs::USER_CSS_THEME, $_SESSION['uid'], $profile);
$params["theme"] = theme_exists($theme) ? $theme : "";
$params["plugins"] = implode(", ", PluginHost::getInstance()->get_plugin_names());
@@ -480,7 +483,7 @@ class RPC extends Handler_Protected {
$params["max_feed_id"] = (int) $max_feed_id;
$params["num_feeds"] = (int) $num_feeds;
$params["hotkeys"] = $this->get_hotkeys_map();
- $params["widescreen"] = (int) get_pref(Prefs::WIDESCREEN_MODE);
+ $params["widescreen"] = (int) Prefs::get(Prefs::WIDESCREEN_MODE, $_SESSION['uid'], $profile);
$params['simple_update'] = Config::get(Config::SIMPLE_UPDATE_MODE);
$params["icon_indicator_white"] = $this->image_to_base64("images/indicator_white.gif");
$params["icon_oval"] = $this->image_to_base64("images/oval.svg");
@@ -521,7 +524,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(Prefs::CDM_EXPANDED);
+ $data['cdm_expanded'] = Prefs::get(Prefs::CDM_EXPANDED, $_SESSION['uid'], $_SESSION['profile'] ?? null);
$data["labels"] = Labels::get_all($_SESSION["uid"]);
if (Config::get(Config::LOG_DESTINATION) == 'sql' && $_SESSION['access_level'] >= UserHelper::ACCESS_LEVEL_ADMIN) {
diff --git a/classes/RSSUtils.php b/classes/RSSUtils.php
index cfd0b3b61..281e85bff 100644
--- a/classes/RSSUtils.php
+++ b/classes/RSSUtils.php
@@ -321,7 +321,7 @@ class RSSUtils {
if ($feed) {
$pluginhost = new PluginHost();
- $user_plugins = get_pref(Prefs::_ENABLED_PLUGINS, $feed->owner_uid);
+ $user_plugins = Prefs::get(Prefs::_ENABLED_PLUGINS, $feed->owner_uid);
$pluginhost->load(Config::get(Config::PLUGINS), PluginHost::KIND_ALL);
$pluginhost->load((string)$user_plugins, PluginHost::KIND_USER, $feed->owner_uid);
@@ -403,7 +403,7 @@ class RSSUtils {
$feed_language = mb_strtolower($feed_obj->feed_language);
- if (!$feed_language) $feed_language = mb_strtolower(get_pref(Prefs::DEFAULT_SEARCH_LANGUAGE, $feed_obj->owner_uid));
+ if (!$feed_language) $feed_language = mb_strtolower(Prefs::get(Prefs::DEFAULT_SEARCH_LANGUAGE, $feed_obj->owner_uid));
if (!$feed_language) $feed_language = 'simple';
$user = ORM::for_table('ttrss_users')->find_one($feed_obj->owner_uid);
@@ -436,7 +436,7 @@ class RSSUtils {
$cache_filename = sha1($feed_obj->feed_url) . ".xml";
$pluginhost = new PluginHost();
- $user_plugins = get_pref(Prefs::_ENABLED_PLUGINS, $feed_obj->owner_uid);
+ $user_plugins = Prefs::get(Prefs::_ENABLED_PLUGINS, $feed_obj->owner_uid);
$pluginhost->load(Config::get(Config::PLUGINS), PluginHost::KIND_ALL);
$pluginhost->load((string)$user_plugins, PluginHost::KIND_USER, $feed_obj->owner_uid);
@@ -1274,7 +1274,7 @@ class RSSUtils {
$entry_tags = FeedItem_Common::normalize_categories(
array_diff($entry_tags,
FeedItem_Common::normalize_categories(explode(",",
- get_pref(Prefs::BLACKLISTED_TAGS, $feed_obj->owner_uid)))));
+ Prefs::get(Prefs::BLACKLISTED_TAGS, $feed_obj->owner_uid)))));
Debug::log("resulting article tags: " . implode(", ", $entry_tags), Debug::LOG_VERBOSE);
diff --git a/classes/Sanitizer.php b/classes/Sanitizer.php
index 0bbb30586..efed9d418 100644
--- a/classes/Sanitizer.php
+++ b/classes/Sanitizer.php
@@ -68,6 +68,8 @@ class Sanitizer {
if (!$owner && isset($_SESSION["uid"]))
$owner = $_SESSION["uid"];
+ $profile = isset($_SESSION['uid']) && $owner == $_SESSION['uid'] && isset($_SESSION['profile']) ? $_SESSION['profile'] : null;
+
$res = trim($str); if (!$res) return '';
$doc = new DOMDocument();
@@ -117,8 +119,7 @@ class Sanitizer {
}
if ($entry->hasAttribute('src') &&
- ($owner && get_pref(Prefs::STRIP_IMAGES, $owner)) || $force_remove_images || ($_SESSION["bw_limit"] ?? false)) {
-
+ ($owner && Prefs::get(Prefs::STRIP_IMAGES, $owner, $profile)) || $force_remove_images || ($_SESSION['bw_limit'] ?? false)) {
$p = $doc->createElement('p');
$a = $doc->createElement('a');
diff --git a/classes/TimeHelper.php b/classes/TimeHelper.php
index f1c437831..a516f83a6 100644
--- a/classes/TimeHelper.php
+++ b/classes/TimeHelper.php
@@ -3,20 +3,21 @@ class TimeHelper {
static function smart_date_time(int $timestamp, int $tz_offset = 0, ?int $owner_uid = null, bool $eta_min = false): string {
if (!$owner_uid) $owner_uid = $_SESSION['uid'];
+ $profile = isset($_SESSION['uid']) && $owner_uid == $_SESSION['uid'] && isset($_SESSION['profile']) ? $_SESSION['profile'] : null;
if ($eta_min && time() + $tz_offset - $timestamp < 3600) {
return T_sprintf("%d min", date("i", time() + $tz_offset - $timestamp));
} else if (date("Y.m.d", $timestamp) == date("Y.m.d", time() + $tz_offset)) {
- $format = get_pref(Prefs::SHORT_DATE_FORMAT, $owner_uid);
+ $format = Prefs::get(Prefs::SHORT_DATE_FORMAT, $owner_uid, $profile);
if (strpos((strtolower($format)), "a") === false)
return date("G:i", $timestamp);
else
return date("g:i a", $timestamp);
} else if (date("Y", $timestamp) == date("Y", time() + $tz_offset)) {
- $format = get_pref(Prefs::SHORT_DATE_FORMAT, $owner_uid);
+ $format = Prefs::get(Prefs::SHORT_DATE_FORMAT, $owner_uid, $profile);
return date($format, $timestamp);
} else {
- $format = get_pref(Prefs::LONG_DATE_FORMAT, $owner_uid);
+ $format = Prefs::get(Prefs::LONG_DATE_FORMAT, $owner_uid, $profile);
return date($format, $timestamp);
}
}
@@ -25,6 +26,8 @@ class TimeHelper {
bool $no_smart_dt = false, bool $eta_min = false): string {
if (!$owner_uid) $owner_uid = $_SESSION['uid'];
+ $profile = isset($_SESSION['uid']) && $owner_uid == $_SESSION['uid'] && isset($_SESSION['profile']) ? $_SESSION['profile'] : null;
+
if (!$timestamp) $timestamp = '1970-01-01 0:00';
global $utc_tz;
@@ -37,7 +40,7 @@ class TimeHelper {
# We store date in UTC internally
$dt = new DateTime($timestamp, $utc_tz);
- $user_tz_string = get_pref(Prefs::USER_TIMEZONE, $owner_uid);
+ $user_tz_string = Prefs::get(Prefs::USER_TIMEZONE, $owner_uid);
if ($user_tz_string != 'Automatic') {
@@ -59,9 +62,9 @@ class TimeHelper {
$tz_offset, $owner_uid, $eta_min);
} else {
if ($long)
- $format = get_pref(Prefs::LONG_DATE_FORMAT, $owner_uid);
+ $format = Prefs::get(Prefs::LONG_DATE_FORMAT, $owner_uid, $profile);
else
- $format = get_pref(Prefs::SHORT_DATE_FORMAT, $owner_uid);
+ $format = Prefs::get(Prefs::SHORT_DATE_FORMAT, $owner_uid, $profile);
return date($format, $user_timestamp);
}
diff --git a/classes/UserHelper.php b/classes/UserHelper.php
index 27e022624..aa2d4ce19 100644
--- a/classes/UserHelper.php
+++ b/classes/UserHelper.php
@@ -127,7 +127,9 @@ class UserHelper {
$_SESSION["csrf_token"] = bin2hex(get_random_bytes(16));
if (Config::get_schema_version() >= 120) {
- $_SESSION["language"] = get_pref(Prefs::USER_LANGUAGE, $owner_uid);
+ // TODO: USER_LANGUAGE is currently profile-specific, so we should pass it in here,
+ // but $_SESSION['profile'] isn't currently available until after the login flow completes.
+ $_SESSION["language"] = Prefs::get(Prefs::USER_LANGUAGE, $owner_uid);
}
}
@@ -136,7 +138,8 @@ class UserHelper {
if (!$pluginhost) $pluginhost = PluginHost::getInstance();
if ($owner_uid && Config::get_schema_version() >= 100 && empty($_SESSION["safe_mode"])) {
- $plugins = get_pref(Prefs::_ENABLED_PLUGINS, $owner_uid);
+ $profile = isset($_SESSION['uid']) && $owner_uid == $_SESSION['uid'] && isset($_SESSION['profile']) ? $_SESSION['profile'] : null;
+ $plugins = Prefs::get(Prefs::_ENABLED_PLUGINS, $owner_uid, $profile);
$pluginhost->load((string)$plugins, PluginHost::KIND_USER, $owner_uid);
@@ -192,7 +195,7 @@ class UserHelper {
}
static function print_user_stylesheet(): void {
- $value = get_pref(Prefs::USER_STYLESHEET);
+ $value = Prefs::get(Prefs::USER_STYLESHEET, $_SESSION['uid'], $_SESSION['profile'] ?? null);
if ($value) {
print "