diff options
-rw-r--r-- | functions.js | 1 | ||||
-rw-r--r-- | modules/pref-feeds.php | 238 | ||||
-rw-r--r-- | prefs.js | 31 | ||||
-rw-r--r-- | themes/compat/theme.css | 4 | ||||
-rw-r--r-- | themes/graycube/theme.css | 17 | ||||
-rw-r--r-- | tt-rss.css | 10 |
6 files changed, 275 insertions, 26 deletions
diff --git a/functions.js b/functions.js index 652e2316f..db1351510 100644 --- a/functions.js +++ b/functions.js @@ -1215,6 +1215,7 @@ function infobox_callback() { box.style.display = "block"; } } + notify(""); } } diff --git a/modules/pref-feeds.php b/modules/pref-feeds.php index c46057274..46b03e891 100644 --- a/modules/pref-feeds.php +++ b/modules/pref-feeds.php @@ -391,14 +391,14 @@ } } - if ($subop == "saveCat") { +/* if ($subop == "saveCat") { $cat_title = db_escape_string(trim($_GET["title"])); $cat_id = db_escape_string($_GET["id"]); $result = db_query($link, "UPDATE ttrss_feed_categories SET title = '$cat_title' WHERE id = '$cat_id' AND owner_uid = ".$_SESSION["uid"]); - } +} */ if ($subop == "remove") { @@ -446,7 +446,7 @@ } } - if ($subop == "addCat") { +/* if ($subop == "addCat") { if (!WEB_DEMO_MODE) { @@ -471,7 +471,7 @@ } - } + } if ($subop == "removeCats") { @@ -502,7 +502,7 @@ db_query($link, "COMMIT"); } } - } + } */ if ($subop == "categorize") { @@ -538,6 +538,215 @@ } + if ($subop == "editCats") { + + print "<div id=\"infoBoxTitle\">Category editor</div>"; + + print "<div class=\"infoBoxContents\">"; + + $action = $_REQUEST["action"]; + + if ($action == "save") { + + $cat_title = db_escape_string(trim($_GET["title"])); + $cat_id = db_escape_string($_GET["id"]); + + $result = db_query($link, "UPDATE ttrss_feed_categories SET + title = '$cat_title' WHERE id = '$cat_id' AND owner_uid = ".$_SESSION["uid"]); + + } + + if ($action == "add") { + + if (!WEB_DEMO_MODE) { + + $feed_cat = db_escape_string(trim($_GET["cat"])); + + $result = db_query($link, + "SELECT id FROM ttrss_feed_categories + WHERE title = '$feed_cat' AND owner_uid = ".$_SESSION["uid"]); + + if (db_num_rows($result) == 0) { + + $result = db_query($link, + "INSERT INTO ttrss_feed_categories (owner_uid,title) + VALUES ('".$_SESSION["uid"]."', '$feed_cat')"); + + } else { + + print "<div class=\"warning\"> + Category <b>$feed_cat</b> already exists in the database. + </div>"; + } + + } + } + + if ($action == "remove") { + + if (!WEB_DEMO_MODE) { + + $ids = split(",", db_escape_string($_GET["ids"])); + + foreach ($ids as $id) { + + db_query($link, "BEGIN"); + + $result = db_query($link, + "SELECT count(id) as num_feeds FROM ttrss_feeds + WHERE cat_id = '$id'"); + + $num_feeds = db_fetch_result($result, 0, "num_feeds"); + + if ($num_feeds == 0) { + db_query($link, "DELETE FROM ttrss_feed_categories + WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]); + } else { + + print "<div class=\"warning\"> + Unable to delete non empty feed categories.</div>"; + + } + + db_query($link, "COMMIT"); + } + } + } + + print "<div class=\"prefGenericAddBox\"> + <input id=\"fadd_cat\" + onkeyup=\"toggleSubmitNotEmpty(this, 'catadd_submit_btn')\" + size=\"40\"> + <input + type=\"submit\" class=\"button\" disabled=\"true\" id=\"catadd_submit_btn\" + onclick=\"javascript:addFeedCat()\" value=\"Create category\"></div>"; + + $result = db_query($link, "SELECT title,id FROM ttrss_feed_categories + WHERE owner_uid = ".$_SESSION["uid"]." + ORDER BY title"); + + print "<p>"; + + if (db_num_rows($result) != 0) { + + print "<table width=\"100%\" class=\"prefFeedCatList\" + cellspacing=\"0\">"; + + print "<tr><td class=\"selectPrompt\" colspan=\"8\"> + Select: + <a href=\"javascript:selectPrefRows('fcat', true)\">All</a>, + <a href=\"javascript:selectPrefRows('fcat', false)\">None</a> + </td></tr>"; + + print "</table>"; + + print "<div class=\"prefFeedCatHolder\">"; + + print "<form id=\"feed_cat_edit_form\">"; + + print "<table width=\"100%\" class=\"prefFeedCatList\" + cellspacing=\"0\" id=\"prefFeedCatList\">"; + +/* print "<tr class=\"title\"> + <td width=\"5%\"> </td><td width=\"80%\">Title</td> + </tr>"; */ + + $lnum = 0; + + while ($line = db_fetch_assoc($result)) { + + $class = ($lnum % 2) ? "even" : "odd"; + + $cat_id = $line["id"]; + + $edit_cat_id = $_GET["id"]; + + if ($action == "edit" && $cat_id != $edit_cat_id) { + $class .= "Grayed"; + $this_row_id = ""; + } else { + $this_row_id = "id=\"FCATR-$cat_id\""; + } + + print "<tr class=\"$class\" $this_row_id>"; + + $edit_title = htmlspecialchars(db_unescape_string($line["title"])); + + if (!$edit_cat_id || $action != "edit") { + + print "<td width='5%' align='center'><input onclick='toggleSelectPrefRow(this, \"fcat\");' + type=\"checkbox\" id=\"FCCHK-".$line["id"]."\"></td>"; + + print "<td><a href=\"javascript:editFeedCat($cat_id);\">" . + $edit_title . "</a></td>"; + + } else if ($cat_id != $edit_cat_id) { + + print "<td width='5%' align='center'><input disabled=\"true\" type=\"checkbox\" + id=\"FRCHK-".$line["id"]."\"></td>"; + + print "<td>$edit_title</td>"; + + } else { + + print "<td width='5%' align='center'><input disabled=\"true\" type=\"checkbox\" checked>"; + + print "<input type=\"hidden\" name=\"id\" value=\"$cat_id\">"; + print "<input type=\"hidden\" name=\"op\" value=\"pref-feeds\">"; + print "<input type=\"hidden\" name=\"subop\" value=\"editCats\">"; + print "<input type=\"hidden\" name=\"action\" value=\"save\">"; + + print "</td>"; + + print "<td><input onkeypress=\"return filterCR(event)\" + name=\"title\" size=\"40\" value=\"$edit_title\"></td>"; + + } + + print "</tr>"; + + ++$lnum; + } + + print "</table>"; + + print "</form>"; + + print "</div>"; + + print "<div style='float : right'> + <input type='submit' class='button' + onclick=\"closeInfoBox()\" value=\"Close this window\"></div>"; + + print "<div id=\"catOpToolbar\">"; + + if ($action == "edit") { + print "<input type=\"submit\" class=\"button\" + onclick=\"return feedCatEditSave()\" value=\"Save\"> + <input type=\"submit\" class=\"button\" + onclick=\"return feedCatEditCancel()\" value=\"Cancel\">"; + } else { + + print " + <input type=\"submit\" class=\"button\" disabled=\"true\" + onclick=\"return editSelectedFeedCat()\" value=\"Edit\"> + <input type=\"submit\" class=\"button\" disabled=\"true\" + onclick=\"return removeSelectedFeedCats()\" value=\"Remove\">"; + + } + + print "</div>"; + + } else { + print "<p>No feed categories defined.</p>"; + } + + print "</div>"; + + return; + + } + if ($quiet) return; // print "<h3>Edit Feeds</h3>"; @@ -810,8 +1019,18 @@ } - print "</span> - All feeds: <input type=\"submit\" + print "</span>"; + + if (get_pref($link, 'ENABLE_FEED_CATS')) { + + print " <input type=\"submit\" class=\"button\" + onclick=\"javascript:editFeedCats()\" value=\"Edit categories\">"; + + print " | "; + + } + + print "All feeds: <input type=\"submit\" class=\"button\" onclick=\"gotoExportOpml()\" value=\"Export OPML\">"; } @@ -821,7 +1040,8 @@ } - if (get_pref($link, 'ENABLE_FEED_CATS')) { + +/* if (get_pref($link, 'ENABLE_FEED_CATS')) { print "<h3>Edit Categories</h3>"; @@ -936,7 +1156,7 @@ } else { print "<p>No feed categories defined.</p>"; } - } + } */ print "<h3>Import OPML</h3> <form enctype=\"multipart/form-data\" method=\"POST\" action=\"opml.php\"> @@ -245,9 +245,9 @@ function addFeedCat() { } else { notify("Adding feed category..."); - xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=addCat&cat=" + + xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editCats&action=add&cat=" + param_escape(cat.value), true); - xmlhttp.onreadystatechange=feedlist_callback; + xmlhttp.onreadystatechange=infobox_callback; xmlhttp.send(null); link.value = ""; @@ -365,9 +365,9 @@ function editFeedCat(cat) { active_feed_cat = cat; - xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editCat&id=" + + xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editCats&action=edit&id=" + param_escape(cat), true); - xmlhttp.onreadystatechange=feedlist_callback; + xmlhttp.onreadystatechange=infobox_callback; xmlhttp.send(null); } @@ -549,9 +549,9 @@ function removeSelectedFeedCats() { if (ok) { notify("Removing selected categories..."); - xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=removeCats&ids="+ + xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editCats&action=remove&ids="+ param_escape(sel_rows.toString()), true); - xmlhttp.onreadystatechange=feedlist_callback; + xmlhttp.onreadystatechange=infobox_callback; xmlhttp.send(null); } @@ -589,8 +589,8 @@ function feedCatEditCancel() { // notify("Operation cancelled."); - xmlhttp.open("GET", "backend.php?op=pref-feeds", true); - xmlhttp.onreadystatechange=feedlist_callback; + xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editCats", true); + xmlhttp.onreadystatechange=infobox_callback; xmlhttp.send(null); return false; @@ -637,7 +637,7 @@ function feedCatEditSave() { var query = Form.serialize("feed_cat_edit_form"); xmlhttp.open("GET", "backend.php?" + query, true); - xmlhttp.onreadystatechange=feedlist_callback; + xmlhttp.onreadystatechange=infobox_callback; xmlhttp.send(null); active_feed_cat = false; @@ -1435,7 +1435,7 @@ function selectPrefRows(kind, select) { } else if (kind == "fcat") { opbarid = "catOpToolbar"; nrow = "FCATR-"; - nchk = "FCHK-"; + nchk = "FCCHK-"; lname = "prefFeedCatList"; } else if (kind == "filter") { opbarid = "filterOpToolbar"; @@ -1542,3 +1542,14 @@ function userSwitch() { var user = chooser[chooser.selectedIndex].value; window.location = "prefs.php?swu=" + user; } + +function editFeedCats() { + if (!xmlhttp_ready(xmlhttp)) { + printLockingError(); + return + } + + xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editCats", true); + xmlhttp.onreadystatechange=infobox_callback; + xmlhttp.send(null); +} diff --git a/themes/compat/theme.css b/themes/compat/theme.css index 7fcf0fad2..94bade828 100644 --- a/themes/compat/theme.css +++ b/themes/compat/theme.css @@ -315,6 +315,10 @@ tr.title td a:hover { color : #5050aa; } +div.prefFeedCatHolder { + border : 1px solid #c0c0c0; +} + table.prefFeedList td.feedEditCat { font-size : large; border-color : #c0c0c0; diff --git a/themes/graycube/theme.css b/themes/graycube/theme.css index 71bacfa96..a22f7010e 100644 --- a/themes/graycube/theme.css +++ b/themes/graycube/theme.css @@ -125,15 +125,16 @@ div.postReply > div.postHeader { } .evenGrayed, .evenGrayed td { - background-color : white; - color : #909090; - border-width : 1px 0px 1px 0px; - border-style : solid; - border-color : #ebebeb; + background-color : #f9f9f9; + color : gray; + border-width : 1px 0px 1px 0px; + border-style : solid; + border-color : #ebebeb; } .oddGrayed { - color : #909090; + color : gray; + background-color : #f9f9f9; } .even, .even td { @@ -218,6 +219,10 @@ li.tagUnreadSelected a { color : gray; } +div.prefFeedCatHolder { + border : 1px solid #999999; +} + table.prefFeedList td.feedEditCat { font-weight : bold; border-width : 0px 0px 1px 0px; diff --git a/tt-rss.css b/tt-rss.css index b74aa487b..a24a7968c 100644 --- a/tt-rss.css +++ b/tt-rss.css @@ -412,6 +412,13 @@ table.prefFeedList td.feedSelect { text-align : center; } +div.prefFeedCatHolder { + height : 250px; + overflow : auto; + border : 1px solid #88b0f0; + margin : 5px 0px 5px 0px; +} + a.helpLink { color : #808080; } @@ -465,8 +472,9 @@ div.helpResponse { } div.infoBoxContents { - padding : 5px; + padding : 10px; margin-bottom : 5px; + font-size : small; } div.infoBoxContents td { |