diff options
author | Andrew Dolgov <[email protected]> | 2010-11-18 13:46:11 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2010-11-18 13:46:11 +0300 |
commit | 7b8a143f1b523a5b70b92af8389af1cb1cb0a844 (patch) | |
tree | b50bd695af036e1f709fb0f2a1fa1abfe165316e /modules/pref-feeds.php | |
parent | 567810362c08bb66a81435a9280d34efec9a628f (diff) |
allow onclick editing of categories and drag-reordering of feeds and categories
Diffstat (limited to 'modules/pref-feeds.php')
-rw-r--r-- | modules/pref-feeds.php | 191 |
1 files changed, 178 insertions, 13 deletions
diff --git a/modules/pref-feeds.php b/modules/pref-feeds.php index 3eb3c4621..f6776e20d 100644 --- a/modules/pref-feeds.php +++ b/modules/pref-feeds.php @@ -15,6 +15,159 @@ $quiet = $_REQUEST["quiet"]; $mode = $_REQUEST["mode"]; + if ($subop == "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 ($subop == "getfeedtree") { + + $root = array(); + $root['id'] = 'root'; + $root['name'] = __('Feeds'); + $root['items'] = array(); + + 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(); + + $feed_result = db_query($link, "SELECT id, title 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']; + $feed['bare_id'] = $feed_line['id']; + $feed['name'] = $feed_line['title']; + $feed['checkbox'] = false; + 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; + $cat['name'] = __("Uncategorized"); + $cat['items'] = array(); + + $feed_result = db_query($link, "SELECT id, title 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']; + $feed['bare_id'] = $feed_line['id']; + $feed['name'] = $feed_line['title']; + $feed['checkbox'] = false; + array_push($cat['items'], $feed); + } + + array_push($root['items'], $cat); + } else { + $feed_result = db_query($link, "SELECT id, title 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']; + $feed['bare_id'] = $feed_line['id']; + $feed['name'] = $feed_line['title']; + $feed['checkbox'] = false; + array_push($root['items'], $feed); + } + } + + $fl = array(); + $fl['identifier'] = 'id'; + $fl['label'] = 'name'; + $fl['items'] = array($root); + + print json_encode($fl); + return; + } + + if ($subop == "catsortreset") { + 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 + 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 = file_get_contents("/tmp/blahblah.txt"); + $data = json_decode($data, true); + + if (is_array($data) && is_array($data['items'])) { + $cat_order_id = 0; + + $data_map = array(); + + foreach ($data['items'] as $item) { + $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']; + $bare_id = substr($id, strpos($id, ':')+1); + + db_query($link, "UPDATE ttrss_feeds + SET order_id = '$feed_order_id' WHERE id = '$bare_id' AND + owner_uid = " . $_SESSION["uid"]); + + ++$feed_order_id; + } + } + } + } + + return; + } + if ($subop == "removeicon") { $feed_id = db_escape_string($_REQUEST["feed_id"]); @@ -1004,16 +1157,27 @@ dojoType=\"dijit.MenuItem\">".__('None')."</div>"; print "</div></div>"; - print "<button dojoType=\"dijit.form.Button\" onclick=\"quickAddFeed()\">" - .__('Subscribe to feed')."</button dojoType=\"dijit.form.Button\"> "; - - print "<button dojoType=\"dijit.form.Button\" onclick=\"editSelectedFeed()\">". - __('Edit feeds')."</button dojoType=\"dijit.form.Button\"> "; + print "<div dojoType=\"dijit.form.DropDownButton\">". + "<span>" . __('Feeds')."</span>"; + print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">"; + print "<div onclick=\"quickAddFeed()\" + dojoType=\"dijit.MenuItem\">".__('Subscribe to feed')."</div>"; + print "<div onclick=\"editSelectedFeed()\" + dojoType=\"dijit.MenuItem\">".__('Edit feeds')."</div>"; + print "<div onclick=\"resetFeedOrder()\" + dojoType=\"dijit.MenuItem\">".__('Reset sort order')."</div>"; + print "</div></div>"; if (get_pref($link, 'ENABLE_FEED_CATS')) { + print "<div dojoType=\"dijit.form.DropDownButton\">". + "<span>" . __('Categories')."</span>"; + print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">"; + print "<div onclick=\"editFeedCats()\" + dojoType=\"dijit.MenuItem\">".__('Edit categories')."</div>"; + print "<div onclick=\"resetCatOrder()\" + dojoType=\"dijit.MenuItem\">".__('Reset sort order')."</div>"; + print "</div></div>"; - print "<button dojoType=\"dijit.form.Button\" onclick=\"editFeedCats()\">". - __('Edit categories')."</button dojoType=\"dijit.form.Button\"> "; } print $error_button; @@ -1045,8 +1209,8 @@ <img src='images/indicator_tiny.gif'>". __("Loading, please wait...")."</div>"; - print "<div dojoType=\"dojo.data.ItemFileWriteStore\" jsId=\"feedStore\" - url=\"backend.php?op=feeds&root=1\"> + print "<div dojoType=\"fox.PrefFeedStore\" jsId=\"feedStore\" + url=\"backend.php?op=pref-feeds&subop=getfeedtree\"> </div> <div dojoType=\"lib.CheckBoxStoreModel\" jsId=\"feedModel\" store=\"feedStore\" query=\"{id:'root'}\" rootId=\"root\" rootLabel=\"Feeds\" @@ -1054,16 +1218,17 @@ </div> <div dojoType=\"fox.PrefFeedTree\" id=\"feedTree\" dndController=\"dijit.tree.dndSource\" - betweenThreshold=\"1\" + betweenThreshold=\"5\" model=\"feedModel\" openOnClick=\"false\"> <script type=\"dojo/method\" event=\"onClick\" args=\"item\"> var id = String(item.id); var bare_id = id.substr(id.indexOf(':')+1); - if (id.match('FEED')) { + if (id.match('FEED:')) { editFeed(bare_id, event); - } - + } else if (id.match('CAT:')) { + editCat(bare_id, item, event); + } </script> <script type=\"dojo/method\" event=\"onLoad\" args=\"item\"> Element.hide(\"feedlistLoading\"); |