summaryrefslogtreecommitdiff
path: root/classes/pref
diff options
context:
space:
mode:
Diffstat (limited to 'classes/pref')
-rw-r--r--classes/pref/feeds.php86
-rw-r--r--classes/pref/prefs.php112
2 files changed, 174 insertions, 24 deletions
diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php
index eda03d126..7fb64623e 100644
--- a/classes/pref/feeds.php
+++ b/classes/pref/feeds.php
@@ -1751,7 +1751,7 @@ class Pref_Feeds extends Handler_Protected {
}
function batchSubscribe() {
- print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"rpc\">";
+ print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-feeds\">";
print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"batchaddfeeds\">";
print "<table width='100%'><tr><td>
@@ -1798,6 +1798,90 @@ class Pref_Feeds extends Handler_Protected {
</div>";
}
+ function batchAddFeeds() {
+ $cat_id = db_escape_string($this->link, $_REQUEST['cat']);
+ $feeds = explode("\n", db_escape_string($this->link, $_REQUEST['feeds']));
+ $login = db_escape_string($this->link, $_REQUEST['login']);
+ $pass = db_escape_string($this->link, $_REQUEST['pass']);
+
+ foreach ($feeds as $feed) {
+ $feed = trim($feed);
+
+ if (validate_feed_url($feed)) {
+
+ db_query($this->link, "BEGIN");
+
+ if ($cat_id == "0" || !$cat_id) {
+ $cat_qpart = "NULL";
+ } else {
+ $cat_qpart = "'$cat_id'";
+ }
+
+ $result = db_query($this->link,
+ "SELECT id FROM ttrss_feeds
+ WHERE feed_url = '$feed' AND owner_uid = ".$_SESSION["uid"]);
+
+ if (db_num_rows($result) == 0) {
+ $result = db_query($this->link,
+ "INSERT INTO ttrss_feeds
+ (owner_uid,feed_url,title,cat_id,auth_login,auth_pass,update_method)
+ VALUES ('".$_SESSION["uid"]."', '$feed',
+ '[Unknown]', $cat_qpart, '$login', '$pass', 0)");
+ }
+
+ db_query($this->link, "COMMIT");
+ }
+ }
+ }
+
+ function regenOPMLKey() {
+ $this->update_feed_access_key($this->link, 'OPML:Publish',
+ false, $_SESSION["uid"]);
+
+ $new_link = Opml::opml_publish_url($this->link);
+
+ print json_encode(array("link" => $new_link));
+ }
+
+ function regenFeedKey() {
+ $feed_id = db_escape_string($this->link, $_REQUEST['id']);
+ $is_cat = db_escape_string($this->link, $_REQUEST['is_cat']) == "true";
+
+ $new_key = $this->update_feed_access_key($this->link, $feed_id, $is_cat);
+
+ print json_encode(array("link" => $new_key));
+ }
+
+
+ private function update_feed_access_key($link, $feed_id, $is_cat, $owner_uid = false) {
+ if (!$owner_uid) $owner_uid = $_SESSION["uid"];
+
+ $sql_is_cat = bool_to_sql_bool($is_cat);
+
+ $result = db_query($link, "SELECT access_key FROM ttrss_access_keys
+ WHERE feed_id = '$feed_id' AND is_cat = $sql_is_cat
+ AND owner_uid = " . $owner_uid);
+
+ if (db_num_rows($result) == 1) {
+ $key = db_escape_string($this->link, sha1(uniqid(rand(), true)));
+
+ db_query($link, "UPDATE ttrss_access_keys SET access_key = '$key'
+ WHERE feed_id = '$feed_id' AND is_cat = $sql_is_cat
+ AND owner_uid = " . $owner_uid);
+
+ return $key;
+
+ } else {
+ return get_feed_access_key($link, $feed_id, $is_cat, $owner_uid);
+ }
+ }
+
+ // Silent
+ function clearKeys() {
+ db_query($this->link, "DELETE FROM ttrss_access_keys WHERE
+ owner_uid = " . $_SESSION["uid"]);
+ }
+
}
?>
diff --git a/classes/pref/prefs.php b/classes/pref/prefs.php
index cc523092f..938782b51 100644
--- a/classes/pref/prefs.php
+++ b/classes/pref/prefs.php
@@ -1,12 +1,62 @@
<?php
+
class Pref_Prefs extends Handler_Protected {
+ private $pref_help = array();
+ private $pref_sections = array();
+
function csrf_ignore($method) {
$csrf_ignored = array("index", "updateself", "customizecss", "editprefprofiles");
return array_search($method, $csrf_ignored) !== false;
}
+ function __construct($link, $args) {
+ parent::__construct($link, $args);
+
+ $this->pref_sections = array(
+ 1 => __('General'),
+ 2 => __('Interface'),
+ 3 => __('Advanced'),
+ 4 => __('Digest')
+ );
+
+ $this->pref_help = array(
+ "ALLOW_DUPLICATE_POSTS" => array(__("Allow duplicate articles"), ""),
+ "AUTO_ASSIGN_LABELS" => array(__("Assign articles to labels automatically"), ""),
+ "BLACKLISTED_TAGS" => array(__("Blacklisted tags"), __("When auto-detecting tags in articles these tags will not be applied (comma-separated list).")),
+ "CDM_AUTO_CATCHUP" => array(__("Automatically mark articles as read"), __("This option enables marking articles as read automatically while you scroll article list.")),
+ "CDM_EXPANDED" => array(__("Automatically expand articles in combined mode"), ""),
+ "COMBINED_DISPLAY_MODE" => array(__("Combined feed display"), __("Display expanded list of feed articles, instead of separate displays for headlines and article content")),
+ "CONFIRM_FEED_CATCHUP" => array(__("Confirm marking feed as read"), ""),
+ "DEFAULT_ARTICLE_LIMIT" => array(__("Amount of articles to display at once"), ""),
+ "DEFAULT_UPDATE_INTERVAL" => array(__("Default interval between feed updates"), ""),
+ "DIGEST_CATCHUP" => array(__("Mark articles in e-mail digest as read"), ""),
+ "DIGEST_ENABLE" => array(__("Enable e-mail digest"), __("This option enables sending daily digest of new (and unread) headlines on your configured e-mail address")),
+ "DIGEST_PREFERRED_TIME" => array(__("Try to send digests around specified time"), __("Uses UTC timezone")),
+ "ENABLE_API_ACCESS" => array(__("Enable API access"), __("Allows external clients to access this account through the API")),
+ "ENABLE_FEED_CATS" => array(__("Enable feed categories"), ""),
+ "FEEDS_SORT_BY_UNREAD" => array(__("Sort feeds by unread articles count"), ""),
+ "FRESH_ARTICLE_MAX_AGE" => array(__("Maximum age of fresh articles (in hours)"), ""),
+ "HIDE_READ_FEEDS" => array(__("Hide feeds with no unread articles"), ""),
+ "HIDE_READ_SHOWS_SPECIAL" => array(__("Show special feeds when hiding read feeds"), ""),
+ "LONG_DATE_FORMAT" => array(__("Long date format"), ""),
+ "ON_CATCHUP_SHOW_NEXT_FEED" => array(__("On catchup show next feed"), __("Automatically open next feed with unread articles after marking one as read")),
+ "PURGE_OLD_DAYS" => array(__("Purge articles after this number of days (0 - disables)"), ""),
+ "PURGE_UNREAD_ARTICLES" => array(__("Purge unread articles"), ""),
+ "REVERSE_HEADLINES" => array(__("Reverse headline order (oldest first)"), ""),
+ "SHORT_DATE_FORMAT" => array(__("Short date format"), ""),
+ "SHOW_CONTENT_PREVIEW" => array(__("Show content preview in headlines list"), ""),
+ "SORT_HEADLINES_BY_FEED_DATE" => array(__("Sort headlines by feed date"), __("Use feed-specified date to sort headlines instead of local import date.")),
+ "SSL_CERT_SERIAL" => array(__("Login with an SSL certificate"), __("Click to register your SSL client certificate with tt-rss")),
+ "STRIP_IMAGES" => array(__("Do not embed images in articles"), ""),
+ "STRIP_UNSAFE_TAGS" => array(__("Strip unsafe tags from articles"), __("Strip all but most common HTML tags when reading articles.")),
+ "USER_STYLESHEET" => array(__("Customize stylesheet"), __("Customize CSS stylesheet to your liking")),
+ "USER_TIMEZONE" => array(__("User timezone"), ""),
+ "VFEED_GROUP_BY_FEED" => array(__("Group headlines in virtual feeds"), __("Special feeds, labels, and categories are grouped by originating feeds"))
+ );
+ }
+
function changepassword() {
$old_pw = $_POST["old_password"];
@@ -120,7 +170,7 @@ class Pref_Prefs extends Handler_Protected {
global $access_level_names;
$prefs_blacklist = array("STRIP_UNSAFE_TAGS", "REVERSE_HEADLINES",
- "SORT_HEADLINES_BY_FEED_DATE");
+ "SORT_HEADLINES_BY_FEED_DATE", "DEFAULT_ARTICLE_LIMIT");
/* "FEEDS_SORT_BY_UNREAD", "HIDE_READ_FEEDS", "REVERSE_HEADLINES" */
@@ -416,18 +466,17 @@ class Pref_Prefs extends Handler_Protected {
$access_query = 'true';
$result = db_query($this->link, "SELECT DISTINCT
- ttrss_user_prefs.pref_name,short_desc,help_text,value,type_name,
+ ttrss_user_prefs.pref_name,value,type_name,
ttrss_prefs_sections.order_id,
- section_name,def_value,section_id
+ 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
$access_query AND
- short_desc != '' AND
owner_uid = ".$_SESSION["uid"]."
- ORDER BY ttrss_prefs_sections.order_id,short_desc");
+ ORDER BY ttrss_prefs_sections.order_id,pref_name");
$lnum = 0;
@@ -441,12 +490,22 @@ class Pref_Prefs extends Handler_Protected {
continue;
}
+ $type_name = $line["type_name"];
+ $pref_name = $line["pref_name"];
+ $section_name = $this->getSectionName($line["section_id"]);
+ $value = $line["value"];
+
+ $short_desc = $this->getShortDesc($pref_name);
+ $help_text = $this->getHelpText($pref_name);
+
+ if (!$short_desc) continue;
+
if ($_SESSION["profile"] && in_array($line["pref_name"],
$profile_blacklist)) {
continue;
}
- if ($active_section != $line["section_name"]) {
+ if ($active_section != $line["section_id"]) {
if ($active_section != "") {
print "</table>";
@@ -454,24 +513,18 @@ class Pref_Prefs extends Handler_Protected {
print "<table width=\"100%\" class=\"prefPrefsList\">";
- $active_section = $line["section_name"];
+ $active_section = $line["section_id"];
- print "<tr><td colspan=\"3\"><h3>".__($active_section)."</h3></td></tr>";
+ print "<tr><td colspan=\"3\"><h3>".$section_name."</h3></td></tr>";
$lnum = 0;
}
print "<tr>";
- $type_name = $line["type_name"];
- $pref_name = $line["pref_name"];
- $value = $line["value"];
- $def_value = $line["def_value"];
- $help_text = $line["help_text"];
-
print "<td width=\"40%\" class=\"prefName\" id=\"$pref_name\">";
print "<label for='CB_$pref_name'>";
- print __($line["short_desc"]);
+ print $short_desc;
print "</label>";
if ($help_text) print "<div class=\"prefHelp\">".__($help_text)."</div>";
@@ -498,13 +551,6 @@ class Pref_Prefs extends Handler_Protected {
'dojoType="dijit.form.Select"');
- } else if ($pref_name == "DEFAULT_ARTICLE_LIMIT") {
-
- $limits = array(15, 30, 45, 60);
-
- print_select($pref_name, $value, $limits,
- 'dojoType="dijit.form.Select"');
-
} else if ($pref_name == "DEFAULT_UPDATE_INTERVAL") {
global $update_intervals_nodefault;
@@ -528,7 +574,7 @@ class Pref_Prefs extends Handler_Protected {
print "<input type='checkbox' name='$pref_name' $checked $disabled
dojoType='dijit.form.CheckBox' id='CB_$pref_name' value='1'>";
- } else if (array_search($pref_name, array('FRESH_ARTICLE_MAX_AGE', 'DEFAULT_ARTICLE_LIMIT',
+ } else if (array_search($pref_name, array('FRESH_ARTICLE_MAX_AGE',
'PURGE_OLD_DAYS', 'LONG_DATE_FORMAT', 'SHORT_DATE_FORMAT')) !== false) {
$regexp = ($type_name == 'integer') ? 'regexp="^\d*$"' : '';
@@ -1014,6 +1060,26 @@ class Pref_Prefs extends Handler_Protected {
}
+ private function getShortDesc($pref_name) {
+ if (isset($this->pref_help[$pref_name])) {
+ return $this->pref_help[$pref_name][0];
+ }
+ return "";
+ }
+ private function getHelpText($pref_name) {
+ if (isset($this->pref_help[$pref_name])) {
+ return $this->pref_help[$pref_name][1];
+ }
+ return "";
+ }
+
+ private function getSectionName($id) {
+ if (isset($this->pref_sections[$id])) {
+ return $this->pref_sections[$id];
+ }
+
+ return "";
+ }
}
?>