]> git.wh0rd.org - tt-rss.git/blobdiff - functions.php
view: set feed_id to 0 when it is undefined
[tt-rss.git] / functions.php
index c0d9eaaea07b2d0077711b1a16e003a96fa62b6f..1e73dcc85b3909a2b0ca77279233c136afad6f08 100644 (file)
@@ -40,7 +40,7 @@
        }
 
        if (ENABLE_TRANSLATIONS == true) { // If translations are enabled.
-               require_once "accept-to-gettext.php";
+               require_once "lib/accept-to-gettext.php";
                require_once "lib/gettext/gettext.inc";
 
                function startup_gettext() {
 
                        foreach ($iterator as $item) {
 
-                               if ($_GET['xdebug']) {
+                               if ($_GET['xdebug'] == 2) {
                                        print_r($item);
-
                                }
 
                                if ($use_simplepie) {
                                        } 
                                }
 
-                               if ($_GET["xdebug"]) {
+                               if ($_GET["xdebug"] == 2) {
                                        print "update_rss_feed: content: ";
                                        print_r(htmlspecialchars($entry_content));
                                }
 
                                        // do we allow duplicate posts with same GUID in different feeds?
                                        if (get_pref($link, "ALLOW_DUPLICATE_POSTS", $owner_uid, false)) {
-                                               $dupcheck_qpart = "AND feed_id = '$feed'";
+                                               $dupcheck_qpart = "AND (feed_id = '$feed' OR feed_id IS NULL)";
                                        } else { 
                                                $dupcheck_qpart = "";
                                        }
                                                _debug("update_rss_feed: initial score: $score");
                                        }
 
-                                       $result = db_query($link,
-                                               "SELECT ref_id, int_id FROM ttrss_user_entries WHERE
+                                       $query = "SELECT ref_id, int_id FROM ttrss_user_entries WHERE
                                                        ref_id = '$ref_id' AND owner_uid = '$owner_uid'
-                                                       $dupcheck_qpart");
+                                                       $dupcheck_qpart";
+
+//                                     if ($_GET["xdebug"]) print "$query\n";
+
+                                       $result = db_query($link, $query);
 
                                        // okay it doesn't exist - create user entry
                                        if (db_num_rows($result) == 0) {
                                                        $entry_int_id = db_fetch_result($result, 0, "int_id");
                                                }
                                        } else {
+                                               if (defined('DAEMON_EXTENDED_DEBUG') || $_GET['xdebug']) {
+                                                       _debug("update_rss_feed: user record FOUND");
+                                               }
+
                                                $entry_ref_id = db_fetch_result($result, 0, "ref_id");
                                                $entry_int_id = db_fetch_result($result, 0, "int_id");
                                        }
                $rtl_content = false, $last_updated = false, $last_error = false,
                $fg_content = false, $bg_content = false) {
 
+               if (!$feed_title) $feed_title = getFeedTitle($link, $feed_id, false);
+               if (!$unread) $unread = getFeedUnread($link, $feed_id); 
+
+               if ($unread > 0) $class .= "Unread";
+
+               if (!$icon_file) $icon_file = getFeedIcon($feed_id);
+
                if (file_exists($icon_file) && filesize($icon_file) > 0) {
                                $feed_icon = "<img id=\"FIMG-$feed_id\" src=\"$icon_file\">";
                } else {
        
                        return $unread;
                } else if ($cat == -1) {
-                       return getFeedUnread($link, -1) + getFeedUnread($link, -2) + getFeedUnread($link, -3);
+                       return getFeedUnread($link, -1) + getFeedUnread($link, -2) + getFeedUnread($link, -3) + getFeedUnread($link, 0);
                } else if ($cat == -2) {
 
                        $result = db_query($link, "
                        }
                } else if ($n_feed == -4) {
                        $match_part = "true";
-               } else if ($n_feed > 0) {
+               } else if ($n_feed >= 0) {
 
                        $result = db_query($link, "SELECT id FROM ttrss_feeds 
                                        WHERE parent_feed = '$n_feed'
                                
                                $match_part = implode(" OR ", $linked_feeds);
 
-                               $result = db_query($link, "SELECT COUNT(int_id) AS unread 
+                               $tmp_result = db_query($link, "SELECT COUNT(int_id) AS unread 
                                        FROM ttrss_user_entries,ttrss_entries
                                        WHERE   $unread_qpart AND
                                        ttrss_user_entries.ref_id = ttrss_entries.id AND
                                $unread = 0;
 
                                # this needs to be rewritten
-                               while ($line = db_fetch_assoc($result)) {
+                               while ($line = db_fetch_assoc($tmp_result)) {
                                        $unread += $line["unread"];
                                }
 
                                return $unread;
 
                        } else {
-                               $match_part = "feed_id = '$n_feed'";
+                               if ($n_feed != 0) {
+                                       $match_part = "feed_id = '$n_feed'";
+                               } else {
+                                       $match_part = "feed_id IS NULL";
+                               }
                        }
                } else if ($feed < -10) {
 
                }
 
                if ($match_part) {
-               
-                       $result = db_query($link, "SELECT count(int_id) AS unread 
-                               FROM ttrss_user_entries,ttrss_feeds,ttrss_entries WHERE
-                               ttrss_user_entries.feed_id = ttrss_feeds.id AND
+
+                       if ($n_feed != 0) {
+                               $from_qpart = "ttrss_user_entries,ttrss_feeds,ttrss_entries";
+                               $feeds_qpart = "ttrss_feeds.hidden = false AND
+                                       ttrss_user_entries.feed_id = ttrss_feeds.id AND";
+                       } else {
+                               $from_qpart = "ttrss_user_entries,ttrss_entries";
+                       }
+
+                       $query = "SELECT count(int_id) AS unread 
+                               FROM $from_qpart WHERE
                                ttrss_user_entries.ref_id = ttrss_entries.id AND 
-                               ttrss_feeds.hidden = false AND
                                $age_qpart AND
-                               $unread_qpart AND ($match_part) AND ttrss_user_entries.owner_uid = " . $owner_uid);
+                               $feeds_qpart
+                               $unread_qpart AND ($match_part) AND ttrss_user_entries.owner_uid = $owner_uid";
+
+                       $result = db_query($link, $query);
                                
                } else {
                
 
        }
 
+       function getSubscribedFeeds($link) {
+               $result = db_query($link, "SELECT COUNT(id) AS fn FROM 
+                       ttrss_feeds WHERE owner_uid = " . $_SESSION["uid"]);
+
+               return db_fetch_result($result, 0, "fn");
+       }
+
        function getTagCounters($link, $smart_mode = SMART_RPC_COUNTERS) {
 
                if ($smart_mode) {
 
                $ret_arr = array();
 
-               for ($i = -1; $i >= -4; $i--) {
+               for ($i = 0; $i >= -4; $i--) {
 
                        $count = getFeedUnread($link, $i);
        
 
        }
 
+       function getFeedIcon($id) {
+               switch ($id) {
+               case 0:
+                       return "images/archive.png";
+                       break;
+               case -1:
+                       return "images/mark_set.png";
+                       break;
+               case -2:
+                       return "images/pub_set.gif";
+                       break;
+               case -3:
+                       return "images/fresh.png";
+                       break;
+               case -4:
+                       return "images/tag.png";
+                       break;
+               default:
+                       if ($id < -10) {
+                               return "images/label.png";
+                       } else {
+                               return ICONS_URL . "/$id.ico";
+                       }
+                       break;
+               }
+       }
+
        function getFeedTitle($link, $id) {
                if ($id == -1) {
                        return __("Starred articles");
                        return __("Fresh articles");
                } else if ($id == -4) {
                        return __("All articles");
+               } else if ($id == 0) {
+                       return __("Archived articles");
                } else if ($id < -10) {
                        $label_id = -$id - 11;
                        $result = db_query($link, "SELECT caption FROM ttrss_labels2 WHERE id = '$label_id'");
                print "<param key=\"num_feeds\" value=\"".
                        (int)$num_feeds. "\"/>";
 
+               print "<param key=\"collapsed_feedlist\" value=\"" . 
+                       (int) get_pref($link, "_COLLAPSED_FEEDLIST") . "\"/>";
+
                print "</init-params>";
        }
 
                                $query_strategy_part = "ttrss_entries.id > 0";
                                $vfeed_query_part = "(SELECT title FROM ttrss_feeds WHERE
                                        id = feed_id) as feed_title,";
-                       } else if ($feed >= 0 && $search && $search_mode == "this_cat") {
+                       } else if ($feed > 0 && $search && $search_mode == "this_cat") {
        
                                $vfeed_query_part = "ttrss_feeds.title AS feed_title,";         
 
                                        $query_strategy_part = "ttrss_entries.id > 0";
                                }
                                
-                       } else if ($feed >= 0) {
+                       } else if ($feed > 0) {
        
                                if ($cat_view) {
 
                                                $query_strategy_part = "feed_id = '$feed'";
                                        }
                                }
+                       } else if ($feed == 0) { // starred virtual feed
+                               $query_strategy_part = "feed_id IS NULL";
                        } else if ($feed == -1) { // starred virtual feed
                                $query_strategy_part = "marked = true";
                                $vfeed_query_part = "ttrss_feeds.title AS feed_title,";
 } */
                                }
 
+                               if ($feed != "0") {
+                                       $from_qpart = "ttrss_entries,ttrss_user_entries,ttrss_feeds$ext_tables_part";
+                                       $feed_check_qpart = "ttrss_feeds.hidden = false AND 
+                                               ttrss_user_entries.feed_id = ttrss_feeds.id AND";
+
+                               } else {
+                                       $from_qpart = "ttrss_entries,ttrss_user_entries$ext_tables_part
+                                               LEFT JOIN ttrss_feeds ON (feed_id = ttrss_feeds.id)";
+                               }
+
                                $query = "SELECT DISTINCT 
                                                guid,
                                                ttrss_entries.id,ttrss_entries.title,
                                                updated,
                                                note,
-                                               unread,feed_id,marked,published,link,last_read,
+                                               unread,feed_id,marked,published,link,last_read,orig_feed_id,
                                                ".SUBSTRING_FOR_DATE."(last_read,1,19) as last_read_noms,
                                                $vfeed_query_part
                                                $content_query_part
                                                ".SUBSTRING_FOR_DATE."(updated,1,19) as updated_noms,
                                                author,score
                                        FROM
-                                               ttrss_entries,ttrss_user_entries,ttrss_feeds$ext_tables_part
+                                               $from_qpart
                                        WHERE
                                        $group_limit_part
-                                       ttrss_feeds.hidden = false AND 
-                                       ttrss_user_entries.feed_id = ttrss_feeds.id AND
+                                       $feed_check_qpart
                                        ttrss_user_entries.ref_id = ttrss_entries.id AND
                                        ttrss_user_entries.owner_uid = '$owner_uid' AND
                                        $search_query_part
                                        note,
                                        ttrss_entries.id as id,title,
                                        updated,
-                                       unread,feed_id,
+                                       unread,feed_id,orig_feed_id,
                                        marked,link,last_read,                          
                                        ".SUBSTRING_FOR_DATE."(last_read,1,19) as last_read_noms,
                                        $vfeed_query_part
                                        $limit_query_part");    
                        }
 
+                       if (!$feed_title) $feed_title = getFeedTitle($link, $feed_id);
+
                        return array($result, $feed_title, $feed_site_url, $last_error);
                        
        }
                        unread = NOT unread,last_read = NOW()
                        WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]);
                }
+
+               $feed_id = getArticleFeed($link, $id);
+               ccache_update($link, $feed_id, $_SESSION["uid"]);
        }
 
        function make_guid_from_title($title) {
                        $catchup_feed_link = "javascript:catchupCurrentFeed()";
                        $catchup_sel_link = "javascript:catchupSelection()";
 
+                       $archive_sel_link = "javascript:archiveSelection()";
+                       $delete_sel_link = "javascript:deleteSelection()";
+
                        if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) {
 
                                $sel_all_link = "javascript:selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, '', true)";
                                print "<a $target href=\"$feed_site_url\">".
                                        truncate_string($feed_title,30)."</a>";
                        } else {
-                               print $feed_title;
+                               if ($feed_id < -10) {
+                                       $label_id = -11-$feed_id;
+
+                                       $result = db_query($link, "SELECT fg_color, bg_color
+                                               FROM ttrss_labels2 WHERE id = '$label_id' AND owner_uid = " .
+                                               $_SESSION["uid"]);
+
+                                       if (db_num_rows($result) != 0) {
+                                               $fg_color = db_fetch_result($result, 0, "fg_color");
+                                               $bg_color = db_fetch_result($result, 0, "bg_color");
+
+                                               print "<span style='background : $bg_color; color : $fg_color'>";
+                                               print $feed_title;
+                                               print "</span>";
+                                       } else {
+                                               print $feed_title;
+                                       }
+
+                               } else {
+                                       print $feed_title;
+                               }
                        }
 
                        if ($search) {
                        print "<li onclick=\"$catchup_feed_link\">&nbsp;&nbsp;".__('Entire feed').
                                "</li>";
 
+                       if ($feed_id != "0") {
+                               print "<li class=\"insensitive\">".__('Selection:')."</li>
+                                       <li onclick=\"$archive_sel_link\">&nbsp;&nbsp;".__('Archive')."</li>
+                                       <li onclick=\"$delete_sel_link\">&nbsp;&nbsp;".__('Delete')."</li>";
+                       } else {
+                               print "<li class=\"insensitive\">".__('Selection:')."</li>
+                                       <li onclick=\"$archive_sel_link\">&nbsp;&nbsp;".__('Move back')."</li>
+                                       <li onclick=\"$delete_sel_link\">&nbsp;&nbsp;".__('Delete')."</li>";
+                       } 
+
                        //print "<li><span class=\"insensitive\">--------</span></li>";
                        print "<li class=\"insensitive\">".__('Assign label:')."</li>";
 
 
                if (get_pref($link, 'ENABLE_FEED_CATS')) {
 
-                       if ($_COOKIE["ttrss_vf_vclps"] == 1) {
-                               $cat_hidden = true;
-                       } else {
-                               $cat_hidden = false;
-                       }
+                       $cat_hidden = get_pref($link, "_COLLAPSED_SPECIAL");
 
                        printCategoryHeader($link, -1, $cat_hidden, false);
                }
 
-               $num_starred = getFeedUnread($link, -1);
-               $num_published = getFeedUnread($link, -2);
-               $num_fresh = getFeedUnread($link, -3);
-               $num_total = getFeedUnread($link, -4);
-
-               $class = "virt";
-
-               if ($num_total > 0) $class .= "Unread";
-
-               printFeedEntry(-4, $class, __("All articles"), $num_total, 
-                       "images/tag.png", $link);
-
-               $class = "virt";
-
-               if ($num_fresh > 0) $class .= "Unread";
-
-               printFeedEntry(-3, $class, __("Fresh articles"), $num_fresh, 
-                       "images/fresh.png", $link);
-
-               $class = "virt";
-
-               if ($num_starred > 0) $class .= "Unread";
-
-               $is_ie = (strpos($_SESSION["client.userAgent"], "MSIE") !== false);
-
-               if ($is_ie) {
-                       $mark_img_ext = "gif";
-               } else {
-                       $mark_img_ext = "png";
+               foreach (array(-4, -3, -1, -2, 0) as $i) {
+                       printFeedEntry($i, "virt", false, false, 
+                               false, $link);
                }
 
-               printFeedEntry(-1, $class, __("Starred articles"), $num_starred, 
-                       "images/mark_set.$mark_img_ext", $link);
-
-               $class = "virt";
-
-               if ($num_published > 0) $class .= "Unread";
-
-               printFeedEntry(-2, $class, __("Published articles"), $num_published, 
-                       "images/pub_set.gif", $link);
-
                if (get_pref($link, 'ENABLE_FEED_CATS')) {
                        print "</ul></li>";
                }
                                if (db_num_rows($result) > 0) {
                                        if (get_pref($link, 'ENABLE_FEED_CATS')) {
 
-                                               if ($_COOKIE["ttrss_vf_lclps"] == 1) {
-                                                       $cat_hidden = true;
-                                               } else {
-                                                       $cat_hidden = false;
-                                               }
+                                               $cat_hidden = get_pref($link, "_COLLAPSED_LABELS");
 
                                                printCategoryHeader($link, -2, $cat_hidden, true);
 
        
                                        $label_id = -$line['id'] - 11;
                                        $count = getFeedUnread($link, $label_id);
-
-                                       $class = "label";
-       
-                                       if ($count > 0) {
-                                               $class .= "Unread";
-                                       }
        
                                        printFeedEntry($label_id, 
-                                               $class, $line["caption"], 
-                                               $count, "images/label.png", $link, 
+                                               "label", $line["caption"], 
+                                               $count, false, $link, 
                                                false, false, false,
                                                $line['fg_color'], $line['bg_color']);
                
                                        $class = "feed";
                                }
        
-                               if ($unread > 0) $class .= "Unread";
-       
                                if ($actid == $feed_id) {
                                        $class .= "Selected";
                                }
 
                                        // workaround for NULL category
                                        if ($category == __("Uncategorized")) {
-                                               if ($_COOKIE["ttrss_vf_uclps"] == 1) {
-                                                       $collapsed = "t";
-                                               }
+                                               $collapsed = get_pref($link, "_COLLAPSED_UNCAT");
                                        }
 
                                        $cat_id = sprintf("%d", $cat_id);
                                }
        
                                printFeedEntry($feed_id, $class, $feed, $unread, 
-                                       ICONS_URL."/$feed_id.ico", $link, $rtl_content, 
+                                       false, $link, $rtl_content, 
                                        $last_updated, $line["last_error"]);
        
                                ++$lnum;
                return true;
        }
 
-       function render_login_form($link, $mobile = false) {
-               if (!$mobile) {
+       function render_login_form($link, $mobile = 0) {
+               switch ($mobile) {
+               case 0:
                        require_once "login_form.php";
-               } else {
+                       break;
+               case 1:
                        require_once "mobile/login_form.php";
+                       break;
+               case 2:
+                       require_once "mobile/classic/login_form.php";
                }
        }
 
                $zoom_mode = false) {
 
                /* we can figure out feed_id from article id anyway, why do we
-                * pass feed_id here? */
+                * pass feed_id here? let's ignore the argument :( */
 
                $result = db_query($link, "SELECT feed_id FROM ttrss_user_entries
                        WHERE ref_id = '$id'");
 
-               $feed_id = db_fetch_result($result, 0, "feed_id");
+               $feed_id = (int) db_fetch_result($result, 0, "feed_id");
 
                if (!$zoom_mode) { print "<article id='$id'><![CDATA["; };
 
                        (SELECT icon_url FROM ttrss_feeds WHERE id = feed_id) as icon_url,
                        num_comments,
                        author,
+                       orig_feed_id,
                        note
                        FROM ttrss_entries,ttrss_user_entries
                        WHERE   id = '$id' AND ref_id = id AND owner_uid = " . $_SESSION["uid"]);
                        print "</div>";
                        print "<div clear='both'>$entry_comments</div>";
 
+                       if ($line["orig_feed_id"]) {
+
+                               $tmp_result = db_query($link, "SELECT * FROM ttrss_archived_feeds
+                                       WHERE id = ".$line["orig_feed_id"]);
+
+                               if (db_num_rows($tmp_result) != 0) {
+
+                                       print "<div clear='both'>";
+                                       print __("Originally from:");
+
+                                       print "&nbsp;";
+
+                                       $tmp_line = db_fetch_assoc($tmp_result);
+
+                                       print "<a target='_blank' 
+                                               href=' " . htmlspecialchars($tmp_line['site_url']) . "'>" .
+                                               $tmp_line['title'] . "</a>";
+
+                                       print "&nbsp;";
+
+                                       print "<a target='_blank' href='" . htmlspecialchars($tmp_line['feed_url']) . "'>";
+                                       print "<img title='".__('Feed URL')."'class='tinyFeedIcon' src='images/pub_set.gif'></a>";
+
+                                       print "</div>";
+                               }
+                       }
+
                        print "</div>";
 
                        print "<div class=\"postIcon\">" . $feed_icon . "</div>";
                                        $is_unread = false;
                                }
 
-                               $is_ie = (strpos($_SESSION["client.userAgent"], "MSIE") !== false);
-
-                               if ($is_ie) {
-                                       $mark_img_ext = "gif";
-                               } else {
-                                       $mark_img_ext = "png";
-                               }
-
                                if ($line["marked"] == "t" || $line["marked"] == "1") {
-                                       $marked_pic = "<img id=\"FMPIC-$id\" src=\"images/mark_set.$mark_img_ext\" 
+                                       $marked_pic = "<img id=\"FMPIC-$id\" src=\"images/mark_set.png\" 
                                                class=\"markedPic\"
                                                alt=\"Unstar article\" onclick='javascript:tMark($id)'>";
                                } else {
-                                       $marked_pic = "<img id=\"FMPIC-$id\" src=\"images/mark_unset.$mark_img_ext\" 
+                                       $marked_pic = "<img id=\"FMPIC-$id\" src=\"images/mark_unset.png\" 
                                                class=\"markedPic\"
                                                alt=\"Star article\" onclick='javascript:tMark($id)'>";
                                }
 #                                                              truncate_string($line["feed_title"],30)."</a>&nbsp;</td>";
 #                                      } else {                        
 
-                                       print "<td onclick='view($id,$feed_id)' class='hlContent$hlc_suffix' valign='middle' id='HLC-$id'>";
+                                       print "<td onclick='view($id)' class='hlContent$hlc_suffix' valign='middle' id='HLC-$id'>";
 
                                        print "<a id=\"RTITLE-$id\" 
                                                href=\"" . htmlspecialchars($line["link"]) . "\"
 
 #                                      }
                                        
-                                       print "<td class=\"hlUpdated\" onclick='view($id,$feed_id)'><nobr>$updated_fmt&nbsp;</nobr></td>";
+                                       print "<td class=\"hlUpdated\" onclick='view($id)'><nobr>$updated_fmt&nbsp;</nobr></td>";
 
                                        print "<td class='hlMarkedPic'>$score_pic</td>";
 
                                                onclick=\"cdmClicked($id)\"
                                                id=\"CICD-$id\" $cdm_cstyle>";
 
+                                       if ($line["orig_feed_id"]) {
+
+                                               $tmp_result = db_query($link, "SELECT * FROM ttrss_archived_feeds
+                                               WHERE id = ".$line["orig_feed_id"]);
+
+                                               if (db_num_rows($tmp_result) != 0) {
+
+                                               print "<div clear='both'>";
+                                               print __("Originally from:");
+
+                                               print "&nbsp;";
+
+                                               $tmp_line = db_fetch_assoc($tmp_result);
+
+                                               print "<a target='_blank' 
+                                                       href=' " . htmlspecialchars($tmp_line['site_url']) . "'>" .
+                                                       $tmp_line['title'] . "</a>";
+
+                                               print "&nbsp;";
+
+                                               print "<a target='_blank' href='" . htmlspecialchars($tmp_line['feed_url']) . "'>";
+                                               print "<img title='".__('Feed URL')."'class='tinyFeedIcon' src='images/pub_set.gif'></a>";
+
+                                               print "</div>";
+                                       }
+                               }
+
 //                                     print "<div class=\"cdmInnerContent\" id=\"CICD-$id\" $cdm_cstyle>";
 
                                        print "<div id=\"POSTNOTE-$id\">";
         * @return void
         */
        function clear_feed_articles($link, $id) {
-               $result = db_query($link, "DELETE FROM ttrss_user_entries
+
+               if ($id != 0) {
+                       $result = db_query($link, "DELETE FROM ttrss_user_entries
                        WHERE feed_id = '$id' AND marked = false AND owner_uid = " . $_SESSION["uid"]);
+               } else {
+                       $result = db_query($link, "DELETE FROM ttrss_user_entries
+                       WHERE feed_id IS NULL AND marked = false AND owner_uid = " . $_SESSION["uid"]);
+               }
 
                $result = db_query($link, "DELETE FROM ttrss_entries WHERE 
                        (SELECT COUNT(int_id) FROM ttrss_user_entries WHERE ref_id = id) = 0");
 
                return $str;
        }
+
+       function toggle_collapse_cat($link, $cat_id) {
+               if ($cat_id > 0) {
+                       db_query($link, "UPDATE ttrss_feed_categories SET
+                               collapsed = NOT collapsed WHERE id = '$cat_id' AND owner_uid = " . 
+                               $_SESSION["uid"]);
+               } else {
+                       $pref_name = '';
+
+                       switch ($cat_id) {
+                       case -1:
+                               $pref_name = '_COLLAPSED_SPECIAL';
+                               break;
+                       case -2:
+                               $pref_name = '_COLLAPSED_LABELS';
+                               break;
+                       case 0:
+                               $pref_name = '_COLLAPSED_UNCAT';
+                               break;
+                       }
+
+                       if ($pref_name) {
+                               if (get_pref($link, $pref_name)) {
+                                       set_pref($link, $pref_name, 'false');
+                               } else {
+                                       set_pref($link, $pref_name, 'true');
+                               }
+                       }
+               }
+       }
+
+       function remove_feed($link, $id, $owner_uid) {
+
+               if ($id > 0) {
+
+                       /* save starred articles in Archived feed */
+
+                       db_query($link, "BEGIN");
+
+                       /* prepare feed if necessary */
+
+                       $result = db_query($link, "SELECT id FROM ttrss_archived_feeds
+                               WHERE id = '$id'");
+
+                       if (db_num_rows($result) == 0) {
+                               db_query($link, "INSERT INTO ttrss_archived_feeds 
+                                       (id, owner_uid, title, feed_url, site_url)
+                               SELECT id, owner_uid, title, feed_url, site_url from ttrss_feeds
+                               WHERE id = '$id'");
+                       }
+
+                       db_query($link, "UPDATE ttrss_user_entries SET feed_id = NULL 
+                               WHERE feed_id = '$id' AND 
+                                       marked = true AND owner_uid = $owner_uid");
+
+                       /* remove the feed */
+
+                       db_query($link, "DELETE FROM ttrss_feeds 
+                                       WHERE id = '$id' AND owner_uid = $owner_uid");
+
+                       db_query($link, "COMMIT");
+
+                       if (file_exists(ICONS_DIR . "/$id.ico")) {
+                               unlink(ICONS_DIR . "/$id.ico");
+                       }
+
+                       ccache_remove($link, $id, $owner_uid);
+
+               } else {
+                       label_remove($link, -11-$id, $owner_uid);
+                       ccache_remove($link, -11-$id, $owner_uid);
+               }
+       }
+
+       function remove_feed_category($link, $id, $owner_uid) {
+
+               db_query($link, "DELETE FROM ttrss_feed_categories
+                       WHERE id = '$id' AND owner_uid = $owner_uid");
+
+               ccache_remove($link, $id, $owner_uid, true);
+       }
+
+       function archive_article($link, $id, $owner_uid) {
+               db_query($link, "BEGIN");
+
+               $result = db_query($link, "SELECT feed_id FROM ttrss_user_entries
+                       WHERE ref_id = '$id' AND owner_uid = $owner_uid");
+
+               if (db_num_rows($result) != 0) {
+
+                       /* prepare the archived table */
+
+                       $feed_id = (int) db_fetch_result($result, 0, "feed_id");
+
+                       if ($feed_id) {
+                               $result = db_query($link, "SELECT id FROM ttrss_archived_feeds
+                                       WHERE id = '$feed_id'");
+
+                               if (db_num_rows($result) == 0) {
+                                       db_query($link, "INSERT INTO ttrss_archived_feeds 
+                                               (id, owner_uid, title, feed_url, site_url)
+                                       SELECT id, owner_uid, title, feed_url, site_url from ttrss_feeds
+                                       WHERE id = '$feed_id'");
+                               }
+
+                               db_query($link, "UPDATE ttrss_user_entries 
+                                       SET orig_feed_id = feed_id, feed_id = NULL
+                                       WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]);
+                       }
+               }
+
+               db_query($link, "COMMIT");
+       }
+
+       function getArticleFeed($link, $id) {
+               $result = db_query($link, "SELECT feed_id FROM ttrss_user_entries 
+                       WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]);
+
+               if (db_num_rows($result) != 0) {
+                       return db_fetch_result($result, 0, "feed_id");
+               } else {
+                       return 0;
+               }
+       }
 ?>