implement settings profiles (bump schema)
This commit is contained in:
parent
57c7aa0f33
commit
d9084cf220
18 changed files with 548 additions and 96 deletions
29
backend.php
29
backend.php
|
@ -49,6 +49,7 @@
|
|||
init_connection($link);
|
||||
|
||||
$op = $_REQUEST["op"];
|
||||
$subop = $_REQUEST["subop"];
|
||||
$mode = $_REQUEST["mode"];
|
||||
|
||||
$print_exec_time = false;
|
||||
|
@ -81,7 +82,7 @@
|
|||
}
|
||||
|
||||
if (!($_SESSION["uid"] && validate_session($link)) && $op != "globalUpdateFeeds"
|
||||
&& $op != "rss" && $op != "getUnread" && $op != "publish") {
|
||||
&& $op != "rss" && $op != "getUnread" && $op != "publish" && $op != "getProfiles") {
|
||||
|
||||
if ($op == "rpc" || $op == "viewfeed" || $op == "view") {
|
||||
print_error_xml(6); die;
|
||||
|
@ -506,6 +507,32 @@
|
|||
$print_exec_time = false;
|
||||
break; // digestSend
|
||||
|
||||
case "getProfiles":
|
||||
$login = db_escape_string($_REQUEST["login"]);
|
||||
$password = db_escape_string($_REQUEST["password"]);
|
||||
|
||||
if (authenticate_user($link, $login, $password)) {
|
||||
$result = db_query($link, "SELECT * FROM ttrss_settings_profiles
|
||||
WHERE owner_uid = " . $_SESSION["uid"] . " ORDER BY title");
|
||||
|
||||
print "<select style='width: 100%' name='profile'>";
|
||||
|
||||
print "<option value='0'>" . __("Default profile") . "</option>";
|
||||
|
||||
while ($line = db_fetch_assoc($result)) {
|
||||
$id = $line["id"];
|
||||
$title = $line["title"];
|
||||
|
||||
print "<option value='$id'>$title</option>";
|
||||
}
|
||||
|
||||
print "</select>";
|
||||
|
||||
$_SESSION = array();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
} // Select action according to $op value.
|
||||
|
||||
// We close the connection to database.
|
||||
|
|
26
db-prefs.php
26
db-prefs.php
|
@ -14,11 +14,19 @@
|
|||
|
||||
if (!$user_id) {
|
||||
$user_id = $_SESSION["uid"];
|
||||
$profile = $_SESSION["profile"];
|
||||
} else {
|
||||
$user_id = sprintf("%d", $user_id);
|
||||
$prefs_cache = false;
|
||||
}
|
||||
|
||||
if ($profile) {
|
||||
$profile_qpart = "profile = '$profile'";
|
||||
} else {
|
||||
$profile_qpart = "profile IS NULL";
|
||||
}
|
||||
|
||||
|
||||
if ($prefs_cache && !defined('DISABLE_SESSIONS') && !SINGLE_USER_MODE) {
|
||||
if ($_SESSION["prefs_cache"] && $_SESSION["prefs_cache"][$pref_name]) {
|
||||
$tuple = $_SESSION["prefs_cache"][$pref_name];
|
||||
|
@ -31,6 +39,7 @@
|
|||
FROM
|
||||
ttrss_user_prefs,ttrss_prefs,ttrss_prefs_types
|
||||
WHERE
|
||||
$profile_qpart AND
|
||||
ttrss_user_prefs.pref_name = '$pref_name' AND
|
||||
ttrss_prefs_types.id = type_id AND
|
||||
owner_uid = '$user_id' AND
|
||||
|
@ -68,10 +77,24 @@
|
|||
}
|
||||
}
|
||||
|
||||
function set_pref($link, $key, $value) {
|
||||
function set_pref($link, $key, $value, $user_id) {
|
||||
$key = db_escape_string($key);
|
||||
$value = db_escape_string($value);
|
||||
|
||||
if (!$user_id) {
|
||||
$user_id = $_SESSION["uid"];
|
||||
$profile = $_SESSION["profile"];
|
||||
} else {
|
||||
$user_id = sprintf("%d", $user_id);
|
||||
$prefs_cache = false;
|
||||
}
|
||||
|
||||
if ($profile) {
|
||||
$profile_qpart = "profile = '$profile'";
|
||||
} else {
|
||||
$profile_qpart = "profile IS NULL";
|
||||
}
|
||||
|
||||
$result = db_query($link, "SELECT type_name
|
||||
FROM ttrss_prefs,ttrss_prefs_types
|
||||
WHERE pref_name = '$key' AND type_id = ttrss_prefs_types.id");
|
||||
|
@ -96,6 +119,7 @@
|
|||
|
||||
db_query($link, "UPDATE ttrss_user_prefs SET
|
||||
value = '$value' WHERE pref_name = '$key'
|
||||
AND $profile_qpart
|
||||
AND owner_uid = " . $_SESSION["uid"]);
|
||||
|
||||
$_SESSION["prefs_cache"] = array();
|
||||
|
|
|
@ -2224,7 +2224,7 @@ function feedArchiveRemove() {
|
|||
|
||||
if (selected.length > 0) {
|
||||
|
||||
var pr = __("Remove selected feeds from archive?");
|
||||
var pr = __("Remove selected feeds from the archive? Feeds with stored articles will not be removed.");
|
||||
|
||||
if (confirm(pr)) {
|
||||
Element.show('feed_browser_spinner');
|
||||
|
|
|
@ -1679,16 +1679,23 @@
|
|||
}
|
||||
}
|
||||
|
||||
function initialize_user_prefs($link, $uid) {
|
||||
function initialize_user_prefs($link, $uid, $profile = false) {
|
||||
|
||||
$uid = db_escape_string($uid);
|
||||
|
||||
if (!$profile) {
|
||||
$profile = "NULL";
|
||||
$profile_qpart = "profile IS NULL";
|
||||
} else {
|
||||
$profile_qpart = "profile = '$profile'";
|
||||
}
|
||||
|
||||
db_query($link, "BEGIN");
|
||||
|
||||
$result = db_query($link, "SELECT pref_name,def_value FROM ttrss_prefs");
|
||||
|
||||
$u_result = db_query($link, "SELECT pref_name
|
||||
FROM ttrss_user_prefs WHERE owner_uid = '$uid'");
|
||||
FROM ttrss_user_prefs WHERE owner_uid = '$uid' AND $profile_qpart");
|
||||
|
||||
$active_prefs = array();
|
||||
|
||||
|
@ -1701,8 +1708,8 @@
|
|||
// print "adding " . $line["pref_name"] . "<br>";
|
||||
|
||||
db_query($link, "INSERT INTO ttrss_user_prefs
|
||||
(owner_uid,pref_name,value) VALUES
|
||||
('$uid', '".$line["pref_name"]."','".$line["def_value"]."')");
|
||||
(owner_uid,pref_name,value, profile) VALUES
|
||||
('$uid', '".$line["pref_name"]."','".$line["def_value"]."', $profile)");
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1783,7 +1790,6 @@
|
|||
|
||||
$user_theme = get_user_theme_path($link);
|
||||
|
||||
$_SESSION["theme"] = $user_theme;
|
||||
$_SESSION["ip_address"] = $_SERVER["REMOTE_ADDR"];
|
||||
$_SESSION["pwd_hash"] = db_fetch_result($result, 0, "pwd_hash");
|
||||
|
||||
|
@ -1801,7 +1807,6 @@
|
|||
|
||||
$user_theme = get_user_theme_path($link);
|
||||
|
||||
$_SESSION["theme"] = $user_theme;
|
||||
$_SESSION["ip_address"] = $_SERVER["REMOTE_ADDR"];
|
||||
|
||||
initialize_user_prefs($link, $_SESSION["uid"]);
|
||||
|
@ -1926,6 +1931,19 @@
|
|||
$_SESSION["language"] = $_POST["language"];
|
||||
$_SESSION["bw_limit"] = !!$_POST["bw_limit"];
|
||||
|
||||
if ($_POST["profile"]) {
|
||||
|
||||
$profile = db_escape_string($_POST["profile"]);
|
||||
|
||||
$result = db_query($link, "SELECT id FROM ttrss_settings_profiles
|
||||
WHERE id = '$profile' AND owner_uid = " . $_SESSION["uid"]);
|
||||
|
||||
if (db_num_rows($result) != 0) {
|
||||
$_SESSION["profile"] = $profile;
|
||||
$_SESSION["prefs_cache"] = array();
|
||||
}
|
||||
}
|
||||
|
||||
header("Location: " . $_SERVER["REQUEST_URI"]);
|
||||
exit;
|
||||
|
||||
|
@ -1968,10 +1986,10 @@
|
|||
}
|
||||
|
||||
function get_user_theme_path($link) {
|
||||
$theme_id = get_pref($link, "_THEME_ID");
|
||||
|
||||
$result = db_query($link, "SELECT theme_path
|
||||
FROM
|
||||
ttrss_themes,ttrss_users
|
||||
WHERE ttrss_themes.id = theme_id AND ttrss_users.id = " . $_SESSION["uid"]);
|
||||
FROM ttrss_themes WHERE id = '$theme_id'");
|
||||
if (db_num_rows($result) != 0) {
|
||||
return db_fetch_result($result, 0, "theme_path");
|
||||
} else {
|
||||
|
@ -3039,7 +3057,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
print "<param key=\"theme\" value=\"".$_SESSION["theme"]."\"/>";
|
||||
print "<param key=\"theme\" value=\"".get_user_theme_path($link)."\"/>";
|
||||
print "<param key=\"daemon_enabled\" value=\"" . ENABLE_UPDATE_DAEMON . "\"/>";
|
||||
print "<param key=\"feeds_frame_refresh\" value=\"" . FEEDS_FRAME_REFRESH . "\"/>";
|
||||
print "<param key=\"daemon_refresh_only\" value=\"true\"/>";
|
||||
|
@ -5570,7 +5588,8 @@
|
|||
}
|
||||
|
||||
$url_path .= $_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
|
||||
$url_path .= "/backend.php?op=publish&key=" . get_pref($link, "_PREFS_PUBLISH_KEY");
|
||||
$url_path .= "/backend.php?op=publish&key=" .
|
||||
get_pref($link, "_PREFS_PUBLISH_KEY", $_SESSION["uid"]);
|
||||
|
||||
return $url_path;
|
||||
}
|
||||
|
@ -6206,11 +6225,13 @@
|
|||
|
||||
$num_tags = 0;
|
||||
|
||||
if ($_SESSION["theme"] == "3pane") {
|
||||
/* if (get_user_theme_path($link) == "3pane") {
|
||||
$tag_limit = 3;
|
||||
} else {
|
||||
$tag_limit = 6;
|
||||
}
|
||||
} */
|
||||
|
||||
$tag_limit = 6;
|
||||
|
||||
$formatted_tags = array();
|
||||
|
||||
|
@ -6415,4 +6436,5 @@
|
|||
return ($parts['scheme'] == 'http' || $parts['scheme'] == 'feed' || $parts['scheme'] == 'https');
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
@ -28,6 +28,27 @@ function init() {
|
|||
login.focus();
|
||||
|
||||
}
|
||||
function fetchProfiles() {
|
||||
try {
|
||||
var params = Form.serialize('loginForm');
|
||||
var query = "?op=getProfiles&" + params;
|
||||
|
||||
if (query) {
|
||||
new Ajax.Request("backend.php", {
|
||||
parameters: query,
|
||||
onComplete: function(transport) {
|
||||
if (transport.responseText.match("select")) {
|
||||
$('profile_box').innerHTML = transport.responseText;
|
||||
}
|
||||
} });
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
exception_error("fetchProfiles", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function languageChange(elem) {
|
||||
try {
|
||||
document.forms['loginForm']['click'].disabled = true;
|
||||
|
@ -87,7 +108,7 @@ if (document.addEventListener) {
|
|||
window.onload = init;
|
||||
</script>
|
||||
|
||||
<form action="" method="POST" name="loginForm" onsubmit="return validateLoginForm(this)">
|
||||
<form action="" method="POST" id="loginForm" name="loginForm" onsubmit="return validateLoginForm(this)">
|
||||
<input type="hidden" name="login_action" value="do_login">
|
||||
|
||||
<table width="100%" class="loginForm2">
|
||||
|
@ -104,9 +125,11 @@ window.onload = init;
|
|||
<table>
|
||||
<tr><td align="right"><?php echo __("Login:") ?></td>
|
||||
<td align="right"><input name="login"
|
||||
onchange="fetchProfiles()"
|
||||
value="<?php echo $_SERVER["REMOTE_USER"] ?>"></td></tr>
|
||||
<tr><td align="right"><?php echo __("Password:") ?></td>
|
||||
<td align="right"><input type="password" name="password"
|
||||
onchange="fetchProfiles()"
|
||||
value="<?php echo $_SERVER["REMOTE_USER"] ?>"></td></tr>
|
||||
<?php if (ENABLE_TRANSLATIONS) { ?>
|
||||
<tr><td align="right"><?php echo __("Language:") ?></td>
|
||||
|
@ -118,6 +141,13 @@ window.onload = init;
|
|||
?>
|
||||
</td></tr>
|
||||
<?php } ?>
|
||||
|
||||
<tr><td align="right"><?php echo __("Profile:") ?></td>
|
||||
<td align="right" id="profile_box">
|
||||
<select style='width : 100%' disabled='1'>
|
||||
<option><?php echo __("Default profile") ?></option></select>
|
||||
</td></tr>
|
||||
|
||||
<!-- <tr><td colspan="2">
|
||||
<input type="checkbox" name="remember_me" id="remember_me">
|
||||
<label for="remember_me">Remember me on this computer</label>
|
||||
|
|
|
@ -3,6 +3,87 @@
|
|||
|
||||
$subop = $_REQUEST["subop"];
|
||||
|
||||
if ($subop == "setprofile") {
|
||||
$id = db_escape_string($_REQUEST["id"]);
|
||||
|
||||
$_SESSION["profile"] = $id;
|
||||
$_SESSION["prefs_cache"] = array();
|
||||
return;
|
||||
}
|
||||
|
||||
if ($subop == "remprofiles") {
|
||||
$ids = split(",", db_escape_string(trim($_REQUEST["ids"])));
|
||||
|
||||
foreach ($ids as $id) {
|
||||
if ($_SESSION["profile"] != $id) {
|
||||
db_query($link, "DELETE FROM ttrss_settings_profiles WHERE id = '$id' AND
|
||||
owner_uid = " . $_SESSION["uid"]);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ($subop == "addprofile") {
|
||||
$title = db_escape_string(trim($_REQUEST["title"]));
|
||||
if ($title) {
|
||||
db_query($link, "BEGIN");
|
||||
|
||||
$result = db_query($link, "SELECT id FROM ttrss_settings_profiles
|
||||
WHERE title = '$title' AND owner_uid = " . $_SESSION["uid"]);
|
||||
|
||||
if (db_num_rows($result) == 0) {
|
||||
|
||||
db_query($link, "INSERT INTO ttrss_settings_profiles (title, owner_uid)
|
||||
VALUES ('$title', ".$_SESSION["uid"] .")");
|
||||
|
||||
$result = db_query($link, "SELECT id FROM ttrss_settings_profiles WHERE
|
||||
title = '$title'");
|
||||
|
||||
if (db_num_rows($result) != 0) {
|
||||
$profile_id = db_fetch_result($result, 0, "id");
|
||||
|
||||
if ($profile_id) {
|
||||
initialize_user_prefs($link, $_SESSION["uid"], $profile_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
db_query($link, "COMMIT");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ($subop == "saveprofile") {
|
||||
$id = db_escape_string($_REQUEST["id"]);
|
||||
$title = db_escape_string(trim($_REQUEST["value"]));
|
||||
|
||||
if ($id == 0) {
|
||||
print __("Default profile");
|
||||
return;
|
||||
}
|
||||
|
||||
if ($title) {
|
||||
db_query($link, "BEGIN");
|
||||
|
||||
$result = db_query($link, "SELECT id FROM ttrss_settings_profiles
|
||||
WHERE title = '$title' AND owner_uid =" . $_SESSION["uid"]);
|
||||
|
||||
if (db_num_rows($result) == 0) {
|
||||
db_query($link, "UPDATE ttrss_settings_profiles
|
||||
SET title = '$title' WHERE id = '$id' AND
|
||||
owner_uid = " . $_SESSION["uid"]);
|
||||
print $title;
|
||||
} else {
|
||||
$result = db_query($link, "SELECT title FROM ttrss_settings_profiles
|
||||
WHERE id = '$id' AND owner_uid =" . $_SESSION["uid"]);
|
||||
print db_fetch_result($result, 0, "title");
|
||||
}
|
||||
|
||||
db_query($link, "COMMIT");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ($subop == "remarchive") {
|
||||
$ids = split(",", db_escape_string($_REQUEST["ids"]));
|
||||
|
||||
|
@ -412,7 +493,7 @@
|
|||
|
||||
print "<rpc-reply>";
|
||||
|
||||
set_pref($link, "_PREFS_PUBLISH_KEY", generate_publish_key());
|
||||
set_pref($link, "_PREFS_PUBLISH_KEY", generate_publish_key(), $_SESSION["uid"]);
|
||||
|
||||
$new_link = article_publish_url($link);
|
||||
|
||||
|
|
|
@ -3,6 +3,97 @@
|
|||
$id = $_REQUEST["id"];
|
||||
$param = db_escape_string($_REQUEST["param"]);
|
||||
|
||||
if ($id == "editPrefProfiles") {
|
||||
|
||||
print "<div id=\"infoBoxTitle\">".__('Settings Profiles')."</div>";
|
||||
print "<div class=\"infoBoxContents\">";
|
||||
|
||||
print "<div><input id=\"fadd_profile\"
|
||||
onkeypress=\"return filterCR(event, addPrefProfile)\"
|
||||
size=\"40\">
|
||||
<button onclick=\"javascript:addPrefProfile()\">".
|
||||
__('Create profile')."</button></div>";
|
||||
|
||||
print "<p>";
|
||||
|
||||
$result = db_query($link, "SELECT title,id FROM ttrss_settings_profiles
|
||||
WHERE owner_uid = ".$_SESSION["uid"]."ORDER BY title");
|
||||
|
||||
print __('Select:')."
|
||||
<a href=\"javascript:selectPrefRows('fcat', true)\">".__('All')."</a>,
|
||||
<a href=\"javascript:selectPrefRows('fcat', false)\">".__('None')."</a>";
|
||||
|
||||
print "<div class=\"prefFeedCatHolder\">";
|
||||
|
||||
print "<form id=\"profile_edit_form\" onsubmit=\"return false\">";
|
||||
|
||||
print "<table width=\"100%\" class=\"prefFeedCatList\"
|
||||
cellspacing=\"0\" id=\"prefFeedCatList\">";
|
||||
|
||||
print "<tr class=\"odd\" id=\"FCATR-0\">";
|
||||
|
||||
print "<td width='5%' align='center'><input
|
||||
onclick='toggleSelectPrefRow(this, \"fcat\");'
|
||||
type=\"checkbox\" id=\"FCCHK-0\"></td>";
|
||||
|
||||
print "<td><span id=\"FCATT-0\">" .
|
||||
__("Default profile") . "</span></td>";
|
||||
|
||||
print "</tr>";
|
||||
|
||||
$lnum = 1;
|
||||
|
||||
while ($line = db_fetch_assoc($result)) {
|
||||
|
||||
$class = ($lnum % 2) ? "even" : "odd";
|
||||
|
||||
$cat_id = $line["id"];
|
||||
$this_row_id = "id=\"FCATR-$cat_id\"";
|
||||
|
||||
print "<tr class=\"$class\" $this_row_id>";
|
||||
|
||||
$edit_title = htmlspecialchars($line["title"]);
|
||||
|
||||
print "<td width='5%' align='center'><input
|
||||
onclick='toggleSelectPrefRow(this, \"fcat\");'
|
||||
type=\"checkbox\" id=\"FCCHK-$cat_id\"></td>";
|
||||
|
||||
if ($_SESSION["profile"] == $line["id"]) {
|
||||
$is_active = __("(active)");
|
||||
} else {
|
||||
$is_active = "";
|
||||
}
|
||||
|
||||
print "<td><span id=\"FCATT-$cat_id\">" .
|
||||
$edit_title . "</span> $is_active</td>";
|
||||
|
||||
print "</tr>";
|
||||
|
||||
++$lnum;
|
||||
}
|
||||
|
||||
print "</table>";
|
||||
print "</form>";
|
||||
print "</div>";
|
||||
|
||||
print "<div class='dlgButtons'>
|
||||
<div style='float : left'>
|
||||
<button onclick=\"return removeSelectedPrefProfiles()\">".
|
||||
__('Remove')."</button>
|
||||
<input class=\"button\"
|
||||
type=\"submit\" onclick=\"return activatePrefProfile()\"
|
||||
value=\"".__('Activate')."\">
|
||||
</div>";
|
||||
|
||||
print "<input class=\"button\"
|
||||
type=\"submit\" onclick=\"return closeInfoBox()\"
|
||||
value=\"".__('Close this window')."\">";
|
||||
|
||||
print "</div></div>";
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ($id == "pubUrl") {
|
||||
|
||||
print "<div id=\"infoBoxTitle\">".__('Published Articles')."</div>";
|
||||
|
@ -185,13 +276,17 @@
|
|||
|
||||
$owner_uid = $_SESSION["uid"];
|
||||
|
||||
/* print __('Select:')."
|
||||
<a href=\"javascript:selectPrefRows('fbrowse', true)\">".__('All')."</a>,
|
||||
<a href=\"javascript:selectPrefRows('fbrowse', false)\">".__('None')."</a>"; */
|
||||
|
||||
print "<ul class='browseFeedList' id='browseFeedList'>";
|
||||
print_feed_browser($link, $search, 25);
|
||||
print "</ul>";
|
||||
|
||||
print "<div align='center'>
|
||||
<button onclick=\"feedBrowserSubscribe()\">".__('Subscribe')."</button>
|
||||
<button style='display : none' id='feed_archive_remove' onclick=\"feedArchiveRemove()\">".__('Remove from archive')."</button>
|
||||
<button style='display : none' id='feed_archive_remove' onclick=\"feedArchiveRemove()\">".__('Remove')."</button>
|
||||
<button onclick=\"closeInfoBox()\" >".__('Cancel')."</button></div>";
|
||||
|
||||
print "</div>";
|
||||
|
|
|
@ -999,7 +999,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
print "<div class=\"prefGenericAddBox\">
|
||||
print "<div>
|
||||
<input id=\"fadd_cat\"
|
||||
onkeypress=\"return filterCR(event, addFeedCat)\"
|
||||
size=\"40\">
|
||||
|
|
|
@ -16,6 +16,12 @@
|
|||
$prefs_blacklist = array("HIDE_FEEDLIST", "SYNC_COUNTERS", "ENABLE_LABELS",
|
||||
"ENABLE_SEARCH_TOOLBAR", "HIDE_READ_FEEDS");
|
||||
|
||||
$profile_blacklist = array("ALLOW_DUPLICATE_POSTS", "PURGE_OLD_DAYS",
|
||||
"PURGE_UNREAD_ARTICLES", "DIGEST_ENABLE", "DIGEST_CATCHUP",
|
||||
"BLACKLISTED_TAGS", "ENABLE_FEED_ICONS", "ENABLE_API_ACCESS",
|
||||
"UPDATE_POST_ON_CHECKSUM_CHANGE", "DEFAULT_UPDATE_INTERVAL",
|
||||
"MARK_UNREAD_ON_UPDATE");
|
||||
|
||||
if (FORCE_ARTICLE_PURGE != 0) {
|
||||
array_push($prefs_blacklist, "PURGE_OLD_DAYS");
|
||||
array_push($prefs_blacklist, "PURGE_UNREAD_ARTICLES");
|
||||
|
@ -79,6 +85,8 @@
|
|||
|
||||
// print_r($_POST);
|
||||
|
||||
$orig_theme_id = get_pref($link, "_THEME_ID");
|
||||
|
||||
foreach (array_keys($_POST) as $pref_name) {
|
||||
|
||||
$pref_name = db_escape_string($pref_name);
|
||||
|
@ -88,9 +96,23 @@
|
|||
|
||||
}
|
||||
|
||||
#return prefs_js_redirect();
|
||||
if ($orig_theme_id != get_pref($link, "_THEME_ID")) {
|
||||
|
||||
print __("The configuration was saved.");
|
||||
$result = db_query($link, "SELECT theme_path FROM ttrss_themes
|
||||
WHERE id = '".get_pref($link, "_THEME_ID")."'");
|
||||
|
||||
if (db_num_rows($result) == 1) {
|
||||
$theme_path = db_fetch_result($result, 0, "theme_path");
|
||||
} else {
|
||||
$theme_path = "";
|
||||
}
|
||||
|
||||
$_SESSION["theme"] = $theme_path;
|
||||
|
||||
print "PREFS_THEME_CHANGED";
|
||||
} else {
|
||||
print __("The configuration was saved.");
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
|
@ -132,38 +154,14 @@
|
|||
|
||||
return;
|
||||
|
||||
} else if ($subop == "change-theme") {
|
||||
|
||||
$theme = db_escape_string($_POST["theme"]);
|
||||
|
||||
if ($theme == "Default") {
|
||||
$theme_qpart = 'NULL';
|
||||
} else {
|
||||
$theme_qpart = "'$theme'";
|
||||
}
|
||||
|
||||
$result = db_query($link, "SELECT id,theme_path FROM ttrss_themes
|
||||
WHERE theme_name = '$theme'");
|
||||
|
||||
if (db_num_rows($result) == 1) {
|
||||
$theme_id = db_fetch_result($result, 0, "id");
|
||||
$theme_path = db_fetch_result($result, 0, "theme_path");
|
||||
} else {
|
||||
$theme_id = "NULL";
|
||||
$theme_path = "";
|
||||
}
|
||||
|
||||
db_query($link, "UPDATE ttrss_users SET
|
||||
theme_id = $theme_id WHERE id = " . $_SESSION["uid"]);
|
||||
|
||||
$_SESSION["theme"] = $theme_path;
|
||||
|
||||
return prefs_js_redirect();
|
||||
|
||||
} else {
|
||||
|
||||
set_pref($link, "_PREFS_ACTIVE_TAB", "genConfig");
|
||||
|
||||
if ($_SESSION["profile"]) {
|
||||
print_notice("Some preferences are only available in default profile.");
|
||||
}
|
||||
|
||||
if (!SINGLE_USER_MODE) {
|
||||
|
||||
$result = db_query($link, "SELECT id FROM ttrss_users
|
||||
|
@ -272,47 +270,20 @@
|
|||
|
||||
}
|
||||
|
||||
$result = db_query($link, "SELECT
|
||||
theme_id FROM ttrss_users WHERE id = " . $_SESSION["uid"]);
|
||||
|
||||
$user_theme_id = db_fetch_result($result, 0, "theme_id");
|
||||
|
||||
$result = db_query($link, "SELECT
|
||||
id,theme_name FROM ttrss_themes ORDER BY theme_name");
|
||||
|
||||
if (db_num_rows($result) > 0) {
|
||||
|
||||
print "<form action=\"backend.php\" method=\"POST\">";
|
||||
print "<table width=\"100%\" class=\"prefPrefsList\">";
|
||||
print "<tr><td colspan='3'><h3>".__("Themes")."</h3></tr></td>";
|
||||
print "<tr><td width=\"40%\">".__("Select theme")."</td>";
|
||||
print "<td><select name=\"theme\">";
|
||||
print "<option value='Default'>".__('Default')."</option>";
|
||||
print "<option disabled>--------</option>";
|
||||
|
||||
while ($line = db_fetch_assoc($result)) {
|
||||
if ($line["id"] == $user_theme_id) {
|
||||
$selected = "selected";
|
||||
} else {
|
||||
$selected = "";
|
||||
}
|
||||
print "<option $selected>" . $line["theme_name"] . "</option>";
|
||||
}
|
||||
print "</select></td></tr>";
|
||||
print "</table>";
|
||||
print "<input type=\"hidden\" name=\"op\" value=\"pref-prefs\">";
|
||||
print "<input type=\"hidden\" name=\"subop\" value=\"change-theme\">";
|
||||
print "<p><button>".__('Change theme')."</button>";
|
||||
print "</form>";
|
||||
if ($_SESSION["profile"]) {
|
||||
initialize_user_prefs($link, $_SESSION["uid"], $_SESSION["profile"]);
|
||||
$profile_qpart = "profile = '" . $_SESSION["profile"] . "'";
|
||||
} else {
|
||||
initialize_user_prefs($link, $_SESSION["uid"]);
|
||||
$profile_qpart = "profile IS NULL";
|
||||
}
|
||||
|
||||
initialize_user_prefs($link, $_SESSION["uid"]);
|
||||
|
||||
$result = db_query($link, "SELECT
|
||||
ttrss_user_prefs.pref_name,short_desc,help_text,value,type_name,
|
||||
section_name,def_value
|
||||
section_name,def_value,section_id
|
||||
FROM ttrss_prefs,ttrss_prefs_types,ttrss_prefs_sections,ttrss_user_prefs
|
||||
WHERE type_id = ttrss_prefs_types.id AND
|
||||
$profile_qpart AND
|
||||
section_id = ttrss_prefs_sections.id AND
|
||||
ttrss_user_prefs.pref_name = ttrss_prefs.pref_name AND
|
||||
short_desc != '' AND
|
||||
|
@ -332,6 +303,11 @@
|
|||
continue;
|
||||
}
|
||||
|
||||
if ($_SESSION["profile"] && in_array($line["pref_name"],
|
||||
$profile_blacklist)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($active_section != $line["section_name"]) {
|
||||
|
||||
if ($active_section != "") {
|
||||
|
@ -339,10 +315,34 @@
|
|||
}
|
||||
|
||||
print "<p><table width=\"100%\" class=\"prefPrefsList\">";
|
||||
|
||||
|
||||
$active_section = $line["section_name"];
|
||||
|
||||
print "<tr><td colspan=\"3\"><h3>".__($active_section)."</h3></td></tr>";
|
||||
|
||||
if ($line["section_id"] == 2) {
|
||||
print "<tr><td width=\"40%\">".__("Select theme")."</td>";
|
||||
print "<td><select name=\"_THEME_ID\">";
|
||||
print "<option value='0'>".__('Default')."</option>";
|
||||
print "<option disabled>--------</option>";
|
||||
|
||||
$user_theme_id = get_pref($link, "_THEME_ID");
|
||||
|
||||
$tmp_result = db_query($link, "SELECT
|
||||
id,theme_name FROM ttrss_themes ORDER BY theme_name");
|
||||
|
||||
while ($tmp_line = db_fetch_assoc($tmp_result)) {
|
||||
if ($tmp_line["id"] == $user_theme_id) {
|
||||
$selected = "selected";
|
||||
} else {
|
||||
$selected = "";
|
||||
}
|
||||
print "<option value=\"".$tmp_line["id"]."\" $selected>" .
|
||||
$tmp_line["theme_name"] . "</option>";
|
||||
}
|
||||
print "</select></td></tr>";
|
||||
}
|
||||
|
||||
// print "<tr class=\"title\">
|
||||
// <td width=\"25%\">Option</td><td>Value</td></tr>";
|
||||
|
||||
|
@ -398,7 +398,10 @@
|
|||
|
||||
print "<p><button onclick=\"return validatePrefsSave()\">".
|
||||
__('Save configuration')."</button> ";
|
||||
|
||||
|
||||
print "<button onclick=\"return editProfiles()\">".
|
||||
__('Manage profiles')."</button> ";
|
||||
|
||||
print "<button onclick=\"return validatePrefsReset()\">".
|
||||
__('Reset to defaults')."</button></p>";
|
||||
|
||||
|
|
120
prefs.js
120
prefs.js
|
@ -121,6 +121,26 @@ function notify_callback2(transport) {
|
|||
notify_info(transport.responseText);
|
||||
}
|
||||
|
||||
function init_profile_inline_editor() {
|
||||
try {
|
||||
|
||||
if ($("prefFeedCatList")) {
|
||||
var elems = $("prefFeedCatList").getElementsByTagName("SPAN");
|
||||
|
||||
for (var i = 0; i < elems.length; i++) {
|
||||
if (elems[i].id && elems[i].id.match("FCATT-")) {
|
||||
var id = elems[i].id.replace("FCATT-", "");
|
||||
new Ajax.InPlaceEditor(elems[i],
|
||||
'backend.php?op=rpc&subop=saveprofile&id=' + id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
exception_error("init_profile_inline_editor", e);
|
||||
}
|
||||
}
|
||||
|
||||
function init_cat_inline_editor() {
|
||||
try {
|
||||
|
||||
|
@ -267,6 +287,28 @@ function addFeed() {
|
|||
|
||||
}
|
||||
|
||||
function addPrefProfile() {
|
||||
|
||||
var profile = $("fadd_profile");
|
||||
|
||||
if (profile.value.length == 0) {
|
||||
alert(__("Can't add profile: no name specified."));
|
||||
} else {
|
||||
notify_progress("Adding profile...");
|
||||
|
||||
var query = "?op=rpc&subop=addprofile&title=" +
|
||||
param_escape(profile.value);
|
||||
|
||||
new Ajax.Request("backend.php", {
|
||||
parameters: query,
|
||||
onComplete: function(transport) {
|
||||
editProfiles();
|
||||
} });
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function addFeedCat() {
|
||||
|
||||
var cat = $("fadd_cat");
|
||||
|
@ -616,6 +658,34 @@ function purgeSelectedFeeds() {
|
|||
return false;
|
||||
}
|
||||
|
||||
function removeSelectedPrefProfiles() {
|
||||
|
||||
var sel_rows = getSelectedFeedCats();
|
||||
|
||||
if (sel_rows.length > 0) {
|
||||
|
||||
var ok = confirm(__("Remove selected profiles? Active and default profiles will not be removed."));
|
||||
|
||||
if (ok) {
|
||||
notify_progress("Removing selected profiles...");
|
||||
|
||||
var query = "?op=rpc&subop=remprofiles&ids="+
|
||||
param_escape(sel_rows.toString());
|
||||
|
||||
new Ajax.Request("backend.php", {
|
||||
parameters: query,
|
||||
onComplete: function(transport) {
|
||||
editProfiles();
|
||||
} });
|
||||
}
|
||||
|
||||
} else {
|
||||
alert(__("No profiles selected."));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function removeSelectedFeedCats() {
|
||||
|
||||
var sel_rows = getSelectedFeedCats();
|
||||
|
@ -1207,7 +1277,7 @@ function validatePrefsReset() {
|
|||
}
|
||||
|
||||
} catch (e) {
|
||||
exception_error("validatePrefsSave", e);
|
||||
exception_error("validatePrefsReset", e);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -1282,6 +1352,11 @@ function selectPrefRows(kind, select) {
|
|||
nrow = "UMRR-";
|
||||
nchk = "UMCHK-";
|
||||
lname = "prefUserList";
|
||||
} else if (kind == "fbrowse") {
|
||||
opbarid = "browseOpToolbar";
|
||||
nrow = "FBROW-";
|
||||
nchk = "FBCHK-";
|
||||
lname = "browseFeedList";
|
||||
}
|
||||
|
||||
if (opbarid) {
|
||||
|
@ -1685,7 +1760,12 @@ function validatePrefsSave() {
|
|||
new Ajax.Request("backend.php", {
|
||||
parameters: query,
|
||||
onComplete: function(transport) {
|
||||
notify_callback2(transport);
|
||||
var msg = transport.responseText;
|
||||
if (msg.match("PREFS_THEME_CHANGED")) {
|
||||
window.location.reload();
|
||||
} else {
|
||||
notify_info(msg);
|
||||
}
|
||||
} });
|
||||
|
||||
}
|
||||
|
@ -2104,3 +2184,39 @@ function mouse_up_handler(e) {
|
|||
function inPreferences() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function editProfiles() {
|
||||
displayDlg('editPrefProfiles', false, function() {
|
||||
init_profile_inline_editor();
|
||||
});
|
||||
}
|
||||
|
||||
function activatePrefProfile() {
|
||||
|
||||
var sel_rows = getSelectedFeedCats();
|
||||
|
||||
if (sel_rows.length == 1) {
|
||||
|
||||
var ok = confirm(__("Activate selected profile?"));
|
||||
|
||||
if (ok) {
|
||||
notify_progress("Loading, please wait...");
|
||||
|
||||
var query = "?op=rpc&subop=setprofile&id="+
|
||||
param_escape(sel_rows.toString());
|
||||
|
||||
new Ajax.Request("backend.php", {
|
||||
parameters: query,
|
||||
onComplete: function(transport) {
|
||||
window.location.reload();
|
||||
} });
|
||||
}
|
||||
|
||||
} else {
|
||||
alert(__("Please choose a profile to activate."));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
<title>Tiny Tiny RSS : Preferences</title>
|
||||
<link rel="stylesheet" type="text/css" href="tt-rss.css?<?php echo $dt_add ?>"/>
|
||||
|
||||
<?php $user_theme = $_SESSION["theme"];
|
||||
<?php $user_theme = get_user_theme_path($link);
|
||||
if ($user_theme) { ?>
|
||||
<link rel="stylesheet" type="text/css" href="themes/<?php echo $user_theme ?>/theme.css"/>
|
||||
<?php } ?>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
require_once "functions.php";
|
||||
|
||||
define('EXPECTED_CONFIG_VERSION', 18);
|
||||
define('SCHEMA_VERSION', 62);
|
||||
define('SCHEMA_VERSION', 63);
|
||||
|
||||
if (!file_exists("config.php")) {
|
||||
print "<b>Fatal Error</b>: You forgot to copy
|
||||
|
|
|
@ -15,6 +15,7 @@ drop table if exists ttrss_prefs_types;
|
|||
drop table if exists ttrss_prefs_sections;
|
||||
drop table if exists ttrss_tags;
|
||||
drop table if exists ttrss_enclosures;
|
||||
drop table if exists ttrss_settings_profiles;
|
||||
drop table if exists ttrss_entry_comments;
|
||||
drop table if exists ttrss_user_entries;
|
||||
drop table if exists ttrss_entries;
|
||||
|
@ -238,9 +239,9 @@ create table ttrss_tags (id integer primary key auto_increment,
|
|||
|
||||
create table ttrss_version (schema_version int not null) TYPE=InnoDB;
|
||||
|
||||
insert into ttrss_version values (62);
|
||||
insert into ttrss_version values (63);
|
||||
|
||||
create table ttrss_enclosures (id serial not null primary key,
|
||||
create table ttrss_enclosures (id integer primary key auto_increment,
|
||||
content_url text not null,
|
||||
content_type varchar(250) not null,
|
||||
post_id integer not null,
|
||||
|
@ -249,6 +250,12 @@ create table ttrss_enclosures (id serial not null primary key,
|
|||
index (post_id),
|
||||
foreign key (post_id) references ttrss_entries(id) ON DELETE cascade) TYPE=InnoDB;
|
||||
|
||||
create table ttrss_settings_profiles(id integer primary key auto_increment,
|
||||
title varchar(250) not null,
|
||||
owner_uid integer not null,
|
||||
index (owner_uid),
|
||||
foreign key (owner_uid) references ttrss_users(id) ON DELETE CASCADE) TYPE=InnoDB;
|
||||
|
||||
create table ttrss_prefs_types (id integer not null primary key,
|
||||
type_name varchar(100) not null) TYPE=InnoDB;
|
||||
|
||||
|
@ -389,10 +396,15 @@ insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) valu
|
|||
|
||||
insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('_MOBILE_SORT_FEEDS_UNREAD', 1, 'false', '', 1);
|
||||
|
||||
insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('_THEME_ID', 3, '0', '', 1);
|
||||
|
||||
create table ttrss_user_prefs (
|
||||
owner_uid integer not null,
|
||||
pref_name varchar(250),
|
||||
value text not null,
|
||||
profile integer,
|
||||
index (profile),
|
||||
foreign key (profile) references ttrss_settings_profiles(id) ON DELETE CASCADE,
|
||||
index (owner_uid),
|
||||
foreign key (owner_uid) references ttrss_users(id) ON DELETE CASCADE,
|
||||
index (pref_name),
|
||||
|
|
|
@ -12,6 +12,7 @@ drop table ttrss_prefs_types;
|
|||
drop table ttrss_prefs_sections;
|
||||
drop table ttrss_tags;
|
||||
drop table ttrss_enclosures;
|
||||
drop table ttrss_settings_profiles;
|
||||
drop table ttrss_entry_comments;
|
||||
drop table ttrss_user_entries;
|
||||
drop table ttrss_entries;
|
||||
|
@ -210,7 +211,7 @@ create index ttrss_tags_owner_uid_index on ttrss_tags(owner_uid);
|
|||
|
||||
create table ttrss_version (schema_version int not null);
|
||||
|
||||
insert into ttrss_version values (62);
|
||||
insert into ttrss_version values (63);
|
||||
|
||||
create table ttrss_enclosures (id serial not null primary key,
|
||||
content_url text not null,
|
||||
|
@ -219,6 +220,10 @@ create table ttrss_enclosures (id serial not null primary key,
|
|||
duration text not null,
|
||||
post_id integer references ttrss_entries(id) ON DELETE cascade NOT NULL);
|
||||
|
||||
create table ttrss_settings_profiles(id serial not null primary key,
|
||||
title varchar(250) not null,
|
||||
owner_uid integer not null references ttrss_users(id) on delete cascade);
|
||||
|
||||
create table ttrss_prefs_types (id integer not null primary key,
|
||||
type_name varchar(100) not null);
|
||||
|
||||
|
@ -355,9 +360,12 @@ insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) valu
|
|||
|
||||
insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('_MOBILE_SORT_FEEDS_UNREAD', 1, 'false', '', 1);
|
||||
|
||||
insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('_THEME_ID', 3, '0', '', 1);
|
||||
|
||||
create table ttrss_user_prefs (
|
||||
owner_uid integer not null references ttrss_users(id) ON DELETE CASCADE,
|
||||
pref_name varchar(250) not null references ttrss_prefs(pref_name) ON DELETE CASCADE,
|
||||
profile integer references ttrss_settings_profiles(id) ON DELETE CASCADE,
|
||||
value text not null);
|
||||
|
||||
create index ttrss_user_prefs_owner_uid_index on ttrss_user_prefs(owner_uid);
|
||||
|
|
18
schema/versions/mysql/63.sql
Normal file
18
schema/versions/mysql/63.sql
Normal file
|
@ -0,0 +1,18 @@
|
|||
begin;
|
||||
|
||||
create table ttrss_settings_profiles(id integer primary key auto_increment,
|
||||
title varchar(250) not null,
|
||||
owner_uid integer not null,
|
||||
index (owner_uid),
|
||||
foreign key (owner_uid) references ttrss_users(id) ON DELETE CASCADE) TYPE=InnoDB;
|
||||
|
||||
alter table ttrss_user_prefs add column profile integer;
|
||||
update ttrss_user_prefs set profile = NULL;
|
||||
|
||||
alter table ttrss_user_prefs add FOREIGN KEY (profile) REFERENCES ttrss_settings_profiles(id) ON DELETE CASCADE;
|
||||
|
||||
insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('_THEME_ID', 3, '0', '', 1);
|
||||
|
||||
update ttrss_version set schema_version = 63;
|
||||
|
||||
commit;
|
16
schema/versions/pgsql/63.sql
Normal file
16
schema/versions/pgsql/63.sql
Normal file
|
@ -0,0 +1,16 @@
|
|||
begin;
|
||||
|
||||
create table ttrss_settings_profiles(id serial not null primary key,
|
||||
title varchar(250) not null,
|
||||
owner_uid integer not null references ttrss_users(id) on delete cascade);
|
||||
|
||||
alter table ttrss_user_prefs add column profile integer;
|
||||
update ttrss_user_prefs set profile = NULL;
|
||||
|
||||
alter table ttrss_user_prefs add constraint "$3" FOREIGN KEY (profile) REFERENCES ttrss_settings_profiles(id) ON DELETE CASCADE;
|
||||
|
||||
insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('_THEME_ID', 3, '0', '', 1);
|
||||
|
||||
update ttrss_version set schema_version = 63;
|
||||
|
||||
commit;
|
|
@ -37,7 +37,7 @@ div.postReply div.postHeader {
|
|||
border-width : 0px 0px 1px 1px;
|
||||
}
|
||||
|
||||
#prefContent {
|
||||
#prefContentOuter {
|
||||
bottom : 0px;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
<link rel="stylesheet" type="text/css" href="tt-rss.css?<?php echo $dt_add ?>"/>
|
||||
|
||||
<?php $user_theme = $_SESSION["theme"];
|
||||
<?php $user_theme = get_user_theme_path($link);
|
||||
if ($user_theme) { ?>
|
||||
<link rel="stylesheet" type="text/css" href="themes/<?php echo $user_theme ?>/theme.css?<?php echo $dt_add ?>">
|
||||
<?php } ?>
|
||||
|
|
Loading…
Reference in a new issue