]> git.wh0rd.org - tt-rss.git/blobdiff - modules/pref-feeds.php
rework pref-feeds dialog; update other pref panes
[tt-rss.git] / modules / pref-feeds.php
index b106797761920292d59f8cedbfe28ad364b7b213..783dd34a1445bb64e7c84d0e2828bf73d8a2f6f1 100644 (file)
                        return;
                }
 
-/*             if ($subop == "massSubscribe") {
-                       $ids = split(",", db_escape_string($_REQUEST["ids"]));
-
-                       $subscribed = array();
-
-                       foreach ($ids as $id) {
-
-                               if ($mode == 1) {
-                                       $result = db_query($link, "SELECT feed_url,title FROM ttrss_feeds
-                                               WHERE id = '$id'");
-                               } else if ($mode == 2) {
-                                       $result = db_query($link, "SELECT * FROM ttrss_archived_feeds
-                                               WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]);
-                                       $orig_id = db_escape_string(db_fetch_result($result, 0, "id"));
-                                       $site_url = db_escape_string(db_fetch_result($result, 0, "site_url"));
-                               }
-       
-                               $feed_url = db_escape_string(db_fetch_result($result, 0, "feed_url"));
-                               $title = db_escape_string(db_fetch_result($result, 0, "title"));
-       
-                               $title_orig = db_fetch_result($result, 0, "title");
-       
-                               $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE
-                                               feed_url = '$feed_url' AND owner_uid = " . $_SESSION["uid"]);
-       
-                               if (db_num_rows($result) == 0) {                        
-                                       if ($mode == 1) {
-                                               $result = db_query($link,
-                                                       "INSERT INTO ttrss_feeds (owner_uid,feed_url,title,cat_id) 
-                                                       VALUES ('".$_SESSION["uid"]."', '$feed_url', '$title', NULL)");
-                                       } else if ($mode == 2) {
-                                               $result = db_query($link,
-                                                       "INSERT INTO ttrss_feeds (id,owner_uid,feed_url,title,cat_id,site_url) 
-                                                       VALUES ('$orig_id','".$_SESSION["uid"]."', '$feed_url', '$title', NULL, '$site_url')");
-                                       }
-                                       array_push($subscribed, $title_orig);
-                               }
-                       }
-
-                       if (count($subscribed) > 0) {
-                               $msg = "<b>".__('Subscribed to feeds:')."</b>".
-                                       "<ul class=\"nomarks\">";
-
-                               foreach ($subscribed as $title) {
-                                       $msg .= "<li>$title</li>";
-                               }
-                               $msg .= "</ul>";
-
-                               print format_notice($msg);
-                       }
-
-                       return;
-               } */
-
-/*             if ($subop == "browse") {
-
-                       print "<div id=\"infoBoxTitle\">".__('Feed Browser')."</div>";
-                       
-                       print "<div class=\"infoBoxContents\">";
-
-                       $browser_search = db_escape_string($_REQUEST["search"]);
-
-                       //print "<p>".__("Showing top 25 registered feeds, sorted by popularity:")."</p>";
-
-                       print "<form onsubmit='return false;' display='inline' name='feed_browser' id='feed_browser'>";
-
-                       print "
-                               <div style='float : right'>
-                               <img style='display : none' 
-                                       id='feed_browser_spinner' src='images/indicator_white.gif'>
-                               <input name=\"search\" size=\"20\" type=\"search\"
-                                       onchange=\"javascript:updateFeedBrowser()\" value=\"$browser_search\">
-                               <button onclick=\"javascript:updateFeedBrowser()\">".__('Search')."</button>
-                       </div>";
-
-                       print " <select name=\"mode\" onchange=\"updateFeedBrowser()\">
-                               <option value='1'>" . __('Popular feeds') . "</option>
-                               <option value='2'>" . __('Feed archive') . "</option>
-                               </select> ";
-
-                       print __("limit:");
-
-                       print " <select name=\"limit\" onchange='updateFeedBrowser()'>";
-
-                       foreach (array(25, 50, 100, 200) as $l) {
-                               $issel = ($l == $limit) ? "selected" : "";
-                               print "<option $issel>$l</option>";
-                       }
-                       
-                       print "</select> ";
-
-                       print "<p>";
-
-                       $owner_uid = $_SESSION["uid"];
-
-                       print "<ul class='browseFeedList' id='browseFeedList'>";
-                       print_feed_browser($link, $search, 25);
-                       print "</ul>";
-
-                       print "<div align='center'>
-                               <button onclick=\"feedBrowserSubscribe()\">".__('Subscribe')."</button>
-                               <button onclick=\"closeInfoBox()\" >".__('Cancel')."</button></div>";
+               if ($subop == "editfeed") {
+                       header("Content-Type: text/xml");
 
-                       print "</div>";
-                       return;
-               } */
+                       print "<dlg id=\"$subop\">";
+                       print "<title>".__('Feed Editor')."</title>";
+                       print "<content><![CDATA[";
 
-               if ($subop == "editfeed") {
                        $feed_id = db_escape_string($_REQUEST["id"]);
 
                        $result = db_query($link, 
                                $feed_icon = "";
                        }
 
-                       print "<div id=\"infoBoxTitle\">".__('Feed Editor')."</div>";
-
-                       print "<div class=\"infoBoxContents\">";
-
                        print "<form id=\"edit_feed_form\" onsubmit=\"return false\">"; 
 
                        print "<input type=\"hidden\" name=\"id\" value=\"$feed_id\">";
 
                                print __('Place in category:') . " ";
 
-                               $parent_feed = db_fetch_result($result, 0, "parent_feed");
-
-                               if (sprintf("%d", $parent_feed) > 0) {
-                                       $disabled = "disabled";
-                               } else {
-                                       $disabled = "";
-                               }
-
                                print_feed_cat_select($link, "cat_id", $cat_id, $disabled);
                        }
 
-                       /* Link to */
-
-                       print "<br/>";
-
-                       print __('Link to feed:') . " ";
-
-                       $tmp_result = db_query($link, "SELECT COUNT(id) AS count
-                               FROM ttrss_feeds WHERE parent_feed = '$feed_id'");
-
-                       $linked_count = db_fetch_result($tmp_result, 0, "count");
-
-                       $parent_feed = db_fetch_result($result, 0, "parent_feed");
-
-                       if ($linked_count > 0) {
-                               $disabled = "disabled";
-                       } else {
-                               $disabled = "";
-                       }
-
-                       print "<select $disabled name=\"parent_feed\">";
-                       
-                       print "<option value=\"0\">".__('Not linked')."</option>";
-
-                       if (get_pref($link, 'ENABLE_FEED_CATS')) {
-                               if ($cat_id) {
-                                       $cat_qpart = "AND cat_id = '$cat_id'";
-                               } else {
-                                       $cat_qpart = "AND cat_id IS NULL";
-                               }
-                       }
-
-                       $tmp_result = db_query($link, "SELECT id,title FROM ttrss_feeds
-                               WHERE id != '$feed_id' AND owner_uid = ".$_SESSION["uid"]." AND
-                                       (SELECT COUNT(id) FROM ttrss_feeds AS T2 WHERE T2.id = ttrss_feeds.parent_feed) = 0
-                                       $cat_qpart ORDER BY title");
-
-                               if (db_num_rows($tmp_result) > 0) {
-                                       print "<option disabled>--------</option>";
-                               }
-
-                               while ($tmp_line = db_fetch_assoc($tmp_result)) {
-                                       if ($tmp_line["id"] == $parent_feed) {
-                                               $is_selected = "selected";
-                                       } else {
-                                               $is_selected = "";
-                                       }
-
-                                       $linked_title = truncate_string(htmlspecialchars($tmp_line["title"]), 40);
-
-                                       printf("<option $is_selected value='%d'>%s</option>", 
-                                               $tmp_line["id"], $linked_title);
-                               }
-
-                       print "</select>";
-
-       
                        print "</div>";
 
                        print "<div class=\"dlgSec\">".__("Update")."</div>";
                                <button onclick=\"return feedEditCancel()\">".__('Cancel')."</button>
                                </div>";
 
+                       print "]]></content></dlg>";
+
                        return;
                }
 
                if ($subop == "editfeeds") {
 
                        $feed_ids = db_escape_string($_REQUEST["ids"]);
-
-                       print "<div id=\"infoBoxTitle\">".__('Multiple Feed Editor')."</div>";
-
-                       print "<div class=\"infoBoxContents\">";
+                       
+                       header("Content-Type: text/xml");
+                       print "<dlg id=\"$subop\">";
+                       print "<title>".__('Multiple Feed Editor')."</title>";
+                       print "<content><![CDATA[";
 
                        print "<form id=\"batch_edit_feed_form\" onsubmit=\"return false\">";   
 
                                onclick=\"return feedEditCancel()\" value=\"".__('Cancel')."\">
                                </div>";
 
+                       print "]]></content></dlg>";
+
                        return;
                }
 
                        $cat_id = db_escape_string($_POST["cat_id"]);
                        $auth_login = db_escape_string(trim($_POST["auth_login"]));
                        $auth_pass = db_escape_string(trim($_POST["auth_pass"]));
-                       $parent_feed = db_escape_string($_POST["parent_feed"]);
                        $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(
                                $category_qpart_nocomma = "";
                        }
 
-                       if ($parent_feed && $parent_feed != 0) {
-                               $parent_qpart = "parent_feed = '$parent_feed'";
-                       } else {
-                               $parent_qpart = 'parent_feed = NULL';
-                       }
-
                        if (SIMPLEPIE_CACHE_IMAGES) {
                                $cache_images_qpart = "cache_images = $cache_images,";
                        } else {
                        if ($subop == "editSave") {
 
                                $result = db_query($link, "UPDATE ttrss_feeds SET 
-                                       $category_qpart $parent_qpart,
+                                       $category_qpart
                                        title = '$feed_title', feed_url = '$feed_link',
                                        update_interval = '$upd_intl',
                                        purge_interval = '$purge_intl',
                                        update_method = '$update_method'
                                        WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]);
 
-                               if (get_pref($link, 'ENABLE_FEED_CATS')) {
-                                       # update linked feed categories
-                                       $result = db_query($link, "UPDATE ttrss_feeds SET
-                                               $category_qpart_nocomma WHERE parent_feed = '$feed_id' AND
-                                               owner_uid = " . $_SESSION["uid"]);
-                               }
                        } else if ($subop == "batchEditSave") {
                                $feed_data = array();
 
 
                                $filters = load_filters($link, $id, $_SESSION["uid"], 6);
 
-                               $result = db_query($link, "SELECT title, content, link, ref_id FROM
+                               $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']."
 
                                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']);
+                                               $line['content'], $line['link'], strtotime($line['updated']), 
+                                               $line['author'], $tags);
                                        
                                        $new_score = calculate_article_score($article_filters);
 
 
                                $filters = load_filters($link, $id, $_SESSION["uid"], 6);
 
-                               $tmp_result = db_query($link, "SELECT title, content, link, ref_id FROM
+                               $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']."
 
                                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']);
-                                       
+                                               $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();
                        foreach ($ids as $id) {
                        
                                db_query($link, "UPDATE ttrss_feeds SET cat_id = $cat_id_qpart
-                                       WHERE id = '$id' AND parent_feed IS NULL
+                                       WHERE id = '$id'
                                        AND owner_uid = " . $_SESSION["uid"]);
 
-                               # update linked feed categories
-                               db_query($link, "UPDATE ttrss_feeds SET
-                                       cat_id = $cat_id_qpart WHERE parent_feed = '$id' AND 
-                                       owner_uid = " . $_SESSION["uid"]);
-
                        }
 
                        db_query($link, "COMMIT");
 
                        }
 
-                       print "<div id=\"infoBoxTitle\">".__('Category editor')."</div>";
-                       
-                       print "<div class=\"infoBoxContents\">";
-
+                       header("Content-Type: text/xml");
+                       print "<dlg id=\"$subop\">";
+                       print "<title>".__('Category editor')."</title>";
+                       print "<content><![CDATA[";
 
                        if ($action == "add") {
 
-       
                                $feed_cat = db_escape_string(trim($_REQUEST["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_warning(T_sprintf("Category <b>$%s</b> already exists in the database.", 
-                                               $feed_cat));
-                               }
+                               if (!add_feed_category($link, $feed_cat))
+                                       print_warning(T_sprintf("Category <b>$%s</b> already exists in the database.", $feed_cat));
 
                        }
 
                                <input id=\"fadd_cat\" 
                                        onkeypress=\"return filterCR(event, addFeedCat)\"
                                        size=\"40\">
-                                       <button onclick=\"javascript:addFeedCat()\">".
+                                       <button onclick=\"addFeedCat()\">".
                                        __('Create category')."</button></div>";
        
                        $result = db_query($link, "SELECT title,id FROM ttrss_feed_categories
                        if (db_num_rows($result) != 0) {
 
                                print   __('Select:')." 
-                                       <a href=\"javascript:selectPrefRows('fcat', true)\">".__('All')."</a>,
-                                       <a href=\"javascript:selectPrefRows('fcat', false)\">".__('None')."</a>";
+                                       <a href=\"#\" onclick=\"selectTableRows('prefFeedCatList', 'all')\">".__('All')."</a>,
+                                       <a href=\"#\" onclick=\"selectTableRows('prefFeedCatList', 'none')\">".__('None')."</a>";
 
                                print "<div class=\"prefFeedCatHolder\">";
 
                                        $edit_title = htmlspecialchars($line["title"]);
                
                                        print "<td width='5%' align='center'><input 
-                                               onclick='toggleSelectPrefRow(this, \"fcat\");' 
+                                               onclick='toggleSelectRow(this);' 
                                                type=\"checkbox\" id=\"FCCHK-$cat_id\"></td>";
        
                                        print "<td><span id=\"FCATT-$cat_id\">" . 
                        print "<button onclick=\"selectTab('feedConfig')\">".
                                __('Close this window')."</button></div>";
 
-                       print "</div>";
+                       print "]]></content></dlg>";
 
                        return;
 
 
                if ($quiet) return;
 
+               print "<div dojoType=\"dijit.layout.AccordionContainer\" region=\"center\">";
+               print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Feeds')."\">";
+
                set_pref($link, "_PREFS_ACTIVE_TAB", "feedConfig");
 
                $result = db_query($link, "SELECT COUNT(id) AS num_errors
                        $feed_search = $_SESSION["prefs_feed_search"];
                }
 
+               print "<div dojoType=\"dijit.Toolbar\">";
+
+               /* 
                print "<div style='float : right'> 
                        <input id=\"feed_search\" size=\"20\" type=\"search\"
-                               onfocus=\"javascript:disableHotkeys();\" 
-                               onblur=\"javascript:enableHotkeys();\"
-                               onchange=\"javascript:updateFeedList()\" value=\"$feed_search\">
-                       <button onclick=\"javascript:updateFeedList()\">".
+                               onfocus=\"disableHotkeys();\" 
+                               onblur=\"enableHotkeys();\"
+                               onchange=\"updateFeedList()\" value=\"$feed_search\">
+                       <button onclick=\"updateFeedList()\">".
                                __('Search')."</button>
-                       </div>";
-               
-               print "<button onclick=\"quickAddFeed()\">"
-                       .__('Subscribe to feed')."</button> ";
+                               </div>"; */
+
+               print "<div dojoType=\"dijit.form.DropDownButton\">".
+                       "<span>" . __('Select')."</span>";
+
+               print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
+               print "<div onclick=\"dijit.byId('feedTree').model.setAllChecked(true)\" 
+                       dojoType=\"dijit.MenuItem\">".__('All')."</div>";
+               print "<div onclick=\"dijit.byId('feedTree').model.setAllChecked(false)\" 
+                       dojoType=\"dijit.MenuItem\">".__('None')."</div>";
+               print "</div>";
 
-               print "<button onclick=\"editSelectedFeed()\">".
-                       __('Edit feeds')."</button> ";
+               /* print "<div onclick=\"selectTableRows('prefFeedList', 'all')\">".__('All')."</div>,
+                       <div href=\"#\" onclick=\"selectTableRows('prefFeedList', 'none')\">".__('None')."</div>"; */
+
+               print "</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\"> ";
 
                if (get_pref($link, 'ENABLE_FEED_CATS')) {
 
-                       print "<button onclick=\"javascript:editFeedCats()\">".
-                               __('Edit categories')."</button> ";
+                       print "<button dojoType=\"dijit.form.Button\" onclick=\"editFeedCats()\">".
+                               __('Edit categories')."</button dojoType=\"dijit.form.Button\"> ";
                }
 
-               print "<button onclick=\"javascript:removeSelectedFeeds()\">"
-                       .__('Unsubscribe')."</button> ";
+               print "<button dojoType=\"dijit.form.Button\" onclick=\"removeSelectedFeeds()\">"
+                       .__('Unsubscribe')."</button dojoType=\"dijit.form.Button\"> ";
 
                if (defined('_ENABLE_FEED_DEBUGGING')) {
 
 
                }
 
+               print "</div>"; # toolbar
+
+               print "<div id=\"feedlistLoading\">
+               <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\">
+               </div>
+               <div dojoType=\"lib.CheckBoxStoreModel\" jsId=\"feedModel\" store=\"feedStore\"
+               query=\"{id:'root'}\" rootId=\"root\" rootLabel=\"Feeds\"
+                       childrenAttrs=\"items\" checkboxStrict=\"false\" checkboxAll=\"false\">
+               </div>
+               <div dojoType=\"lib.CheckBoxTree\" id=\"feedTree\" _dndController=\"dijit.tree.dndSource\" 
+                       betweenThreshold=\"1\"
+                       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);
+
+                       console.log('onClick: ' + id);
+
+                       if (id.match('FEED')) {
+                               editFeed(bare_id, event);
+                       }
+                       
+               </script>
+               <script type=\"dojo/method\" event=\"onLoad\" args=\"item\">
+                       Element.hide(\"feedlistLoading\");
+               </script>
+               <script type=\"dojo/method\" event=\"checkItemAcceptance\" args=\"item, source, position\">
+                       var source_item = dijit.getEnclosingWidget(source);
+                       console.log(item);
+                       console.log(source_item);
+               </script>
+
+               </div>";
+
+               /*
                $feeds_sort = db_escape_string($_REQUEST["sort"]);
 
                if (!$feeds_sort || $feeds_sort == "undefined") {
                                F1.title,
                                F1.feed_url,
                                ".SUBSTRING_FOR_DATE."(F1.last_updated,1,16) AS last_updated,
-                               F1.parent_feed,
                                F1.update_interval,
                                F1.last_error,
                                F1.purge_interval,
                                F1.cat_id,
-                               F2.title AS parent_title,
                                C1.title AS category,
                                F1.include_in_digest
                                $show_last_article_qpart
                        FROM 
                                ttrss_feeds AS F1 
-                               LEFT JOIN ttrss_feeds AS F2
-                                       ON (F1.parent_feed = F2.id)
                                LEFT JOIN ttrss_feed_categories AS C1
                                        ON (F1.cat_id = C1.id)
                        WHERE 
 
                if (db_num_rows($result) != 0) {
 
-//                     print "<div id=\"infoBoxShadow\"><div id=\"infoBox\">PLACEHOLDER</div></div>";
-
                        print "<p><table width=\"100%\" cellspacing=\"0\" 
                                class=\"prefFeedList\" id=\"prefFeedList\">";
                        print "<tr><td class=\"selectPrompt\" colspan=\"8\">".
                                $show_last_article_checked><label 
                                        for='show_last_article_times'>".__('Show last article times')."</label></div>".
                                __('Select:')."
-                                       <a href=\"javascript:selectPrefRows('feed', true)\">".__('All')."</a>,
-                                       <a href=\"javascript:selectPrefRows('feed', false)\">".__('None')."</a>
+                                       <a href=\"#\" onclick=\"selectTableRows('prefFeedList', 'all')\">".__('All')."</a>,
+                                       <a href=\"#\" onclick=\"selectTableRows('prefFeedList', 'none')\">".__('None')."</a>
                                </td</tr>";
 
                        if (!get_pref($link, 'ENABLE_FEED_CATS')) {
 
                                print "<td width='3%'>&nbsp;</td>";
 
-                               print "<td width='60%'><a href=\"javascript:updateFeedList('title')\">".__('Title')."</a></td>";
+                               print "<td width='60%'><a href=\"#\" onclick=\"updateFeedList('title')\">".__('Title')."</a></td>";
 
                                if ($show_last_article_info) {
-                                       print "<td width='20%' align='right'><a href=\"javascript:updateFeedList('last_article')\">".__('Last&nbsp;Article')."</a></td>";
+                                       print "<td width='20%' align='right'><a href=\"#\" onclick=\"updateFeedList('last_article')\">".__('Last&nbsp;Article')."</a></td>";
                                }
 
-                               print "<td width='20%' align='right'><a href=\"javascript:updateFeedList('last_updated')\">".__('Updated')."</a></td>";
+                               print "<td width='20%' align='right'><a href=\"#\" onclick=\"updateFeedList('last_updated')\">".__('Updated')."</a></td>";
                        }
                        
                        $lnum = 0;
 
                                if (!$last_updated) {
                                        $last_updated = "&mdash;";
-                               } else if (get_pref($link, 'HEADLINES_SMART_DATE')) {
-                                       $last_updated = smart_date_time(strtotime($last_updated));
                                } else {
-                                       $short_date = get_pref($link, 'SHORT_DATE_FORMAT');
-                                       $last_updated = date($short_date, strtotime($last_updated));
+                                       $last_updated = make_local_datetime($link, $last_updated, false);
                                }
 
                                $last_article = $line["last_article"];
 
                                if (!$last_article) {
                                        $last_article = "&mdash;";      
-                               } else if (get_pref($link, 'HEADLINES_SMART_DATE')) {
-                                       $last_article = smart_date_time(strtotime($last_article));
                                } else {
-                                       $short_date = get_pref($link, 'SHORT_DATE_FORMAT');
-                                       $last_article = date($short_date, strtotime($last_article));
+                                       $last_article = make_local_datetime($link, $last_article, false);
                                }
 
                                if (get_pref($link, 'ENABLE_FEED_CATS') && $cur_cat_id != $cat_id) {
 
                                        print "<td width='3%'>&nbsp;</td>";
 
-                                       print "<td width='60%'><a href=\"javascript:updateFeedList('title')\">".__('Title')."</a></td>";
+                                       print "<td width='60%'><a href=\"#\" onclick=\"updateFeedList('title')\">".__('Title')."</a></td>";
 
                                        if ($show_last_article_info) {
                                                print "<td width='20%' align='right'>
-                                                       <a href=\"javascript:updateFeedList('last_article')\">".__('Last&nbsp;Article')."</a></td>";
+                                                       <a href=\"#\" onclick=\"updateFeedList('last_article')\">".__('Last&nbsp;Article')."</a></td>";
                                        }
 
                                        print "<td width='20%' align='right'>
-                                               <a href=\"javascript:updateFeedList('last_updated')\">".__('Updated')."</a></td>";
+                                               <a href=\"#\" onclick=\"updateFeedList('last_updated')\">".__('Updated')."</a></td>";
 
                                        $cur_cat_id = $cat_id;
                                }
                                        $feed_icon = "<img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\">";
                                }
                                
-                               print "<td class='feedSelect'><input onclick='toggleSelectPrefRow(this, \"feed\");' 
+                               print "<td class='feedSelect'><input 
+                               onclick='toggleSelectRowById(this, \"FEEDR-".$line['id']."\");' 
                                type=\"checkbox\" id=\"FRCHK-".$line["id"]."\"></td>";
 
-                               $onclick = "onclick='editFeed($feed_id)' title='".__('Click to edit')."'";
+                               $onclick = "onclick='editFeed($feed_id, event)' title='".__('Click to edit')."'";
 
                                print "<td $onclick class='feedIcon'>$feed_icon</td>";          
 
                                        $last_article = "<span class=\"feed_error\">$last_article</span>";
                                }
 
-                               $parent_title = $line["parent_title"];
-                               if ($parent_title) {
-                                       $linked_to = sprintf(__("(linked to %s)"), $parent_title);
-                                       $parent_title = "<span class='groupPrompt'>$linked_to</span>";
-                               }
-
-                               print "<td $onclick>" . "$edit_title $parent_title" . "</td>";
+                               print "<td $onclick>" . $edit_title . "</td>";
 
                                if ($show_last_article_info) {
                                        print "<td align='right' $onclick>" . 
                        }
                        print "</p>";
 
-               }
+               } */
 
-               print "<h3>".__('OPML')."</h3>";
+               print "</div>"; # feeds pane
 
-/*             print "<div style='float : left'>
-               <form   enctype=\"multipart/form-data\" method=\"POST\" action=\"opml.php\">
-               ".__('File:')." <input id=\"opml_file\" name=\"opml_file\" type=\"file\">&nbsp;
-                       <input type=\"hidden\" name=\"op\" value=\"Import\">
-                       <button onclick=\"return validateOpmlImport();\"
-                               type=\"submit\">".__('Import')."</button>
-                               </form></div>";
-
-               print "&nbsp;"; */
+               print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('OPML')."\">";
 
                print "<p>" . __("Using OPML you can export and import your feeds and Tiny Tiny RSS settings.");
 
                        </form>";
                print "</div>&nbsp;";
 
-               print "<button onclick=\"gotoExportOpml()\">".
-                       __('Export OPML')."</button>";
-
-               if (!get_pref($link, "_PREFS_OPML_PUBLISH_KEY")){
-                       set_pref($link, "_PREFS_OPML_PUBLISH_KEY", generate_publish_key());
-               }
+               print "<button onclick=\"gotoExportOpml()\">".__('Export OPML')."</button>";
 
                print "<p>".__('Your OPML can be published publicly and can be subscribed by anyone who knows the URL below.');
 
                        __('Display URL')."</button> ";
 
 
-               if (strpos($_SERVER['HTTP_USER_AGENT'], "Firefox") !== false) {
-       
-                       print "<h3>" . __("Firefox Integration") . "</h3>";
+               print "</div>"; # pane
+
+               if (true || strpos($_SERVER['HTTP_USER_AGENT'], "Firefox") !== false) {
+
+                       print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Firefox integration')."\">";
                 
                        print "<p>" . __('This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below.') . "</p>";
 
                                "</button>";
 
                        print "</p>";
-               }
 
-               print "<h3>".__("Subscribing via bookmarklet")."</h3>";
+                       print "</div>"; # pane
+               }
 
+               print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Subscribing using bookmarklet')."\">";
+               
                print "<p>" . __("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.") . "</p>";
 
                $bm_subscribe_url = str_replace('%s', '', add_feed_url());
 
                print "<a href=\"$bm_url\" class='visibleLink'>" . __('Subscribe in Tiny Tiny RSS'). "</a>";
 
-               print "<h3>".__("Published articles")."</h3>";
+               print "</div>"; #pane
+
+               print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Published articles and generated feeds')."\">";
 
-               if (!get_pref($link, "_PREFS_PUBLISH_KEY")) {
-                       set_pref($link, "_PREFS_PUBLISH_KEY", generate_publish_key());
-               }
-               
                print "<p>".__('Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below.')."</p>";
 
-               print "<button onclick=\"return displayDlg('pubUrl')\">".
+               $rss_url = '-2::' . htmlspecialchars(get_self_url_prefix() . 
+                               "/backend.php?op=rss&id=-2&view-mode=all_articles");;
+
+               print "<button onclick=\"return displayDlg('generatedFeed', '$rss_url')\">".
                        __('Display URL')."</button> ";
                
+               print "<button onclick=\"return clearFeedAccessKeys()\">".
+                       __('Clear all generated URLs')."</button> ";
+
+               print "</div>"; #pane
+               print "</div>"; #container
 
        }