diff --git a/backend.php b/backend.php index 350511f2..116b04b5 100644 --- a/backend.php +++ b/backend.php @@ -180,6 +180,31 @@ $_SESSION["uid"]); return; break; + + case "catsortreset": + db_query($link, "UPDATE ttrss_feed_categories + SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"]); + return; + break; + + case "catsort": + $corder = db_escape_string($_GET["corder"]); + + $cats = split(",", $corder); + + for ($i = 0; $i < count($cats); $i++) { + $cat_id = $cats[$i]; + + if ($cat_id > 0) { + db_query($link, "UPDATE ttrss_feed_categories + SET order_id = '$i' WHERE id = '$cat_id' AND + owner_uid = " . $_SESSION["uid"]); + } + } + + return; + break; + } outputFeedList($link, $tags); diff --git a/feedlist.js b/feedlist.js index 1f148104..7620dab5 100644 --- a/feedlist.js +++ b/feedlist.js @@ -316,6 +316,34 @@ function toggleCollapseCat(cat) { } } +function feedlist_dragsorted(ctr) { + try { + var elem = document.getElementById("feedList"); + + var cats = elem.getElementsByTagName("LI"); + var ordered_cats = new Array(); + + for (var i = 0; i < cats.length; i++) { + if (cats[i].id && cats[i].id.match("FCAT-")) { + ordered_cats.push(cats[i].id.replace("FCAT-", "")); + } + } + + if (ordered_cats.length > 0) { + + var query = "backend.php?op=feeds&subop=catsort&corder=" + + param_escape(ordered_cats.toString()); + + debug(query); + + new Ajax.Request(query); + } + + } catch (e) { + exception_error("feedlist_init", e); + } +} + function feedlist_init() { try { // if (arguments.callee.done) return; @@ -354,7 +382,7 @@ function feedlist_init() { init_collapsable_feedlist(getInitParam("theme")); - Sortable.create('feedList'); + Sortable.create('feedList', {onChange: feedlist_dragsorted}); } catch (e) { exception_error("feedlist/init", e); diff --git a/functions.php b/functions.php index 24019473..f097e191 100644 --- a/functions.php +++ b/functions.php @@ -4234,9 +4234,9 @@ if (get_pref($link, 'ENABLE_FEED_CATS')) { if (get_pref($link, "FEEDS_SORT_BY_UNREAD")) { - $order_by_qpart = "category,unread DESC,title"; + $order_by_qpart = "order_id,category,unread DESC,title"; } else { - $order_by_qpart = "category,title"; + $order_by_qpart = "order_id,category,title"; } } else { if (get_pref($link, "FEEDS_SORT_BY_UNREAD")) { diff --git a/localized_js.php b/localized_js.php index 5f2a2ea6..c97f9d10 100644 --- a/localized_js.php +++ b/localized_js.php @@ -138,7 +138,7 @@ print T_js_decl("Rescoring feeds..."); print T_js_decl("You can't rescore this kind of feed."); print T_js_decl("Rescore articles in %s?"); print T_js_decl("Rescoring articles..."); -#print T_js_decl( +print T_js_decl("Reset category order?"); #print T_js_decl( #print T_js_decl( #print T_js_decl( diff --git a/tt-rss.js b/tt-rss.js index 495b4888..2bbe782c 100644 --- a/tt-rss.js +++ b/tt-rss.js @@ -601,6 +601,21 @@ function quickMenuGo(opid) { resize_headlines(); } + if (opid == "qmcResetCats") { + + if (confirm(__("Reset category order?"))) { + + var query = "backend.php?op=feeds&subop=catsortreset"; + + notify_progress("Loading, please wait...", true); + + new Ajax.Request(query, { + onComplete: function(transport) { + window.setTimeout('updateFeedList(false, false)', 50); + } }); + } + } + } catch (e) { exception_error("quickMenuGo", e); } diff --git a/tt-rss.php b/tt-rss.php index 38e0ac59..dd6edef9 100644 --- a/tt-rss.php +++ b/tt-rss.php @@ -157,6 +157,7 @@ window.onload = init; +