diff --git a/backend.php b/backend.php index 9e6da8d2..1c7b3ffb 100644 --- a/backend.php +++ b/backend.php @@ -143,6 +143,8 @@ return; } + $op = str_replace("-", "_", $op); + if (class_exists($op)) { $handler = new $op($link, $_REQUEST); @@ -161,11 +163,6 @@ switch($op) { // Select action according to $op value. - case "pref-feeds": - require_once "modules/pref-feeds.php"; - module_pref_feeds($link); - break; // pref-feeds - case "pref-filters": require_once "modules/pref-filters.php"; module_pref_filters($link); diff --git a/classes/pref_feeds.php b/classes/pref_feeds.php new file mode 100644 index 00000000..bf15bf25 --- /dev/null +++ b/classes/pref_feeds.php @@ -0,0 +1,1538 @@ +"; + } + + function renamecat() { + $title = db_escape_string($_REQUEST['title']); + $id = db_escape_string($_REQUEST['id']); + + if ($title) { + db_query($this->link, "UPDATE ttrss_feed_categories SET + title = '$title' WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); + } + return; + } + + function remtwitterinfo() { + + db_query($this->link, "UPDATE ttrss_users SET twitter_oauth = NULL + WHERE id = " . $_SESSION['uid']); + + return; + } + + function getfeedtree() { + + $search = $_SESSION["prefs_feed_search"]; + + if ($search) $search_qpart = " AND LOWER(title) LIKE LOWER('%$search%')"; + + $root = array(); + $root['id'] = 'root'; + $root['name'] = __('Feeds'); + $root['items'] = array(); + $root['type'] = 'category'; + + if (get_pref($this->link, 'ENABLE_FEED_CATS')) { + + $result = db_query($this->link, "SELECT id, title FROM ttrss_feed_categories + WHERE owner_uid = " . $_SESSION["uid"] . " ORDER BY order_id, title"); + + while ($line = db_fetch_assoc($result)) { + $cat = array(); + $cat['id'] = 'CAT:' . $line['id']; + $cat['bare_id'] = $feed_id; + $cat['name'] = $line['title']; + $cat['items'] = array(); + $cat['checkbox'] = false; + $cat['type'] = 'category'; + + $feed_result = db_query($this->link, "SELECT id, title, last_error, + ".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated + FROM ttrss_feeds + WHERE cat_id = '".$line['id']."' AND owner_uid = ".$_SESSION["uid"]. + "$search_qpart ORDER BY order_id, title"); + + while ($feed_line = db_fetch_assoc($feed_result)) { + $feed = array(); + $feed['id'] = 'FEED:' . $feed_line['id']; + $feed['bare_id'] = $feed_line['id']; + $feed['name'] = $feed_line['title']; + $feed['checkbox'] = false; + $feed['error'] = $feed_line['last_error']; + $feed['icon'] = getFeedIcon($feed_line['id']); + $feed['param'] = make_local_datetime($this->link, + $feed_line['last_updated'], true); + + array_push($cat['items'], $feed); + } + + $cat['param'] = T_sprintf('(%d feeds)', count($cat['items'])); + + if (count($cat['items']) > 0) + array_push($root['items'], $cat); + + $root['param'] += count($cat['items']); + } + + /* Uncategorized is a special case */ + + $cat = array(); + $cat['id'] = 'CAT:0'; + $cat['bare_id'] = 0; + $cat['name'] = __("Uncategorized"); + $cat['items'] = array(); + $cat['type'] = 'category'; + $cat['checkbox'] = false; + + $feed_result = db_query($this->link, "SELECT id, title,last_error, + ".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated + FROM ttrss_feeds + WHERE cat_id IS NULL AND owner_uid = ".$_SESSION["uid"]. + "$search_qpart ORDER BY order_id, title"); + + while ($feed_line = db_fetch_assoc($feed_result)) { + $feed = array(); + $feed['id'] = 'FEED:' . $feed_line['id']; + $feed['bare_id'] = $feed_line['id']; + $feed['name'] = $feed_line['title']; + $feed['checkbox'] = false; + $feed['error'] = $feed_line['last_error']; + $feed['icon'] = getFeedIcon($feed_line['id']); + $feed['param'] = make_local_datetime($this->link, + $feed_line['last_updated'], true); + + array_push($cat['items'], $feed); + } + + $cat['param'] = T_sprintf('(%d feeds)', count($cat['items'])); + + if (count($cat['items']) > 0) + array_push($root['items'], $cat); + + $root['param'] += count($cat['items']); + $root['param'] = T_sprintf('(%d feeds)', $root['param']); + + } else { + $feed_result = db_query($this->link, "SELECT id, title, last_error, + ".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated + FROM ttrss_feeds + WHERE owner_uid = ".$_SESSION["uid"]. + "$search_qpart ORDER BY order_id, title"); + + while ($feed_line = db_fetch_assoc($feed_result)) { + $feed = array(); + $feed['id'] = 'FEED:' . $feed_line['id']; + $feed['bare_id'] = $feed_line['id']; + $feed['name'] = $feed_line['title']; + $feed['checkbox'] = false; + $feed['error'] = $feed_line['last_error']; + $feed['icon'] = getFeedIcon($feed_line['id']); + $feed['param'] = make_local_datetime($this->link, + $feed_line['last_updated'], true); + + array_push($root['items'], $feed); + } + + $root['param'] = T_sprintf('(%d feeds)', count($root['items'])); + + } + + $fl = array(); + $fl['identifier'] = 'id'; + $fl['label'] = 'name'; + $fl['items'] = array($root); + + print json_encode($fl); + return; + } + + function catsortreset() { + db_query($this->link, "UPDATE ttrss_feed_categories + SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"]); + return; + } + + function feedsortreset() { + db_query($this->link, "UPDATE ttrss_feeds + SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"]); + return; + } + + function savefeedorder() { + $data = json_decode($_POST['payload'], true); + + if (is_array($data) && is_array($data['items'])) { + $cat_order_id = 0; + + $data_map = array(); + + foreach ($data['items'] as $item) { + + if ($item['id'] != 'root') { + if (is_array($item['items'])) { + if (isset($item['items']['_reference'])) { + $data_map[$item['id']] = array($item['items']); + } else { + $data_map[$item['id']] =& $item['items']; + } + } + } + } + + foreach ($data['items'][0]['items'] as $item) { + $id = $item['_reference']; + $bare_id = substr($id, strpos($id, ':')+1); + + ++$cat_order_id; + + if ($bare_id > 0) { + db_query($this->link, "UPDATE ttrss_feed_categories + SET order_id = '$cat_order_id' WHERE id = '$bare_id' AND + owner_uid = " . $_SESSION["uid"]); + } + + $feed_order_id = 0; + + if (is_array($data_map[$id])) { + foreach ($data_map[$id] as $feed) { + $id = $feed['_reference']; + $feed_id = substr($id, strpos($id, ':')+1); + + if ($bare_id != 0) + $cat_query = "cat_id = '$bare_id'"; + else + $cat_query = "cat_id = NULL"; + + db_query($this->link, "UPDATE ttrss_feeds + SET order_id = '$feed_order_id', + $cat_query + WHERE id = '$feed_id' AND + owner_uid = " . $_SESSION["uid"]); + + ++$feed_order_id; + } + } + } + } + + return; + } + + function removeicon() { + $feed_id = db_escape_string($_REQUEST["feed_id"]); + + $result = db_query($this->link, "SELECT id FROM ttrss_feeds + WHERE id = '$feed_id' AND owner_uid = ". $_SESSION["uid"]); + + if (db_num_rows($result) != 0) { + unlink(ICONS_DIR . "/$feed_id.ico"); + } + + return; + } + + function uploadicon() { + $icon_file = $_FILES['icon_file']['tmp_name']; + $feed_id = db_escape_string($_REQUEST["feed_id"]); + + if (is_file($icon_file) && $feed_id) { + if (filesize($icon_file) < 20000) { + + $result = db_query($this->link, "SELECT id FROM ttrss_feeds + WHERE id = '$feed_id' AND owner_uid = ". $_SESSION["uid"]); + + if (db_num_rows($result) != 0) { + unlink(ICONS_DIR . "/$feed_id.ico"); + move_uploaded_file($icon_file, ICONS_DIR . "/$feed_id.ico"); + $rc = 0; + } else { + $rc = 2; + } + } else { + $rc = 1; + } + } else { + $rc = 2; + } + + print ""; + return; + } + + function editfeed() { + global $purge_intervals; + global $update_intervals; + global $update_methods; + + $feed_id = db_escape_string($_REQUEST["id"]); + + $result = db_query($this->link, + "SELECT * FROM ttrss_feeds WHERE id = '$feed_id' AND + owner_uid = " . $_SESSION["uid"]); + + $title = htmlspecialchars(db_fetch_result($result, + 0, "title")); + + print ""; + print ""; + print ""; + + print "
".__("Feed")."
"; + print "
"; + + /* Title */ + + print ""; + + /* Feed URL */ + + $feed_url = db_fetch_result($result, 0, "feed_url"); + $feed_url = htmlspecialchars(db_fetch_result($result, + 0, "feed_url")); + + print "
"; + + print __('URL:') . " "; + print ""; + + $last_error = db_fetch_result($result, 0, "last_error"); + + if ($last_error) { + print " (error)"; + + } + + /* Category */ + + if (get_pref($this->link, 'ENABLE_FEED_CATS')) { + + $cat_id = db_fetch_result($result, 0, "cat_id"); + + print "
"; + + print __('Place in category:') . " "; + + print_feed_cat_select($this->link, "cat_id", $cat_id, + 'dojoType="dijit.form.Select"'); + } + + print "
"; + + print "
".__("Update")."
"; + print "
"; + + /* Update Interval */ + + $update_interval = db_fetch_result($result, 0, "update_interval"); + + print_select_hash("update_interval", $update_interval, $update_intervals, + 'dojoType="dijit.form.Select"'); + + /* Update method */ + + $update_method = db_fetch_result($result, 0, "update_method", + 'dojoType="dijit.form.Select"'); + + print " " . __('using') . " "; + print_select_hash("update_method", $update_method, $update_methods, + 'dojoType="dijit.form.Select"'); + + $purge_interval = db_fetch_result($result, 0, "purge_interval"); + + + /* Purge intl */ + + print "
"; + print __('Article purging:') . " "; + + print_select_hash("purge_interval", $purge_interval, $purge_intervals, + 'dojoType="dijit.form.Select" ' . + ((FORCE_ARTICLE_PURGE == 0) ? "" : 'disabled="1"')); + + print "
"; + print "
".__("Authentication")."
"; + print "
"; + + $auth_login = htmlspecialchars(db_fetch_result($result, 0, "auth_login")); + + print "
"; + + $auth_pass = htmlspecialchars(db_fetch_result($result, 0, "auth_pass")); + + print ""; + + print "
+ ".__('Hint: you need to fill in your login information if your feed requires authentication, except for Twitter feeds.')." +
"; + + print "
"; + print "
".__("Options")."
"; + print "
"; + + $private = sql_bool_to_bool(db_fetch_result($result, 0, "private")); + + if ($private) { + $checked = "checked=\"1\""; + } else { + $checked = ""; + } + + print " "; + + $rtl_content = sql_bool_to_bool(db_fetch_result($result, 0, "rtl_content")); + + if ($rtl_content) { + $checked = "checked=\"1\""; + } else { + $checked = ""; + } + + print "
 "; + + $include_in_digest = sql_bool_to_bool(db_fetch_result($result, 0, "include_in_digest")); + + if ($include_in_digest) { + $checked = "checked=\"1\""; + } else { + $checked = ""; + } + + print "
 "; + + + $always_display_enclosures = sql_bool_to_bool(db_fetch_result($result, 0, "always_display_enclosures")); + + if ($always_display_enclosures) { + $checked = "checked"; + } else { + $checked = ""; + } + + print "
 "; + + + $cache_images = sql_bool_to_bool(db_fetch_result($result, 0, "cache_images")); + + if ($cache_images) { + $checked = "checked=\"1\""; + } else { + $checked = ""; + } + + if (SIMPLEPIE_CACHE_IMAGES) { + print "
 "; + } + + $mark_unread_on_update = sql_bool_to_bool(db_fetch_result($result, 0, "mark_unread_on_update")); + + if ($mark_unread_on_update) { + $checked = "checked"; + } else { + $checked = ""; + } + + print "
 "; + + $update_on_checksum_change = sql_bool_to_bool(db_fetch_result($result, 0, "update_on_checksum_change")); + + if ($update_on_checksum_change) { + $checked = "checked"; + } else { + $checked = ""; + } + + print "
 "; + + print "
"; + + /* Icon */ + + print "
".__("Icon")."
"; + print "
"; + + print ""; + + print "
+ + + + + + +
"; + + print "
"; + + $title = htmlspecialchars($title, ENT_QUOTES); + + print "
+
+ "; + + if (PUBSUBHUBBUB_ENABLED) { + $pubsub_state = db_fetch_result($result, 0, "pubsub_state"); + $pubsub_btn_disabled = ($pubsub_state == 2) ? "" : "disabled=\"1\""; + + print ""; + } + + print "
"; + + print "
". + __('Resets PubSubHubbub subscription status for push-enabled feeds.')."
"; + + print " + +
"; + + return; + } + + function editfeeds() { + global $purge_intervals; + global $update_intervals; + global $update_methods; + + $feed_ids = db_escape_string($_REQUEST["ids"]); + + print ""; + print ""; + print ""; + + print "
".__("Feed")."
"; + print "
"; + + /* Title */ + + print ""; + + $this->batch_edit_cbox("title"); + + /* Feed URL */ + + print "
"; + + print __('URL:') . " "; + print ""; + + $this->batch_edit_cbox("feed_url"); + + /* Category */ + + if (get_pref($this->link, 'ENABLE_FEED_CATS')) { + + print "
"; + + print __('Place in category:') . " "; + + print_feed_cat_select($this->link, "cat_id", $cat_id, + 'disabled="1" dojoType="dijit.form.Select"'); + + $this->batch_edit_cbox("cat_id"); + + } + + print "
"; + + print "
".__("Update")."
"; + print "
"; + + /* Update Interval */ + + print_select_hash("update_interval", $update_interval, $update_intervals, + 'disabled="1" dojoType="dijit.form.Select"'); + + $this->batch_edit_cbox("update_interval"); + + /* Update method */ + + print " " . __('using') . " "; + print_select_hash("update_method", $update_method, $update_methods, + 'disabled="1" dojoType="dijit.form.Select"'); + $this->batch_edit_cbox("update_method"); + + /* Purge intl */ + + if (FORCE_ARTICLE_PURGE == 0) { + + print "
"; + + print __('Article purging:') . " "; + + print_select_hash("purge_interval", $purge_interval, $purge_intervals, + 'disabled="1" dojoType="dijit.form.Select"'); + + $this->batch_edit_cbox("purge_interval"); + } + + print "
"; + print "
".__("Authentication")."
"; + print "
"; + + print ""; + + $this->batch_edit_cbox("auth_login"); + + print "
"; + + $this->batch_edit_cbox("auth_pass"); + + print "
"; + print "
".__("Options")."
"; + print "
"; + + print " "; + + print " "; $this->batch_edit_cbox("private", "private_l"); + + print "
 "; + + print " "; $this->batch_edit_cbox("rtl_content", "rtl_content_l"); + + print "
 "; + + print " "; $this->batch_edit_cbox("include_in_digest", "include_in_digest_l"); + + print "
 "; + + print " "; $this->batch_edit_cbox("always_display_enclosures", "always_display_enclosures_l"); + + if (SIMPLEPIE_CACHE_IMAGES) { + print "
 "; + + + print " "; $this->batch_edit_cbox("cache_images", "cache_images_l"); + } + + print "
 "; + + print " "; $this->batch_edit_cbox("mark_unread_on_update", "mark_unread_on_update_l"); + + print "
 "; + + print " "; $this->batch_edit_cbox("update_on_checksum_change", "update_on_checksum_change_l"); + + print "
"; + + print "
+ + +
"; + + return; + } + + function batchEditSave() { + return editsaveops(true); + } + + function editSave() { + return editsaveops(false); + } + + function editsaveops($batch) { + + $feed_title = db_escape_string(trim($_POST["title"])); + $feed_link = db_escape_string(trim($_POST["feed_url"])); + $upd_intl = (int) db_escape_string($_POST["update_interval"]); + $purge_intl = (int) db_escape_string($_POST["purge_interval"]); + $feed_id = (int) db_escape_string($_POST["id"]); /* editSave */ + $feed_ids = db_escape_string($_POST["ids"]); /* batchEditSave */ + $cat_id = (int) db_escape_string($_POST["cat_id"]); + $auth_login = db_escape_string(trim($_POST["auth_login"])); + $auth_pass = db_escape_string(trim($_POST["auth_pass"])); + $private = checkbox_to_sql_bool(db_escape_string($_POST["private"])); + $rtl_content = checkbox_to_sql_bool(db_escape_string($_POST["rtl_content"])); + $include_in_digest = checkbox_to_sql_bool( + db_escape_string($_POST["include_in_digest"])); + $cache_images = checkbox_to_sql_bool( + db_escape_string($_POST["cache_images"])); + $update_method = (int) db_escape_string($_POST["update_method"]); + + $always_display_enclosures = checkbox_to_sql_bool( + db_escape_string($_POST["always_display_enclosures"])); + + $mark_unread_on_update = checkbox_to_sql_bool( + db_escape_string($_POST["mark_unread_on_update"])); + + $update_on_checksum_change = checkbox_to_sql_bool( + db_escape_string($_POST["update_on_checksum_change"])); + + if (get_pref($this->link, 'ENABLE_FEED_CATS')) { + if ($cat_id && $cat_id != 0) { + $category_qpart = "cat_id = '$cat_id',"; + $category_qpart_nocomma = "cat_id = '$cat_id'"; + } else { + $category_qpart = 'cat_id = NULL,'; + $category_qpart_nocomma = 'cat_id = NULL'; + } + } else { + $category_qpart = ""; + $category_qpart_nocomma = ""; + } + + if (SIMPLEPIE_CACHE_IMAGES) { + $cache_images_qpart = "cache_images = $cache_images,"; + } else { + $cache_images_qpart = ""; + } + + if ($method == "editSave") { + + $result = db_query($this->link, "UPDATE ttrss_feeds SET + $category_qpart + title = '$feed_title', feed_url = '$feed_link', + update_interval = '$upd_intl', + purge_interval = '$purge_intl', + auth_login = '$auth_login', + auth_pass = '$auth_pass', + private = $private, + rtl_content = $rtl_content, + $cache_images_qpart + include_in_digest = $include_in_digest, + always_display_enclosures = $always_display_enclosures, + mark_unread_on_update = $mark_unread_on_update, + update_on_checksum_change = $update_on_checksum_change, + update_method = '$update_method' + WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]); + + } else if ($batch) { + $feed_data = array(); + + foreach (array_keys($_POST) as $k) { + if ($k != "op" && $k != "method" && $k != "ids") { + $feed_data[$k] = $_POST[$k]; + } + } + + db_query($this->link, "BEGIN"); + + foreach (array_keys($feed_data) as $k) { + + $qpart = ""; + + switch ($k) { + case "title": + $qpart = "title = '$feed_title'"; + break; + + case "feed_url": + $qpart = "feed_url = '$feed_link'"; + break; + + case "update_interval": + $qpart = "update_interval = '$upd_intl'"; + break; + + case "purge_interval": + $qpart = "purge_interval = '$purge_intl'"; + break; + + case "auth_login": + $qpart = "auth_login = '$auth_login'"; + break; + + case "auth_pass": + $qpart = "auth_pass = '$auth_pass'"; + break; + + case "private": + $qpart = "private = '$private'"; + break; + + case "include_in_digest": + $qpart = "include_in_digest = '$include_in_digest'"; + break; + + case "always_display_enclosures": + $qpart = "always_display_enclosures = '$always_display_enclosures'"; + break; + + case "mark_unread_on_update": + $qpart = "mark_unread_on_update = '$mark_unread_on_update'"; + break; + + case "update_on_checksum_change": + $qpart = "update_on_checksum_change = '$update_on_checksum_change'"; + break; + + case "cache_images": + $qpart = "cache_images = '$cache_images'"; + break; + + case "rtl_content": + $qpart = "rtl_content = '$rtl_content'"; + break; + + case "update_method": + $qpart = "update_method = '$update_method'"; + break; + + case "cat_id": + $qpart = $category_qpart_nocomma; + break; + + } + + if ($qpart) { + db_query($this->link, + "UPDATE ttrss_feeds SET $qpart WHERE id IN ($feed_ids) + AND owner_uid = " . $_SESSION["uid"]); + print "
"; + } + } + + db_query($this->link, "COMMIT"); + } + return; + } + + function resetPubSub() { + + $ids = db_escape_string($_REQUEST["ids"]); + + db_query($this->link, "UPDATE ttrss_feeds SET pubsub_state = 0 WHERE id IN ($ids) + AND owner_uid = " . $_SESSION["uid"]); + + return; + } + + function remove() { + + $ids = split(",", db_escape_string($_REQUEST["ids"])); + + foreach ($ids as $id) { + remove_feed($this->link, $id, $_SESSION["uid"]); + } + + return; + } + + function clear() { + $id = db_escape_string($_REQUEST["id"]); + clear_feed_articles($this->link, $id); + } + + function rescore() { + $ids = split(",", db_escape_string($_REQUEST["ids"])); + + foreach ($ids as $id) { + + $filters = load_filters($this->link, $id, $_SESSION["uid"], 6); + + $result = db_query($this->link, "SELECT + title, content, link, ref_id, author,". + SUBSTRING_FOR_DATE."(updated, 1, 19) AS updated + FROM + ttrss_user_entries, ttrss_entries + WHERE ref_id = id AND feed_id = '$id' AND + owner_uid = " .$_SESSION['uid']." + "); + + $scores = array(); + + while ($line = db_fetch_assoc($result)) { + + $tags = get_article_tags($this->link, $line["ref_id"]); + + $article_filters = get_article_filters($filters, $line['title'], + $line['content'], $line['link'], strtotime($line['updated']), + $line['author'], $tags); + + $new_score = calculate_article_score($article_filters); + + if (!$scores[$new_score]) $scores[$new_score] = array(); + + array_push($scores[$new_score], $line['ref_id']); + } + + foreach (array_keys($scores) as $s) { + if ($s > 1000) { + db_query($this->link, "UPDATE ttrss_user_entries SET score = '$s', + marked = true WHERE + ref_id IN (" . join(',', $scores[$s]) . ")"); + } else if ($s < -500) { + db_query($this->link, "UPDATE ttrss_user_entries SET score = '$s', + unread = false WHERE + ref_id IN (" . join(',', $scores[$s]) . ")"); + } else { + db_query($this->link, "UPDATE ttrss_user_entries SET score = '$s' WHERE + ref_id IN (" . join(',', $scores[$s]) . ")"); + } + } + } + + print __("All done."); + + } + + function rescoreAll() { + + $result = db_query($this->link, + "SELECT id FROM ttrss_feeds WHERE owner_uid = " . $_SESSION['uid']); + + while ($feed_line = db_fetch_assoc($result)) { + + $id = $feed_line["id"]; + + $filters = load_filters($this->link, $id, $_SESSION["uid"], 6); + + $tmp_result = db_query($this->link, "SELECT + title, content, link, ref_id, author,". + SUBSTRING_FOR_DATE."(updated, 1, 19) AS updated + FROM + ttrss_user_entries, ttrss_entries + WHERE ref_id = id AND feed_id = '$id' AND + owner_uid = " .$_SESSION['uid']." + "); + + $scores = array(); + + while ($line = db_fetch_assoc($tmp_result)) { + + $tags = get_article_tags($this->link, $line["ref_id"]); + + $article_filters = get_article_filters($filters, $line['title'], + $line['content'], $line['link'], strtotime($line['updated']), + $line['author'], $tags); + + $new_score = calculate_article_score($article_filters); + + if (!$scores[$new_score]) $scores[$new_score] = array(); + + array_push($scores[$new_score], $line['ref_id']); + } + + foreach (array_keys($scores) as $s) { + if ($s > 1000) { + db_query($this->link, "UPDATE ttrss_user_entries SET score = '$s', + marked = true WHERE + ref_id IN (" . join(',', $scores[$s]) . ")"); + } else { + db_query($this->link, "UPDATE ttrss_user_entries SET score = '$s' WHERE + ref_id IN (" . join(',', $scores[$s]) . ")"); + } + } + } + + print __("All done."); + + } + + function add() { + $feed_url = db_escape_string(trim($_REQUEST["feed_url"])); + $cat_id = db_escape_string($_REQUEST["cat_id"]); + $p_from = db_escape_string($_REQUEST["from"]); + + /* only read authentication information from POST */ + + $auth_login = db_escape_string(trim($_POST["auth_login"])); + $auth_pass = db_escape_string(trim($_POST["auth_pass"])); + + if ($p_from != 'tt-rss') { + header("Content-Type: text/html"); + print " + + Tiny Tiny RSS + + + + \"Tiny +

Subscribe to feed...

"; + } + + $rc = subscribe_to_feed($this->link, $feed_url, $cat_id, $auth_login, $auth_pass); + + switch ($rc) { + case 1: + print_notice(T_sprintf("Subscribed to %s.", $feed_url)); + break; + case 2: + print_error(T_sprintf("Could not subscribe to %s.", $feed_url)); + break; + case 3: + print_error(T_sprintf("No feeds found in %s.", $feed_url)); + break; + case 0: + print_warning(T_sprintf("Already subscribed to %s.", $feed_url)); + break; + case 4: + print_notice("Multiple feed URLs found."); + + $feed_urls = get_feeds_from_html($feed_url); + break; + case 5: + print_error(T_sprintf("Could not subscribe to %s.
Can't download the Feed URL.", $feed_url)); + break; + } + + if ($p_from != 'tt-rss') { + + if ($feed_urls) { + + print "
"; + print ""; + print ""; + print ""; + + print ""; + + print "
"; + } + + $tp_uri = get_self_url_prefix() . "/prefs.php"; + $tt_uri = get_self_url_prefix(); + + if ($rc <= 2){ + $result = db_query($this->link, "SELECT id FROM ttrss_feeds WHERE + feed_url = '$feed_url' AND owner_uid = " . $_SESSION["uid"]); + + $feed_id = db_fetch_result($result, 0, "id"); + } else { + $feed_id = 0; + } + print "

"; + + if ($feed_id) { + print "

+ + + + +
"; + } + + print "
+ +

"; + + print ""; + return; + } + } + + function categorize() { + $ids = split(",", db_escape_string($_REQUEST["ids"])); + + $cat_id = db_escape_string($_REQUEST["cat_id"]); + + if ($cat_id == 0) { + $cat_id_qpart = 'NULL'; + } else { + $cat_id_qpart = "'$cat_id'"; + } + + db_query($this->link, "BEGIN"); + + foreach ($ids as $id) { + + db_query($this->link, "UPDATE ttrss_feeds SET cat_id = $cat_id_qpart + WHERE id = '$id' + AND owner_uid = " . $_SESSION["uid"]); + + } + + db_query($this->link, "COMMIT"); + } + + function editCats() { + + $action = $_REQUEST["action"]; + + if ($action == "save") { + + $cat_title = db_escape_string(trim($_REQUEST["value"])); + $cat_id = db_escape_string($_REQUEST["cid"]); + + db_query($this->link, "BEGIN"); + + $result = db_query($this->link, "SELECT title FROM ttrss_feed_categories + WHERE id = '$cat_id' AND owner_uid = ".$_SESSION["uid"]); + + if (db_num_rows($result) == 1) { + + $old_title = db_fetch_result($result, 0, "title"); + + if ($cat_title != "") { + $result = db_query($this->link, "UPDATE ttrss_feed_categories SET + title = '$cat_title' WHERE id = '$cat_id' AND + owner_uid = ".$_SESSION["uid"]); + + print $cat_title; + } else { + print $old_title; + } + } else { + print $_REQUEST["value"]; + } + + db_query($this->link, "COMMIT"); + + return; + + } + + if ($action == "add") { + + $feed_cat = db_escape_string(trim($_REQUEST["cat"])); + + if (!add_feed_category($this->link, $feed_cat)) + print_warning(T_sprintf("Category $%s already exists in the database.", $feed_cat)); + + } + + if ($action == "remove") { + + $ids = split(",", db_escape_string($_REQUEST["ids"])); + + foreach ($ids as $id) { + remove_feed_category($this->link, $id, $_SESSION["uid"]); + } + } + + print "
+ +
"; + + $result = db_query($this->link, "SELECT title,id FROM ttrss_feed_categories + WHERE owner_uid = ".$_SESSION["uid"]." + ORDER BY title"); + + if (db_num_rows($result) != 0) { + + print "
"; + + print ""; + + $lnum = 0; + + while ($line = db_fetch_assoc($result)) { + + $class = ($lnum % 2) ? "even" : "odd"; + + $cat_id = $line["id"]; + $this_row_id = "id=\"FCATR-$cat_id\""; + + print ""; + + $edit_title = htmlspecialchars($line["title"]); + + print ""; + + print ""; + + ++$lnum; + } + + print "
"; + + print "" . $edit_title . + " + "; + + print "
"; + print "
"; + + } else { + print "

".__('No feed categories defined.')."

"; + } + + print "
+
+ +
"; + + print "
"; + + return; + + } + + function index() { + + print "
"; + print "
"; + + $result = db_query($this->link, "SELECT COUNT(id) AS num_errors + FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ".$_SESSION["uid"]); + + $num_errors = db_fetch_result($result, 0, "num_errors"); + + if ($num_errors > 0) { + + $error_button = ""; + } + + if (DB_TYPE == "pgsql") { + $interval_qpart = "NOW() - INTERVAL '3 months'"; + } else { + $interval_qpart = "DATE_SUB(NOW(), INTERVAL 3 MONTH)"; + } + + $result = db_query($this->link, "SELECT COUNT(*) AS num_inactive FROM ttrss_feeds WHERE + (SELECT MAX(updated) FROM ttrss_entries, ttrss_user_entries WHERE + ttrss_entries.id = ref_id AND + ttrss_user_entries.feed_id = ttrss_feeds.id) < $interval_qpart AND + ttrss_feeds.owner_uid = ".$_SESSION["uid"]); + + $num_inactive = db_fetch_result($result, 0, "num_inactive"); + + if ($num_inactive > 0) { + $inactive_button = ""; + } + + $feed_search = db_escape_string($_REQUEST["search"]); + + if (array_key_exists("search", $_REQUEST)) { + $_SESSION["prefs_feed_search"] = $feed_search; + } else { + $feed_search = $_SESSION["prefs_feed_search"]; + } + + print '
'; + + print "
"; #toolbar + + print "
+ + +
"; + + print "
". + "" . __('Select').""; + print "
"; + print "
".__('All')."
"; + print "
".__('None')."
"; + print "
"; + + print "
". + "" . __('Feeds').""; + print "
"; + print "
".__('Subscribe to feed')."
"; + print "
".__('Edit selected feeds')."
"; + print "
".__('Reset sort order')."
"; + print "
"; + + if (get_pref($this->link, 'ENABLE_FEED_CATS')) { + print "
". + "" . __('Categories').""; + print "
"; + print "
".__('Edit categories')."
"; + print "
".__('Reset sort order')."
"; + print "
"; + + } + + print $error_button; + print $inactive_button; + + print " "; + + if (defined('_ENABLE_FEED_DEBUGGING')) { + + print ""; + + } + + print "
"; # toolbar + + //print '
'; + print '
'; + + print "
+ ". + __("Loading, please wait...")."
"; + + print "
+
+
+
+
+ + +
"; + + print "
+ ".__('Hint: you can drag feeds and categories around.')." +
"; + + print '
'; + print '
'; + + print "
"; # feeds pane + + print "
"; + + print "

" . __("Using OPML you can export and import your feeds and Tiny Tiny RSS settings.") . " "; + + print "" . __("Note: Only main settings profile can be migrated using OPML.") . ""; + + print "

"; + + print "

" . __("Import") . "

"; + + print "
"; + + print "
+   + + + "; + + print "

" . __("Export") . "

"; + + print "

" . __('Filename:') . + "  " . + __('Include settings') . "" . + + "

"; + + print "

" . __("Publish") . "

"; + + print "

".__('Your OPML can be published publicly and can be subscribed by anyone who knows the URL below.') . " "; + + print "" . __("Note: Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds.") . "" . "

"; + + print " "; + + + print "
"; # pane + + if (strpos($_SERVER['HTTP_USER_AGENT'], "Firefox") !== false) { + + print "
"; + + print "

" . __('This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below.') . "

"; + + print "

"; + + print ""; + + print "

"; + + print "
"; # pane + } + + print "
"; + + print "

" . __("Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it.") . "

"; + + $bm_subscribe_url = str_replace('%s', '', add_feed_url()); + + $confirm_str = __('Subscribe to %s in Tiny Tiny RSS?'); + + $bm_url = htmlspecialchars("javascript:{if(confirm('$confirm_str'.replace('%s',window.location.href)))window.location.href='$bm_subscribe_url'+window.location.href}"); + + print "" . __('Subscribe in Tiny Tiny RSS'). ""; + + print "
"; #pane + + print "
"; + + print "

" . __("Published articles and generated feeds") . "

"; + + print "

".__('Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below.')."

"; + + $rss_url = '-2::' . htmlspecialchars(get_self_url_prefix() . + "/public.php?op=rss&id=-2&view-mode=all_articles");; + + print " "; + + print " "; + + print "

" . __("Articles shared by URL") . "

"; + + print "

" . __("You can disable all articles shared by unique URLs here.") . "

"; + + print " "; + + print "
"; #pane + + if (defined('CONSUMER_KEY') && CONSUMER_KEY != '') { + + print "
"; + + $result = db_query($this->link, "SELECT COUNT(*) AS cid FROM ttrss_users + WHERE twitter_oauth IS NOT NULL AND twitter_oauth != '' AND + id = " . $_SESSION['uid']); + + $is_registered = db_fetch_result($result, 0, "cid") != 0; + + if (!$is_registered) { + print_notice(__('Before you can update your Twitter feeds, you must register this instance of Tiny Tiny RSS with Twitter.com.')); + } else { + print_notice(__('You have been successfully registered with Twitter.com and should be able to access your Twitter feeds.')); + } + + print ""; + + print " "; + + print ""; + + print "
"; # pane + + } + + print ""; #container + + } +} +?> diff --git a/include/functions.php b/include/functions.php index 28be5cbe..89a1d784 100644 --- a/include/functions.php +++ b/include/functions.php @@ -7644,4 +7644,116 @@ } } + + function make_feed_browser($link, $search, $limit, $mode = 1) { + + $owner_uid = $_SESSION["uid"]; + $rv = ''; + + if ($search) { + $search_qpart = "AND (UPPER(feed_url) LIKE UPPER('%$search%') OR + UPPER(title) LIKE UPPER('%$search%'))"; + } else { + $search_qpart = ""; + } + + if ($mode == 1) { + /* $result = db_query($link, "SELECT feed_url, subscribers FROM + ttrss_feedbrowser_cache WHERE (SELECT COUNT(id) = 0 FROM ttrss_feeds AS tf + WHERE tf.feed_url = ttrss_feedbrowser_cache.feed_url + AND owner_uid = '$owner_uid') $search_qpart + ORDER BY subscribers DESC LIMIT $limit"); */ + + $result = db_query($link, "SELECT feed_url, site_url, title, SUM(subscribers) AS subscribers FROM + (SELECT feed_url, site_url, title, subscribers FROM ttrss_feedbrowser_cache UNION ALL + SELECT feed_url, site_url, title, subscribers FROM ttrss_linked_feeds) AS qqq + WHERE + (SELECT COUNT(id) = 0 FROM ttrss_feeds AS tf + WHERE tf.feed_url = qqq.feed_url + AND owner_uid = '$owner_uid') $search_qpart + GROUP BY feed_url, site_url, title ORDER BY subscribers DESC LIMIT $limit"); + + } else if ($mode == 2) { + $result = db_query($link, "SELECT *, + (SELECT COUNT(*) FROM ttrss_user_entries WHERE + orig_feed_id = ttrss_archived_feeds.id) AS articles_archived + FROM + ttrss_archived_feeds + WHERE + (SELECT COUNT(*) FROM ttrss_feeds + WHERE ttrss_feeds.feed_url = ttrss_archived_feeds.feed_url AND + owner_uid = '$owner_uid') = 0 AND + owner_uid = '$owner_uid' $search_qpart + ORDER BY id DESC LIMIT $limit"); + } + + $feedctr = 0; + + while ($line = db_fetch_assoc($result)) { + + if ($mode == 1) { + + $feed_url = htmlspecialchars($line["feed_url"]); + $site_url = htmlspecialchars($line["site_url"]); + $subscribers = $line["subscribers"]; + + $check_box = ""; + + $class = ($feedctr % 2) ? "even" : "odd"; + + $site_url = " + ". + htmlspecialchars($line["title"]).""; + + $feed_url = ""; + + $rv .= "
  • $check_box $feed_url $site_url". + " ($subscribers)
  • "; + + } else if ($mode == 2) { + $feed_url = htmlspecialchars($line["feed_url"]); + $site_url = htmlspecialchars($line["site_url"]); + $title = htmlspecialchars($line["title"]); + + $check_box = ""; + + $class = ($feedctr % 2) ? "even" : "odd"; + + if ($line['articles_archived'] > 0) { + $archived = sprintf(__("%d archived articles"), $line['articles_archived']); + $archived = " ($archived)"; + } else { + $archived = ''; + } + + $site_url = " + ". + htmlspecialchars($line["title"]).""; + + $feed_url = ""; + + + $rv .= "
  • ". + "$check_box $feed_url $site_url $archived
  • "; + } + + ++$feedctr; + } + + if ($feedctr == 0) { + $rv .= "
  • ".__('No feeds found.')."

  • "; + } + + return $rv; + + } ?> diff --git a/modules/pref-feeds.php b/modules/pref-feeds.php deleted file mode 100644 index 089ee236..00000000 --- a/modules/pref-feeds.php +++ /dev/null @@ -1,1685 +0,0 @@ -"; - } - - function module_pref_feeds($link) { - - global $update_intervals; - global $purge_intervals; - global $update_methods; - - $method = $_REQUEST["method"]; - $quiet = $_REQUEST["quiet"]; - $mode = $_REQUEST["mode"]; - - if ($method == "renamecat") { - $title = db_escape_string($_REQUEST['title']); - $id = db_escape_string($_REQUEST['id']); - - if ($title) { - db_query($link, "UPDATE ttrss_feed_categories SET - title = '$title' WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); - } - return; - } - - if ($method == "remtwitterinfo") { - - db_query($link, "UPDATE ttrss_users SET twitter_oauth = NULL - WHERE id = " . $_SESSION['uid']); - - return; - } - - if ($method == "getfeedtree") { - - $search = $_SESSION["prefs_feed_search"]; - - if ($search) $search_qpart = " AND LOWER(title) LIKE LOWER('%$search%')"; - - $root = array(); - $root['id'] = 'root'; - $root['name'] = __('Feeds'); - $root['items'] = array(); - $root['type'] = 'category'; - - if (get_pref($link, 'ENABLE_FEED_CATS')) { - - $result = db_query($link, "SELECT id, title FROM ttrss_feed_categories - WHERE owner_uid = " . $_SESSION["uid"] . " ORDER BY order_id, title"); - - while ($line = db_fetch_assoc($result)) { - $cat = array(); - $cat['id'] = 'CAT:' . $line['id']; - $cat['bare_id'] = $feed_id; - $cat['name'] = $line['title']; - $cat['items'] = array(); - $cat['checkbox'] = false; - $cat['type'] = 'category'; - - $feed_result = db_query($link, "SELECT id, title, last_error, - ".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated - FROM ttrss_feeds - WHERE cat_id = '".$line['id']."' AND owner_uid = ".$_SESSION["uid"]. - "$search_qpart ORDER BY order_id, title"); - - while ($feed_line = db_fetch_assoc($feed_result)) { - $feed = array(); - $feed['id'] = 'FEED:' . $feed_line['id']; - $feed['bare_id'] = $feed_line['id']; - $feed['name'] = $feed_line['title']; - $feed['checkbox'] = false; - $feed['error'] = $feed_line['last_error']; - $feed['icon'] = getFeedIcon($feed_line['id']); - $feed['param'] = make_local_datetime($link, - $feed_line['last_updated'], true); - - array_push($cat['items'], $feed); - } - - $cat['param'] = T_sprintf('(%d feeds)', count($cat['items'])); - - if (count($cat['items']) > 0) - array_push($root['items'], $cat); - - $root['param'] += count($cat['items']); - } - - /* Uncategorized is a special case */ - - $cat = array(); - $cat['id'] = 'CAT:0'; - $cat['bare_id'] = 0; - $cat['name'] = __("Uncategorized"); - $cat['items'] = array(); - $cat['type'] = 'category'; - $cat['checkbox'] = false; - - $feed_result = db_query($link, "SELECT id, title,last_error, - ".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated - FROM ttrss_feeds - WHERE cat_id IS NULL AND owner_uid = ".$_SESSION["uid"]. - "$search_qpart ORDER BY order_id, title"); - - while ($feed_line = db_fetch_assoc($feed_result)) { - $feed = array(); - $feed['id'] = 'FEED:' . $feed_line['id']; - $feed['bare_id'] = $feed_line['id']; - $feed['name'] = $feed_line['title']; - $feed['checkbox'] = false; - $feed['error'] = $feed_line['last_error']; - $feed['icon'] = getFeedIcon($feed_line['id']); - $feed['param'] = make_local_datetime($link, - $feed_line['last_updated'], true); - - array_push($cat['items'], $feed); - } - - $cat['param'] = T_sprintf('(%d feeds)', count($cat['items'])); - - if (count($cat['items']) > 0) - array_push($root['items'], $cat); - - $root['param'] += count($cat['items']); - $root['param'] = T_sprintf('(%d feeds)', $root['param']); - - } else { - $feed_result = db_query($link, "SELECT id, title, last_error, - ".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated - FROM ttrss_feeds - WHERE owner_uid = ".$_SESSION["uid"]. - "$search_qpart ORDER BY order_id, title"); - - while ($feed_line = db_fetch_assoc($feed_result)) { - $feed = array(); - $feed['id'] = 'FEED:' . $feed_line['id']; - $feed['bare_id'] = $feed_line['id']; - $feed['name'] = $feed_line['title']; - $feed['checkbox'] = false; - $feed['error'] = $feed_line['last_error']; - $feed['icon'] = getFeedIcon($feed_line['id']); - $feed['param'] = make_local_datetime($link, - $feed_line['last_updated'], true); - - array_push($root['items'], $feed); - } - - $root['param'] = T_sprintf('(%d feeds)', count($root['items'])); - - } - - $fl = array(); - $fl['identifier'] = 'id'; - $fl['label'] = 'name'; - $fl['items'] = array($root); - - print json_encode($fl); - return; - } - - if ($method == "catsortreset") { - db_query($link, "UPDATE ttrss_feed_categories - SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"]); - return; - } - - if ($method == "feedsortreset") { - db_query($link, "UPDATE ttrss_feeds - SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"]); - return; - } - - if ($method == "savefeedorder") { -# if ($_POST['payload']) { -# file_put_contents("/tmp/blahblah.txt", $_POST['payload']); -# $data = json_decode($_POST['payload'], true); -# } else { -# $data = json_decode(file_get_contents("/tmp/blahblah.txt"), true); -# } - - $data = json_decode($_POST['payload'], true); - - if (is_array($data) && is_array($data['items'])) { - $cat_order_id = 0; - - $data_map = array(); - - foreach ($data['items'] as $item) { - - if ($item['id'] != 'root') { - if (is_array($item['items'])) { - if (isset($item['items']['_reference'])) { - $data_map[$item['id']] = array($item['items']); - } else { - $data_map[$item['id']] =& $item['items']; - } - } - } - } - - foreach ($data['items'][0]['items'] as $item) { - $id = $item['_reference']; - $bare_id = substr($id, strpos($id, ':')+1); - - ++$cat_order_id; - - if ($bare_id > 0) { - db_query($link, "UPDATE ttrss_feed_categories - SET order_id = '$cat_order_id' WHERE id = '$bare_id' AND - owner_uid = " . $_SESSION["uid"]); - } - - $feed_order_id = 0; - - if (is_array($data_map[$id])) { - foreach ($data_map[$id] as $feed) { - $id = $feed['_reference']; - $feed_id = substr($id, strpos($id, ':')+1); - - if ($bare_id != 0) - $cat_query = "cat_id = '$bare_id'"; - else - $cat_query = "cat_id = NULL"; - - db_query($link, "UPDATE ttrss_feeds - SET order_id = '$feed_order_id', - $cat_query - WHERE id = '$feed_id' AND - owner_uid = " . $_SESSION["uid"]); - - ++$feed_order_id; - } - } - } - } - - return; - } - - if ($method == "removeicon") { - $feed_id = db_escape_string($_REQUEST["feed_id"]); - - $result = db_query($link, "SELECT id FROM ttrss_feeds - WHERE id = '$feed_id' AND owner_uid = ". $_SESSION["uid"]); - - if (db_num_rows($result) != 0) { - unlink(ICONS_DIR . "/$feed_id.ico"); - } - - return; - } - - if ($method == "uploadicon") { - $icon_file = $_FILES['icon_file']['tmp_name']; - $feed_id = db_escape_string($_REQUEST["feed_id"]); - - if (is_file($icon_file) && $feed_id) { - if (filesize($icon_file) < 20000) { - - $result = db_query($link, "SELECT id FROM ttrss_feeds - WHERE id = '$feed_id' AND owner_uid = ". $_SESSION["uid"]); - - if (db_num_rows($result) != 0) { - unlink(ICONS_DIR . "/$feed_id.ico"); - move_uploaded_file($icon_file, ICONS_DIR . "/$feed_id.ico"); - $rc = 0; - } else { - $rc = 2; - } - } else { - $rc = 1; - } - } else { - $rc = 2; - } - - print ""; - return; - } - - if ($method == "editfeed") { - - $feed_id = db_escape_string($_REQUEST["id"]); - - $result = db_query($link, - "SELECT * FROM ttrss_feeds WHERE id = '$feed_id' AND - owner_uid = " . $_SESSION["uid"]); - - $title = htmlspecialchars(db_fetch_result($result, - 0, "title")); - - print ""; - print ""; - print ""; - - print "
    ".__("Feed")."
    "; - print "
    "; - - /* Title */ - - print ""; - - /* Feed URL */ - - $feed_url = db_fetch_result($result, 0, "feed_url"); - $feed_url = htmlspecialchars(db_fetch_result($result, - 0, "feed_url")); - - print "
    "; - - print __('URL:') . " "; - print ""; - - $last_error = db_fetch_result($result, 0, "last_error"); - - if ($last_error) { - print " (error)"; - - } - - /* Category */ - - if (get_pref($link, 'ENABLE_FEED_CATS')) { - - $cat_id = db_fetch_result($result, 0, "cat_id"); - - print "
    "; - - print __('Place in category:') . " "; - - print_feed_cat_select($link, "cat_id", $cat_id, - 'dojoType="dijit.form.Select"'); - } - - print "
    "; - - print "
    ".__("Update")."
    "; - print "
    "; - - /* Update Interval */ - - $update_interval = db_fetch_result($result, 0, "update_interval"); - - print_select_hash("update_interval", $update_interval, $update_intervals, - 'dojoType="dijit.form.Select"'); - - /* Update method */ - - $update_method = db_fetch_result($result, 0, "update_method", - 'dojoType="dijit.form.Select"'); - - print " " . __('using') . " "; - print_select_hash("update_method", $update_method, $update_methods, - 'dojoType="dijit.form.Select"'); - - $purge_interval = db_fetch_result($result, 0, "purge_interval"); - - - /* Purge intl */ - - print "
    "; - print __('Article purging:') . " "; - - print_select_hash("purge_interval", $purge_interval, $purge_intervals, - 'dojoType="dijit.form.Select" ' . - ((FORCE_ARTICLE_PURGE == 0) ? "" : 'disabled="1"')); - - print "
    "; - print "
    ".__("Authentication")."
    "; - print "
    "; - - $auth_login = htmlspecialchars(db_fetch_result($result, 0, "auth_login")); - -# print ""; - -# print "
    " . __('Login:') . ""; - - print "
    "; - -# print "
    " . __("Password:") . ""; - - $auth_pass = htmlspecialchars(db_fetch_result($result, 0, "auth_pass")); - - print ""; - - print "
    - ".__('Hint: you need to fill in your login information if your feed requires authentication, except for Twitter feeds.')." -
    "; - -# print "
    "; - - print "
    "; - print "
    ".__("Options")."
    "; - print "
    "; - -# print "
    "; - - $private = sql_bool_to_bool(db_fetch_result($result, 0, "private")); - - if ($private) { - $checked = "checked=\"1\""; - } else { - $checked = ""; - } - - print " "; - - $rtl_content = sql_bool_to_bool(db_fetch_result($result, 0, "rtl_content")); - - if ($rtl_content) { - $checked = "checked=\"1\""; - } else { - $checked = ""; - } - - print "
     "; - - $include_in_digest = sql_bool_to_bool(db_fetch_result($result, 0, "include_in_digest")); - - if ($include_in_digest) { - $checked = "checked=\"1\""; - } else { - $checked = ""; - } - - print "
     "; - - - $always_display_enclosures = sql_bool_to_bool(db_fetch_result($result, 0, "always_display_enclosures")); - - if ($always_display_enclosures) { - $checked = "checked"; - } else { - $checked = ""; - } - - print "
     "; - - - $cache_images = sql_bool_to_bool(db_fetch_result($result, 0, "cache_images")); - - if ($cache_images) { - $checked = "checked=\"1\""; - } else { - $checked = ""; - } - - if (SIMPLEPIE_CACHE_IMAGES) { - print "
     "; - } - - $mark_unread_on_update = sql_bool_to_bool(db_fetch_result($result, 0, "mark_unread_on_update")); - - if ($mark_unread_on_update) { - $checked = "checked"; - } else { - $checked = ""; - } - - print "
     "; - - $update_on_checksum_change = sql_bool_to_bool(db_fetch_result($result, 0, "update_on_checksum_change")); - - if ($update_on_checksum_change) { - $checked = "checked"; - } else { - $checked = ""; - } - - print "
     "; - -# print "
    "; - print "
    "; - - /* Icon */ - - print "
    ".__("Icon")."
    "; - print "
    "; - - print ""; - - print "
    - - - - - - -
    "; - - print "
    "; - - $title = htmlspecialchars($title, ENT_QUOTES); - - print "
    -
    - "; - - if (PUBSUBHUBBUB_ENABLED) { - $pubsub_state = db_fetch_result($result, 0, "pubsub_state"); - $pubsub_btn_disabled = ($pubsub_state == 2) ? "" : "disabled=\"1\""; - - print ""; - } - - print "
    "; - - print "
    ". - __('Resets PubSubHubbub subscription status for push-enabled feeds.')."
    "; - - print " - -
    "; - - return; - } - - if ($method == "editfeeds") { - - $feed_ids = db_escape_string($_REQUEST["ids"]); - - print ""; - print ""; - print ""; - - print "
    ".__("Feed")."
    "; - print "
    "; - - /* Title */ - - print ""; - - batch_edit_cbox("title"); - - /* Feed URL */ - - print "
    "; - - print __('URL:') . " "; - print ""; - - batch_edit_cbox("feed_url"); - - /* Category */ - - if (get_pref($link, 'ENABLE_FEED_CATS')) { - - print "
    "; - - print __('Place in category:') . " "; - - print_feed_cat_select($link, "cat_id", $cat_id, - 'disabled="1" dojoType="dijit.form.Select"'); - - batch_edit_cbox("cat_id"); - - } - - print "
    "; - - print "
    ".__("Update")."
    "; - print "
    "; - - /* Update Interval */ - - print_select_hash("update_interval", $update_interval, $update_intervals, - 'disabled="1" dojoType="dijit.form.Select"'); - - batch_edit_cbox("update_interval"); - - /* Update method */ - - print " " . __('using') . " "; - print_select_hash("update_method", $update_method, $update_methods, - 'disabled="1" dojoType="dijit.form.Select"'); - batch_edit_cbox("update_method"); - - /* Purge intl */ - - if (FORCE_ARTICLE_PURGE == 0) { - - print "
    "; - - print __('Article purging:') . " "; - - print_select_hash("purge_interval", $purge_interval, $purge_intervals, - 'disabled="1" dojoType="dijit.form.Select"'); - - batch_edit_cbox("purge_interval"); - } - - print "
    "; - print "
    ".__("Authentication")."
    "; - print "
    "; - - print ""; - - batch_edit_cbox("auth_login"); - - print "
    "; - - batch_edit_cbox("auth_pass"); - - print "
    "; - print "
    ".__("Options")."
    "; - print "
    "; - - print " "; - - print " "; batch_edit_cbox("private", "private_l"); - - print "
     "; - - print " "; batch_edit_cbox("rtl_content", "rtl_content_l"); - - print "
     "; - - print " "; batch_edit_cbox("include_in_digest", "include_in_digest_l"); - - print "
     "; - - print " "; batch_edit_cbox("always_display_enclosures", "always_display_enclosures_l"); - - if (SIMPLEPIE_CACHE_IMAGES) { - print "
     "; - - - print " "; batch_edit_cbox("cache_images", "cache_images_l"); - } - - print "
     "; - - print " "; batch_edit_cbox("mark_unread_on_update", "mark_unread_on_update_l"); - - print "
     "; - - print " "; batch_edit_cbox("update_on_checksum_change", "update_on_checksum_change_l"); - - print "
    "; - - print "
    - - -
    "; - - return; - } - - if ($method == "editSave" || $method == "batchEditSave") { - - $feed_title = db_escape_string(trim($_POST["title"])); - $feed_link = db_escape_string(trim($_POST["feed_url"])); - $upd_intl = (int) db_escape_string($_POST["update_interval"]); - $purge_intl = (int) db_escape_string($_POST["purge_interval"]); - $feed_id = (int) db_escape_string($_POST["id"]); /* editSave */ - $feed_ids = db_escape_string($_POST["ids"]); /* batchEditSave */ - $cat_id = (int) db_escape_string($_POST["cat_id"]); - $auth_login = db_escape_string(trim($_POST["auth_login"])); - $auth_pass = db_escape_string(trim($_POST["auth_pass"])); - $private = checkbox_to_sql_bool(db_escape_string($_POST["private"])); - $rtl_content = checkbox_to_sql_bool(db_escape_string($_POST["rtl_content"])); - $include_in_digest = checkbox_to_sql_bool( - db_escape_string($_POST["include_in_digest"])); - $cache_images = checkbox_to_sql_bool( - db_escape_string($_POST["cache_images"])); - $update_method = (int) db_escape_string($_POST["update_method"]); - - $always_display_enclosures = checkbox_to_sql_bool( - db_escape_string($_POST["always_display_enclosures"])); - - $mark_unread_on_update = checkbox_to_sql_bool( - db_escape_string($_POST["mark_unread_on_update"])); - - $update_on_checksum_change = checkbox_to_sql_bool( - db_escape_string($_POST["update_on_checksum_change"])); - - if (get_pref($link, 'ENABLE_FEED_CATS')) { - if ($cat_id && $cat_id != 0) { - $category_qpart = "cat_id = '$cat_id',"; - $category_qpart_nocomma = "cat_id = '$cat_id'"; - } else { - $category_qpart = 'cat_id = NULL,'; - $category_qpart_nocomma = 'cat_id = NULL'; - } - } else { - $category_qpart = ""; - $category_qpart_nocomma = ""; - } - - if (SIMPLEPIE_CACHE_IMAGES) { - $cache_images_qpart = "cache_images = $cache_images,"; - } else { - $cache_images_qpart = ""; - } - - if ($method == "editSave") { - - $result = db_query($link, "UPDATE ttrss_feeds SET - $category_qpart - title = '$feed_title', feed_url = '$feed_link', - update_interval = '$upd_intl', - purge_interval = '$purge_intl', - auth_login = '$auth_login', - auth_pass = '$auth_pass', - private = $private, - rtl_content = $rtl_content, - $cache_images_qpart - include_in_digest = $include_in_digest, - always_display_enclosures = $always_display_enclosures, - mark_unread_on_update = $mark_unread_on_update, - update_on_checksum_change = $update_on_checksum_change, - update_method = '$update_method' - WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]); - - } else if ($method == "batchEditSave") { - $feed_data = array(); - - foreach (array_keys($_POST) as $k) { - if ($k != "op" && $k != "method" && $k != "ids") { - $feed_data[$k] = $_POST[$k]; - } - } - - db_query($link, "BEGIN"); - - foreach (array_keys($feed_data) as $k) { - - $qpart = ""; - - switch ($k) { - case "title": - $qpart = "title = '$feed_title'"; - break; - - case "feed_url": - $qpart = "feed_url = '$feed_link'"; - break; - - case "update_interval": - $qpart = "update_interval = '$upd_intl'"; - break; - - case "purge_interval": - $qpart = "purge_interval = '$purge_intl'"; - break; - - case "auth_login": - $qpart = "auth_login = '$auth_login'"; - break; - - case "auth_pass": - $qpart = "auth_pass = '$auth_pass'"; - break; - - case "private": - $qpart = "private = '$private'"; - break; - - case "include_in_digest": - $qpart = "include_in_digest = '$include_in_digest'"; - break; - - case "always_display_enclosures": - $qpart = "always_display_enclosures = '$always_display_enclosures'"; - break; - - case "mark_unread_on_update": - $qpart = "mark_unread_on_update = '$mark_unread_on_update'"; - break; - - case "update_on_checksum_change": - $qpart = "update_on_checksum_change = '$update_on_checksum_change'"; - break; - - case "cache_images": - $qpart = "cache_images = '$cache_images'"; - break; - - case "rtl_content": - $qpart = "rtl_content = '$rtl_content'"; - break; - - case "update_method": - $qpart = "update_method = '$update_method'"; - break; - - case "cat_id": - $qpart = $category_qpart_nocomma; - break; - - } - - if ($qpart) { - db_query($link, - "UPDATE ttrss_feeds SET $qpart WHERE id IN ($feed_ids) - AND owner_uid = " . $_SESSION["uid"]); - print "
    "; - } - } - - db_query($link, "COMMIT"); - } - return; - } - - if ($method == "resetPubSub") { - - $ids = db_escape_string($_REQUEST["ids"]); - - db_query($link, "UPDATE ttrss_feeds SET pubsub_state = 0 WHERE id IN ($ids) - AND owner_uid = " . $_SESSION["uid"]); - - return; - } - - if ($method == "remove") { - - $ids = split(",", db_escape_string($_REQUEST["ids"])); - - foreach ($ids as $id) { - remove_feed($link, $id, $_SESSION["uid"]); - } - - return; - } - - if ($method == "clear") { - $id = db_escape_string($_REQUEST["id"]); - clear_feed_articles($link, $id); - } - - if ($method == "rescore") { - $ids = split(",", db_escape_string($_REQUEST["ids"])); - - foreach ($ids as $id) { - - $filters = load_filters($link, $id, $_SESSION["uid"], 6); - - $result = db_query($link, "SELECT - title, content, link, ref_id, author,". - SUBSTRING_FOR_DATE."(updated, 1, 19) AS updated - FROM - ttrss_user_entries, ttrss_entries - WHERE ref_id = id AND feed_id = '$id' AND - owner_uid = " .$_SESSION['uid']." - "); - - $scores = array(); - - while ($line = db_fetch_assoc($result)) { - - $tags = get_article_tags($link, $line["ref_id"]); - - $article_filters = get_article_filters($filters, $line['title'], - $line['content'], $line['link'], strtotime($line['updated']), - $line['author'], $tags); - - $new_score = calculate_article_score($article_filters); - - if (!$scores[$new_score]) $scores[$new_score] = array(); - - array_push($scores[$new_score], $line['ref_id']); - } - - foreach (array_keys($scores) as $s) { - if ($s > 1000) { - db_query($link, "UPDATE ttrss_user_entries SET score = '$s', - marked = true WHERE - ref_id IN (" . join(',', $scores[$s]) . ")"); - } else if ($s < -500) { - db_query($link, "UPDATE ttrss_user_entries SET score = '$s', - unread = false WHERE - ref_id IN (" . join(',', $scores[$s]) . ")"); - } else { - db_query($link, "UPDATE ttrss_user_entries SET score = '$s' WHERE - ref_id IN (" . join(',', $scores[$s]) . ")"); - } - } - } - - print __("All done."); - - } - - if ($method == "rescoreAll") { - - $result = db_query($link, - "SELECT id FROM ttrss_feeds WHERE owner_uid = " . $_SESSION['uid']); - - while ($feed_line = db_fetch_assoc($result)) { - - $id = $feed_line["id"]; - - $filters = load_filters($link, $id, $_SESSION["uid"], 6); - - $tmp_result = db_query($link, "SELECT - title, content, link, ref_id, author,". - SUBSTRING_FOR_DATE."(updated, 1, 19) AS updated - FROM - ttrss_user_entries, ttrss_entries - WHERE ref_id = id AND feed_id = '$id' AND - owner_uid = " .$_SESSION['uid']." - "); - - $scores = array(); - - while ($line = db_fetch_assoc($tmp_result)) { - - $tags = get_article_tags($link, $line["ref_id"]); - - $article_filters = get_article_filters($filters, $line['title'], - $line['content'], $line['link'], strtotime($line['updated']), - $line['author'], $tags); - - $new_score = calculate_article_score($article_filters); - - if (!$scores[$new_score]) $scores[$new_score] = array(); - - array_push($scores[$new_score], $line['ref_id']); - } - - foreach (array_keys($scores) as $s) { - if ($s > 1000) { - db_query($link, "UPDATE ttrss_user_entries SET score = '$s', - marked = true WHERE - ref_id IN (" . join(',', $scores[$s]) . ")"); - } else { - db_query($link, "UPDATE ttrss_user_entries SET score = '$s' WHERE - ref_id IN (" . join(',', $scores[$s]) . ")"); - } - } - } - - print __("All done."); - - } - - if ($method == "add") { - - $feed_url = db_escape_string(trim($_REQUEST["feed_url"])); - $cat_id = db_escape_string($_REQUEST["cat_id"]); - $p_from = db_escape_string($_REQUEST["from"]); - - /* only read authentication information from POST */ - - $auth_login = db_escape_string(trim($_POST["auth_login"])); - $auth_pass = db_escape_string(trim($_POST["auth_pass"])); - - if ($p_from != 'tt-rss') { - header("Content-Type: text/html"); - print " - - Tiny Tiny RSS - - - - \"Tiny -

    Subscribe to feed...

    "; - } - - $rc = subscribe_to_feed($link, $feed_url, $cat_id, $auth_login, $auth_pass); - - switch ($rc) { - case 1: - print_notice(T_sprintf("Subscribed to %s.", $feed_url)); - break; - case 2: - print_error(T_sprintf("Could not subscribe to %s.", $feed_url)); - break; - case 3: - print_error(T_sprintf("No feeds found in %s.", $feed_url)); - break; - case 0: - print_warning(T_sprintf("Already subscribed to %s.", $feed_url)); - break; - case 4: - print_notice("Multiple feed URLs found."); - - $feed_urls = get_feeds_from_html($feed_url); - break; - case 5: - print_error(T_sprintf("Could not subscribe to %s.
    Can't download the Feed URL.", $feed_url)); - break; - } - - if ($p_from != 'tt-rss') { - - if ($feed_urls) { - - print "
    "; - print ""; - print ""; - print ""; - - print ""; - - print "
    "; - } - - $tp_uri = get_self_url_prefix() . "/prefs.php"; - $tt_uri = get_self_url_prefix(); - - if ($rc <= 2){ - $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE - feed_url = '$feed_url' AND owner_uid = " . $_SESSION["uid"]); - - $feed_id = db_fetch_result($result, 0, "id"); - } else { - $feed_id = 0; - } - print "

    "; - - if ($feed_id) { - print "

    - - - - -
    "; - } - - print "
    - -

    "; - - print ""; - return; - } - } - - if ($method == "categorize") { - - - $ids = split(",", db_escape_string($_REQUEST["ids"])); - - $cat_id = db_escape_string($_REQUEST["cat_id"]); - - if ($cat_id == 0) { - $cat_id_qpart = 'NULL'; - } else { - $cat_id_qpart = "'$cat_id'"; - } - - db_query($link, "BEGIN"); - - foreach ($ids as $id) { - - db_query($link, "UPDATE ttrss_feeds SET cat_id = $cat_id_qpart - WHERE id = '$id' - AND owner_uid = " . $_SESSION["uid"]); - - } - - db_query($link, "COMMIT"); - - } - - if ($method == "editCats") { - - $action = $_REQUEST["action"]; - - if ($action == "save") { - - $cat_title = db_escape_string(trim($_REQUEST["value"])); - $cat_id = db_escape_string($_REQUEST["cid"]); - - db_query($link, "BEGIN"); - - $result = db_query($link, "SELECT title FROM ttrss_feed_categories - WHERE id = '$cat_id' AND owner_uid = ".$_SESSION["uid"]); - - if (db_num_rows($result) == 1) { - - $old_title = db_fetch_result($result, 0, "title"); - - if ($cat_title != "") { - $result = db_query($link, "UPDATE ttrss_feed_categories SET - title = '$cat_title' WHERE id = '$cat_id' AND - owner_uid = ".$_SESSION["uid"]); - - print $cat_title; - } else { - print $old_title; - } - } else { - print $_REQUEST["value"]; - } - - db_query($link, "COMMIT"); - - return; - - } - - if ($action == "add") { - - $feed_cat = db_escape_string(trim($_REQUEST["cat"])); - - if (!add_feed_category($link, $feed_cat)) - print_warning(T_sprintf("Category $%s already exists in the database.", $feed_cat)); - - } - - if ($action == "remove") { - - $ids = split(",", db_escape_string($_REQUEST["ids"])); - - foreach ($ids as $id) { - remove_feed_category($link, $id, $_SESSION["uid"]); - } - } - - print "
    - -
    "; - - $result = db_query($link, "SELECT title,id FROM ttrss_feed_categories - WHERE owner_uid = ".$_SESSION["uid"]." - ORDER BY title"); - -# print "

    "; - - if (db_num_rows($result) != 0) { - - print "

    "; - -# print "
    "; - - print ""; - - $lnum = 0; - - while ($line = db_fetch_assoc($result)) { - - $class = ($lnum % 2) ? "even" : "odd"; - - $cat_id = $line["id"]; - $this_row_id = "id=\"FCATR-$cat_id\""; - - print ""; - - $edit_title = htmlspecialchars($line["title"]); - - print ""; - - print ""; - - ++$lnum; - } - - print "
    "; - -# print "" . -# $edit_title . ""; - - print "" . $edit_title . - " - "; - - print "
    "; - -# print "
    "; - - print "
    "; - - } else { - print "

    ".__('No feed categories defined.')."

    "; - } - - print "
    -
    - -
    "; - - print "
    "; - - return; - - } - - if ($quiet) return; - - print "
    "; - print "
    "; - - /* print "
    "; - print "< - print "
    "; */ - - $result = db_query($link, "SELECT COUNT(id) AS num_errors - FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ".$_SESSION["uid"]); - - $num_errors = db_fetch_result($result, 0, "num_errors"); - - if ($num_errors > 0) { - - $error_button = ""; - -// print format_notice("". -// __('Some feeds have update errors (click for details)').""); - } - - if (DB_TYPE == "pgsql") { - $interval_qpart = "NOW() - INTERVAL '3 months'"; - } else { - $interval_qpart = "DATE_SUB(NOW(), INTERVAL 3 MONTH)"; - } - - $result = db_query($link, "SELECT COUNT(*) AS num_inactive FROM ttrss_feeds WHERE - (SELECT MAX(updated) FROM ttrss_entries, ttrss_user_entries WHERE - ttrss_entries.id = ref_id AND - ttrss_user_entries.feed_id = ttrss_feeds.id) < $interval_qpart AND - ttrss_feeds.owner_uid = ".$_SESSION["uid"]); - - $num_inactive = db_fetch_result($result, 0, "num_inactive"); - - if ($num_inactive > 0) { - $inactive_button = ""; - } - - $feed_search = db_escape_string($_REQUEST["search"]); - - if (array_key_exists("search", $_REQUEST)) { - $_SESSION["prefs_feed_search"] = $feed_search; - } else { - $feed_search = $_SESSION["prefs_feed_search"]; - } - - print '
    '; - - print "
    "; #toolbar - - print "
    - - -
    "; - - print "
    ". - "" . __('Select').""; - print "
    "; - print "
    ".__('All')."
    "; - print "
    ".__('None')."
    "; - print "
    "; - - print "
    ". - "" . __('Feeds').""; - print "
    "; - print "
    ".__('Subscribe to feed')."
    "; - print "
    ".__('Edit selected feeds')."
    "; - print "
    ".__('Reset sort order')."
    "; - print "
    "; - - if (get_pref($link, 'ENABLE_FEED_CATS')) { - print "
    ". - "" . __('Categories').""; - print "
    "; - print "
    ".__('Edit categories')."
    "; - print "
    ".__('Reset sort order')."
    "; - print "
    "; - - } - - print $error_button; - print $inactive_button; - - print " "; - - if (defined('_ENABLE_FEED_DEBUGGING')) { - - print ""; - - } - - print "
    "; # toolbar - - //print '
    '; - print '
    '; - - print "
    - ". - __("Loading, please wait...")."
    "; - - print "
    -
    -
    -
    -
    - - -
    "; - - print "
    - ".__('Hint: you can drag feeds and categories around.')." -
    "; - - print '
    '; - print '
    '; - - print "
    "; # feeds pane - - print "
    "; - - print "

    " . __("Using OPML you can export and import your feeds and Tiny Tiny RSS settings.") . " "; - - print "" . __("Note: Only main settings profile can be migrated using OPML.") . ""; - - print "

    "; - - print "

    " . __("Import") . "

    "; - - print "
    "; - - print "
    -   - - - "; - - print "

    " . __("Export") . "

    "; - - print "

    " . __('Filename:') . - "  " . - __('Include settings') . "" . - - "

    "; - - print "

    " . __("Publish") . "

    "; - - print "

    ".__('Your OPML can be published publicly and can be subscribed by anyone who knows the URL below.') . " "; - - print "" . __("Note: Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds.") . "" . "

    "; - - print " "; - - - print "
    "; # pane - - if (strpos($_SERVER['HTTP_USER_AGENT'], "Firefox") !== false) { - - print "
    "; - - print "

    " . __('This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below.') . "

    "; - - print "

    "; - - print ""; - - print "

    "; - - print "
    "; # pane - } - - print "
    "; - - print "

    " . __("Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it.") . "

    "; - - $bm_subscribe_url = str_replace('%s', '', add_feed_url()); - - $confirm_str = __('Subscribe to %s in Tiny Tiny RSS?'); - - $bm_url = htmlspecialchars("javascript:{if(confirm('$confirm_str'.replace('%s',window.location.href)))window.location.href='$bm_subscribe_url'+window.location.href}"); - - print "" . __('Subscribe in Tiny Tiny RSS'). ""; - - print "
    "; #pane - - print "
    "; - - print "

    " . __("Published articles and generated feeds") . "

    "; - - print "

    ".__('Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below.')."

    "; - - $rss_url = '-2::' . htmlspecialchars(get_self_url_prefix() . - "/public.php?op=rss&id=-2&view-mode=all_articles");; - - print " "; - - print " "; - - print "

    " . __("Articles shared by URL") . "

    "; - - print "

    " . __("You can disable all articles shared by unique URLs here.") . "

    "; - - print " "; - - print "
    "; #pane - - if (defined('CONSUMER_KEY') && CONSUMER_KEY != '') { - - print "
    "; - - $result = db_query($link, "SELECT COUNT(*) AS cid FROM ttrss_users - WHERE twitter_oauth IS NOT NULL AND twitter_oauth != '' AND - id = " . $_SESSION['uid']); - - $is_registered = db_fetch_result($result, 0, "cid") != 0; - - if (!$is_registered) { - print_notice(__('Before you can update your Twitter feeds, you must register this instance of Tiny Tiny RSS with Twitter.com.')); - } else { - print_notice(__('You have been successfully registered with Twitter.com and should be able to access your Twitter feeds.')); - } - - print ""; - - print " "; - - print ""; - - print "
    "; # pane - - } - - print ""; #container - - } - - function make_feed_browser($link, $search, $limit, $mode = 1) { - - $owner_uid = $_SESSION["uid"]; - $rv = ''; - - if ($search) { - $search_qpart = "AND (UPPER(feed_url) LIKE UPPER('%$search%') OR - UPPER(title) LIKE UPPER('%$search%'))"; - } else { - $search_qpart = ""; - } - - if ($mode == 1) { - /* $result = db_query($link, "SELECT feed_url, subscribers FROM - ttrss_feedbrowser_cache WHERE (SELECT COUNT(id) = 0 FROM ttrss_feeds AS tf - WHERE tf.feed_url = ttrss_feedbrowser_cache.feed_url - AND owner_uid = '$owner_uid') $search_qpart - ORDER BY subscribers DESC LIMIT $limit"); */ - - $result = db_query($link, "SELECT feed_url, site_url, title, SUM(subscribers) AS subscribers FROM - (SELECT feed_url, site_url, title, subscribers FROM ttrss_feedbrowser_cache UNION ALL - SELECT feed_url, site_url, title, subscribers FROM ttrss_linked_feeds) AS qqq - WHERE - (SELECT COUNT(id) = 0 FROM ttrss_feeds AS tf - WHERE tf.feed_url = qqq.feed_url - AND owner_uid = '$owner_uid') $search_qpart - GROUP BY feed_url, site_url, title ORDER BY subscribers DESC LIMIT $limit"); - - } else if ($mode == 2) { - $result = db_query($link, "SELECT *, - (SELECT COUNT(*) FROM ttrss_user_entries WHERE - orig_feed_id = ttrss_archived_feeds.id) AS articles_archived - FROM - ttrss_archived_feeds - WHERE - (SELECT COUNT(*) FROM ttrss_feeds - WHERE ttrss_feeds.feed_url = ttrss_archived_feeds.feed_url AND - owner_uid = '$owner_uid') = 0 AND - owner_uid = '$owner_uid' $search_qpart - ORDER BY id DESC LIMIT $limit"); - } - - $feedctr = 0; - - while ($line = db_fetch_assoc($result)) { - - if ($mode == 1) { - - $feed_url = htmlspecialchars($line["feed_url"]); - $site_url = htmlspecialchars($line["site_url"]); - $subscribers = $line["subscribers"]; - - $check_box = ""; - - $class = ($feedctr % 2) ? "even" : "odd"; - - $site_url = " - ". - htmlspecialchars($line["title"]).""; - - $feed_url = ""; - - $rv .= "
  • $check_box $feed_url $site_url". - " ($subscribers)
  • "; - - } else if ($mode == 2) { - $feed_url = htmlspecialchars($line["feed_url"]); - $site_url = htmlspecialchars($line["site_url"]); - $title = htmlspecialchars($line["title"]); - - $check_box = ""; - - $class = ($feedctr % 2) ? "even" : "odd"; - - if ($line['articles_archived'] > 0) { - $archived = sprintf(__("%d archived articles"), $line['articles_archived']); - $archived = " ($archived)"; - } else { - $archived = ''; - } - - $site_url = " - ". - htmlspecialchars($line["title"]).""; - - $feed_url = ""; - - - $rv .= "
  • ". - "$check_box $feed_url $site_url $archived
  • "; - } - - ++$feedctr; - } - - if ($feedctr == 0) { - $rv .= "
  • ".__('No feeds found.')."

  • "; - } - - return $rv; - - } - -?>