From 8ffd20110ee28ca87ff29da193fdb63ca2e0c2ea Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 28 Mar 2011 15:53:48 +0400 Subject: [PATCH] implement a special dialog to show feeds without recent updates (closes #264) --- modules/popup-dialog.php | 74 +++++++++ modules/pref-feeds.php | 351 +++++++++++++++++++++------------------ prefs.js | 55 ++++++ tt-rss.css | 4 +- 4 files changed, 317 insertions(+), 167 deletions(-) diff --git a/modules/popup-dialog.php b/modules/popup-dialog.php index e9c553f97..3192ac57a 100644 --- a/modules/popup-dialog.php +++ b/modules/popup-dialog.php @@ -537,6 +537,80 @@ //return; } + if ($id == "inactiveFeeds") { + + if (DB_TYPE == "pgsql") { + $interval_qpart = "NOW() - INTERVAL '3 months'"; + } else { + $interval_qpart = "DATE_SUB(NOW(), INTERVAL 3 MONTH)"; + } + + $result = db_query($link, "SELECT ttrss_feeds.title, ttrss_feeds.site_url, + ttrss_feeds.feed_url, ttrss_feeds.id, MAX(updated) AS last_article + FROM ttrss_feeds, ttrss_entries, ttrss_user_entries 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"]." AND + ttrss_user_entries.feed_id = ttrss_feeds.id AND + ttrss_entries.id = ref_id + GROUP BY ttrss_feeds.title, ttrss_feeds.id, ttrss_feeds.site_url, ttrss_feeds.feed_url + ORDER BY last_article"); + + print __("These feeds have not been updated with new content for 3 months (oldest first):"); + + print "
"; + + print ""; + + $lnum = 1; + + while ($line = db_fetch_assoc($result)) { + + $class = ($lnum % 2) ? "even" : "odd"; + $feed_id = $line["id"]; + $this_row_id = "id=\"FUPDD-$feed_id\""; + + print ""; + + $edit_title = htmlspecialchars($line["title"]); + + print ""; + print ""; + print ""; + + ++$lnum; + } + + print "
"; + + print "". + htmlspecialchars($line["title"])." (". + "".__("feed").")"; + + print ""; + print make_local_datetime($link, $line['last_article']); + print "
"; + print "
"; + + print "
"; + print "
"; + print " "; + print "
"; + + print ""; + + print "
"; + + } + if ($id == "feedUpdateErrors") { print "".__('Feeds with update errors').""; diff --git a/modules/pref-feeds.php b/modules/pref-feeds.php index cd7269989..d8e2c0f09 100644 --- a/modules/pref-feeds.php +++ b/modules/pref-feeds.php @@ -46,7 +46,7 @@ $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']; @@ -54,13 +54,13 @@ $cat['name'] = $line['title']; $cat['items'] = array(); $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"]. " ORDER BY order_id, title"); - + while ($feed_line = db_fetch_assoc($feed_result)) { $feed = array(); $feed['id'] = 'FEED:' . $feed_line['id']; @@ -69,17 +69,17 @@ $feed['checkbox'] = false; $feed['error'] = $feed_line['last_error']; $feed['icon'] = getFeedIcon($feed_line['id']); - $feed['param'] = make_local_datetime($link, + $feed['param'] = make_local_datetime($link, $feed_line['last_updated'], true); array_push($cat['items'], $feed); } - + array_push($root['items'], $cat); } - + /* Uncategorized is a special case */ - + $cat = array(); $cat['id'] = 'CAT:0'; $cat['bare_id'] = 0; @@ -92,7 +92,7 @@ FROM ttrss_feeds WHERE cat_id IS NULL AND owner_uid = ".$_SESSION["uid"]. " ORDER BY order_id, title"); - + while ($feed_line = db_fetch_assoc($feed_result)) { $feed = array(); $feed['id'] = 'FEED:' . $feed_line['id']; @@ -101,12 +101,12 @@ $feed['checkbox'] = false; $feed['error'] = $feed_line['last_error']; $feed['icon'] = getFeedIcon($feed_line['id']); - $feed['param'] = make_local_datetime($link, + $feed['param'] = make_local_datetime($link, $feed_line['last_updated'], true); array_push($cat['items'], $feed); } - + array_push($root['items'], $cat); } else { $feed_result = db_query($link, "SELECT id, title, last_error, @@ -114,7 +114,7 @@ FROM ttrss_feeds WHERE owner_uid = ".$_SESSION["uid"]. " ORDER BY order_id, title"); - + while ($feed_line = db_fetch_assoc($feed_result)) { $feed = array(); $feed['id'] = 'FEED:' . $feed_line['id']; @@ -123,7 +123,7 @@ $feed['checkbox'] = false; $feed['error'] = $feed_line['last_error']; $feed['icon'] = getFeedIcon($feed_line['id']); - $feed['param'] = make_local_datetime($link, + $feed['param'] = make_local_datetime($link, $feed_line['last_updated'], true); array_push($root['items'], $feed); @@ -140,21 +140,21 @@ } if ($subop == "catsortreset") { - db_query($link, "UPDATE ttrss_feed_categories + db_query($link, "UPDATE ttrss_feed_categories SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"]); return; - } + } if ($subop == "feedsortreset") { - db_query($link, "UPDATE ttrss_feeds + db_query($link, "UPDATE ttrss_feeds SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"]); return; - } + } if ($subop == "savefeedorder") { # if ($_POST['payload']) { # file_put_contents("/tmp/blahblah.txt", $_POST['payload']); -# $data = json_decode($_POST['payload'], true); +# $data = json_decode($_POST['payload'], true); # } else { # $data = json_decode(file_get_contents("/tmp/blahblah.txt"), true); # } @@ -186,7 +186,7 @@ ++$cat_order_id; if ($bare_id > 0) { - db_query($link, "UPDATE ttrss_feed_categories + db_query($link, "UPDATE ttrss_feed_categories SET order_id = '$cat_order_id' WHERE id = '$bare_id' AND owner_uid = " . $_SESSION["uid"]); } @@ -198,7 +198,7 @@ $id = $feed['_reference']; $feed_id = substr($id, strpos($id, ':')+1); - if ($bare_id != 0) + if ($bare_id != 0) $cat_query = "cat_id = '$bare_id'"; else $cat_query = "cat_id = NULL"; @@ -208,9 +208,9 @@ $cat_query WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]); - + ++$feed_order_id; - } + } } } } @@ -218,7 +218,7 @@ return; } - if ($subop == "removeicon") { + if ($subop == "removeicon") { $feed_id = db_escape_string($_REQUEST["feed_id"]); $result = db_query($link, "SELECT id FROM ttrss_feeds @@ -237,7 +237,7 @@ 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"]); @@ -265,7 +265,7 @@ $feed_id = db_escape_string($_REQUEST["id"]); - $result = db_query($link, + $result = db_query($link, "SELECT * FROM ttrss_feeds WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]); @@ -309,7 +309,7 @@ print __('Place in category:') . " "; - print_feed_cat_select($link, "cat_id", $cat_id, + print_feed_cat_select($link, "cat_id", $cat_id, 'dojoType="dijit.form.Select"'); } @@ -322,17 +322,17 @@ $update_interval = db_fetch_result($result, 0, "update_interval"); - print_select_hash("update_interval", $update_interval, $update_intervals, + print_select_hash("update_interval", $update_interval, $update_intervals, 'dojoType="dijit.form.Select"'); /* Update method */ - $update_method = db_fetch_result($result, 0, "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"'); + 'dojoType="dijit.form.Select"'); $purge_interval = db_fetch_result($result, 0, "purge_interval"); @@ -344,11 +344,11 @@ print __('Article purging:') . " "; - print_select_hash("purge_interval", $purge_interval, $purge_intervals, + print_select_hash("purge_interval", $purge_interval, $purge_intervals, 'dojoType="dijit.form.Select"'); } else { - print ""; } @@ -371,7 +371,7 @@ $auth_pass = htmlspecialchars(db_fetch_result($result, 0, "auth_pass")); - print ""; @@ -395,7 +395,7 @@ $checked = ""; } - print " "; $rtl_content = sql_bool_to_bool(db_fetch_result($result, 0, "rtl_content")); @@ -417,7 +417,7 @@ $checked = ""; } - print "
 "; @@ -430,7 +430,7 @@ $checked = ""; } - print "
 "; @@ -444,7 +444,7 @@ } if (SIMPLEPIE_CACHE_IMAGES) { - print "
 "; @@ -462,7 +462,7 @@ style=\"width: 400px; height: 100px; display: none;\">"; print "
@@ -503,7 +503,7 @@ /* Title */ - print ""; @@ -528,7 +528,7 @@ print __('Place in category:') . " "; - print_feed_cat_select($link, "cat_id", $cat_id, + print_feed_cat_select($link, "cat_id", $cat_id, 'disabled="1" dojoType="dijit.form.Select"'); batch_edit_cbox("cat_id"); @@ -542,7 +542,7 @@ /* Update Interval */ - print_select_hash("update_interval", $update_interval, $update_intervals, + print_select_hash("update_interval", $update_interval, $update_intervals, 'disabled="1" dojoType="dijit.form.Select"'); batch_edit_cbox("update_interval"); @@ -550,8 +550,8 @@ /* Update method */ print " " . __('using') . " "; - print_select_hash("update_method", $update_method, $update_methods, - 'disabled="1" dojoType="dijit.form.Select"'); + print_select_hash("update_method", $update_method, $update_methods, + 'disabled="1" dojoType="dijit.form.Select"'); batch_edit_cbox("update_method"); /* Purge intl */ @@ -572,13 +572,13 @@ print "
".__("Authentication")."
"; print "
"; - print ""; batch_edit_cbox("auth_login"); - print "
"; @@ -588,7 +588,7 @@ print "
".__("Options")."
"; print "
"; - print " "; print " "; batch_edit_cbox("private", "private_l"); @@ -598,25 +598,25 @@ 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 "
-
"; - + return; } @@ -657,7 +657,7 @@ $always_display_enclosures = checkbox_to_sql_bool( db_escape_string($_POST["always_display_enclosures"])); - if (get_pref($link, 'ENABLE_FEED_CATS')) { + 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'"; @@ -678,7 +678,7 @@ if ($subop == "editSave") { - $result = db_query($link, "UPDATE ttrss_feeds SET + $result = db_query($link, "UPDATE ttrss_feeds SET $category_qpart title = '$feed_title', feed_url = '$feed_link', update_interval = '$upd_intl', @@ -709,7 +709,7 @@ $qpart = ""; switch ($k) { - case "title": + case "title": $qpart = "title = '$feed_title'"; break; @@ -799,12 +799,12 @@ $filters = load_filters($link, $id, $_SESSION["uid"], 6); - $result = db_query($link, "SELECT + $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 + ttrss_user_entries, ttrss_entries + WHERE ref_id = id AND feed_id = '$id' AND owner_uid = " .$_SESSION['uid']." "); @@ -814,10 +814,10 @@ $tags = get_article_tags($link, $line["ref_id"]); - $article_filters = get_article_filters($filters, $line['title'], - $line['content'], $line['link'], strtotime($line['updated']), + $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(); @@ -827,11 +827,11 @@ foreach (array_keys($scores) as $s) { if ($s > 1000) { - db_query($link, "UPDATE ttrss_user_entries SET score = '$s', + 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', + db_query($link, "UPDATE ttrss_user_entries SET score = '$s', unread = false WHERE ref_id IN (" . join(',', $scores[$s]) . ")"); } else { @@ -847,7 +847,7 @@ if ($subop == "rescoreAll") { - $result = db_query($link, + $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE owner_uid = " . $_SESSION['uid']); while ($feed_line = db_fetch_assoc($result)) { @@ -856,12 +856,12 @@ $filters = load_filters($link, $id, $_SESSION["uid"], 6); - $tmp_result = db_query($link, "SELECT + $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 + ttrss_user_entries, ttrss_entries + WHERE ref_id = id AND feed_id = '$id' AND owner_uid = " .$_SESSION['uid']." "); @@ -871,8 +871,8 @@ $tags = get_article_tags($link, $line["ref_id"]); - $article_filters = get_article_filters($filters, $line['title'], - $line['content'], $line['link'], strtotime($line['updated']), + $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); @@ -884,7 +884,7 @@ foreach (array_keys($scores) as $s) { if ($s > 1000) { - db_query($link, "UPDATE ttrss_user_entries SET score = '$s', + db_query($link, "UPDATE ttrss_user_entries SET score = '$s', marked = true WHERE ref_id IN (" . join(',', $scores[$s]) . ")"); } else { @@ -917,14 +917,14 @@ \"Tiny + alt=\"Tiny Tiny RSS\"/>

Subscribe to feed...

"; } $rc = subscribe_to_feed($link, $feed_url, $cat_id, $auth_login, $auth_pass); switch ($rc) { - case 1: + case 1: print_notice(T_sprintf("Subscribed to %s.", $feed_url)); break; case 2: @@ -951,7 +951,7 @@ print ""; print ""; print ""; - + print " @@ -1015,7 +1015,7 @@ 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"]); @@ -1043,10 +1043,10 @@ 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 + title = '$cat_title' WHERE id = '$cat_id' AND owner_uid = ".$_SESSION["uid"]); print $cat_title; @@ -1073,9 +1073,9 @@ } if ($action == "remove") { - + $ids = split(",", db_escape_string($_REQUEST["ids"])); - + foreach ($ids as $id) { remove_feed_category($link, $id, $_SESSION["uid"]); } @@ -1085,7 +1085,7 @@
"; - + $result = db_query($link, "SELECT title,id FROM ttrss_feed_categories WHERE owner_uid = ".$_SESSION["uid"]." ORDER BY title"); @@ -1098,34 +1098,34 @@ # 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 ""; + + print ""; - + ++$lnum; } - + print "
"; - -# print "" . -# $edit_title . ""; - print ""; + + $edit_title = htmlspecialchars($line["title"]); + + print ""; + +# print "" . +# $edit_title . ""; + + print "" . $edit_title . + cat-id=\"$cat_id\">" . $edit_title . " "; print "
"; # print "
"; @@ -1183,13 +1183,33 @@ 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)) { @@ -1203,20 +1223,20 @@ print "
". "" . __('Select').""; print "
"; - print "
".__('All')."
"; - print "
".__('None')."
"; print "
"; print "
". "" . __('Feeds').""; print "
"; - print "
".__('Subscribe to feed')."
"; - print "
".__('Edit selected feeds')."
"; - print "
".__('Reset sort order')."
"; print "
"; @@ -1224,15 +1244,16 @@ print "
". "" . __('Categories').""; print "
"; - print "
".__('Edit categories')."
"; - print "
".__('Reset sort order')."
"; print "
"; } print $error_button; + print $inactive_button; print " "; @@ -1241,16 +1262,16 @@ print ""; } @@ -1261,15 +1282,15 @@ ". __("Loading, please wait...").""; - print "
-