]> git.wh0rd.org - tt-rss.git/blobdiff - backend.php
userDetails -> infoBox, feed infobox, user details improvements
[tt-rss.git] / backend.php
index 4b10cbdbfadfa8c7f81454c312be918872b7a47b..0333e11fd1ac867c860aa8921a3d474b5edbefd4 100644 (file)
@@ -1,7 +1,21 @@
 <?
        session_start();
 
-       if (!$_SESSION["uid"]) { exit; }
+       $op = $_REQUEST["op"];
+
+       if (($op == "rpc" || $op == "updateAllFeeds" || 
+                       $op == "forceUpdateAllFeeds") && !$_REQUEST["noxml"]) {
+               header("Content-Type: application/xml");
+       }
+
+       if (!$_SESSION["uid"]) {
+
+               if (($op == "rpc" || $op == "updateAllFeeds" || 
+                       $op == "forceUpdateAllFeeds")) {
+                       print "<error error-code=\"6\"/>";
+               }
+               exit;
+       }
 
        define(SCHEMA_VERSION, 2);
 
        require_once "functions.php";
        require_once "magpierss/rss_fetch.inc";
 
-       $op = $_REQUEST["op"];
-
-       if ($op == "rpc" || $op == "updateAllFeeds") {
-               header("Content-Type: application/xml");
-       }
-
        $script_started = getmicrotime();
 
        $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
        /* FIXME this needs reworking */
 
        function getGlobalCounters($link) {
-               $result = db_query($link, "SELECT count(id) as c_id FROM ttrss_entries
-                       WHERE unread = true AND owner_uid = " . $_SESSION["uid"]);
+               $result = db_query($link, "SELECT count(id) as c_id FROM ttrss_entries,ttrss_user_entries
+                       WHERE unread = true AND 
+                       ttrss_user_entries.ref_id = ttrss_entries.id AND 
+                       owner_uid = " . $_SESSION["uid"]);
                $c_id = db_fetch_result($result, 0, "c_id");
                print "<counter id='global-unread' counter='$c_id'/>";
        }
 
        function getTagCounters($link) {
+       
                $result = db_query($link, "SELECT tag_name,count(ttrss_entries.id) AS count
-                       FROM ttrss_tags,ttrss_entries WHERE
+                       FROM ttrss_tags,ttrss_entries,ttrss_user_entries WHERE
+                       ttrss_user_entries.ref_id = ttrss_entries.id AND 
                        ttrss_tags.owner_uid = ".$_SESSION["uid"]." AND
-                       post_id = ttrss_entries.id AND unread = true GROUP BY tag_name 
+                       post_int_id = ttrss_user_entries.int_id AND unread = true GROUP BY tag_name 
                UNION
                        select tag_name,0 as count FROM ttrss_tags
                        WHERE ttrss_tags.owner_uid = ".$_SESSION["uid"]);
@@ -81,8 +93,9 @@
 
        function getLabelCounters($link) {
 
-               $result = db_query($link, "SELECT count(id) as count FROM ttrss_entries
-                       WHERE marked = true AND unread = true AND owner_uid = ".$_SESSION["uid"]);
+               $result = db_query($link, "SELECT count(id) as count FROM ttrss_entries,ttrss_user_entries
+                       WHERE marked = true AND ttrss_user_entries.ref_id = ttrss_entries.id AND 
+                       unread = true AND owner_uid = ".$_SESSION["uid"]);
 
                $count = db_fetch_result($result, 0, "count");
 
 
                        error_reporting (0);
 
-                       $tmp_result = db_query($link, "SELECT count(id) as count FROM ttrss_entries
+                       $tmp_result = db_query($link, "SELECT count(id) as count FROM ttrss_user_entries,ttrss_entries
                                WHERE (" . $line["sql_exp"] . ") AND unread = true AND 
+                               ttrss_user_entries.ref_id = ttrss_entries.id AND 
                                owner_uid = ".$_SESSION["uid"]);
 
                        $count = db_fetch_result($tmp_result, 0, "count");
        function getFeedCounter($link, $id) {
        
                $result = db_query($link, "SELECT 
-                               count(id) as count FROM ttrss_entries
-                       WHERE feed_id = '$id' AND unread = true");
+                               count(id) as count FROM ttrss_entries,ttrss_user_entries
+                       WHERE feed_id = '$id' AND unread = true
+                       AND ttrss_user_entries.ref_id = ttrss_entries.id");
        
                        $count = db_fetch_result($result, 0, "count");
                        
        function getFeedCounters($link) {
        
                $result = db_query($link, "SELECT id,
-                       (SELECT count(id) FROM ttrss_entries WHERE feed_id = ttrss_feeds.id 
+                       (SELECT count(id) 
+                               FROM ttrss_entries,ttrss_user_entries 
+                               WHERE feed_id = ttrss_feeds.id AND ttrss_user_entries.ref_id = ttrss_entries.id
                                AND unread = true AND owner_uid = ".$_SESSION["uid"].") as count
                        FROM ttrss_feeds WHERE owner_uid = ".$_SESSION["uid"]);
        
                        /* virtual feeds */
 
                        $result = db_query($link, "SELECT count(id) as num_starred 
-                               FROM ttrss_entries WHERE marked = true AND unread = true AND owner_uid = '$owner_uid'");
+                               FROM ttrss_entries,ttrss_user_entries 
+                               WHERE marked = true AND 
+                               ttrss_user_entries.ref_id = ttrss_entries.id AND
+                               unread = true AND owner_uid = '$owner_uid'");
                        $num_starred = db_fetch_result($result, 0, "num_starred");
 
                        $class = "virt";
        
                                        error_reporting (0);
                
-                                       $tmp_result = db_query($link, "SELECT count(id) as count FROM ttrss_entries
-                                               WHERE (" . $line["sql_exp"] . ") AND unread = true 
+                                       $tmp_result = db_query($link, "SELECT count(id) as count FROM ttrss_entries,ttrss_user_entries
+                                               WHERE (" . $line["sql_exp"] . ") AND unread = true AND
+                                               ttrss_user_entries.ref_id = ttrss_entries.id
                                                AND owner_uid = '$owner_uid'");
        
                                        $count = db_fetch_result($tmp_result, 0, "count");
                        print "<li><hr></li>";
 
                        $result = db_query($link, "SELECT *,
-                               (SELECT count(id) FROM ttrss_entries 
-                                       WHERE feed_id = ttrss_feeds.id AND owner_uid = '$owner_uid') AS total,
-                               (SELECT count(id) FROM ttrss_entries
+                               (SELECT count(id) FROM ttrss_entries,ttrss_user_entries
+                                       WHERE feed_id = ttrss_feeds.id AND 
+                                       ttrss_user_entries.ref_id = ttrss_entries.id AND
+                                       owner_uid = '$owner_uid') AS total,
+                               (SELECT count(id) FROM ttrss_entries,ttrss_user_entries
                                        WHERE feed_id = ttrss_feeds.id AND unread = true
+                                               AND ttrss_user_entries.ref_id = ttrss_entries.id
                                                AND owner_uid = '$owner_uid') as unread
                                FROM ttrss_feeds WHERE owner_uid = '$owner_uid' ORDER BY title");                       
        
                        // tags
 
                        $result = db_query($link, "SELECT tag_name,count(ttrss_entries.id) AS count
-                               FROM ttrss_tags,ttrss_entries WHERE
-                               post_id = ttrss_entries.id AND unread = true 
+                               FROM ttrss_tags,ttrss_entries,ttrss_user_entries WHERE
+                               post_int_id = ttrss_user_entries.int_id AND 
+                               unread = true AND ref_id = ttrss_entries.id
                                AND ttrss_tags.owner_uid = '$owner_uid' GROUP BY tag_name       
                        UNION
                                select tag_name,0 as count FROM ttrss_tags WHERE owner_uid = '$owner_uid'
                                $mark = "false";
                        }
 
-                       $result = db_query($link, "UPDATE ttrss_entries SET marked = $mark
-                               WHERE id = '$id'");
+                       // FIXME this needs collision testing
+
+                       $result = db_query($link, "UPDATE ttrss_user_entries SET marked = $mark
+                               WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]);
                }
 
                if ($subop == "updateFeed") {
                        $feed_id = db_escape_string($_GET["feed"]);
 
                        $result = db_query($link, 
-                               "SELECT feed_url FROM ttrss_feeds WHERE id = '$feed_id'");
+                               "SELECT feed_url FROM ttrss_feeds WHERE id = '$feed_id'
+                                       AND owner_uid = " . $_SESSION["uid"]);
 
                        if (db_num_rows($result) > 0) {                 
                                $feed_url = db_fetch_result($result, 0, "feed_url");
-//                             update_rss_feed($link, $feed_url, $feed_id);
+                               update_rss_feed($link, $feed_url, $feed_id);
                        }
 
-                       print "DONE-$feed_id";
-
+                       print "<rpc-reply>";
+                       getFeedCounter($link, $feed_id);
+                       print "</rpc-reply>";
+                       
                        return;
                }
 
                if ($subop == "forceUpdateAllFeeds" || $subop == "updateAllFeeds") {
                
-                       update_all_feeds($link, true);                  
+                       update_all_feeds($link, $subop == "forceUpdateAllFeeds");                       
 
                        $omode = $_GET["omode"];
 
                        print "</rpc-reply>";
                }
                
-               if ($subop == "catchupPage") {
+               if ($subop == "catchupSelected") {
 
                        $ids = split(",", $_GET["ids"]);
 
                        foreach ($ids as $id) {
 
-                               db_query($link, "UPDATE ttrss_entries SET unread=false,last_read = NOW()
-                                       WHERE id = '$id'");
+                               db_query($link, "UPDATE ttrss_user_entries SET unread=false,last_read = NOW()
+                                       WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]);
 
                        }
 
                                $error_code = 5;
                        }
 
-                       print "<error code='$error_code'/>";
+                       print "<error error-code='$error_code'/>";
                }
 
                if ($subop == "globalPurge") {
                $subop = $_GET["subop"];
 
                if ($subop == "catchupAll") {
-                       db_query($link, "UPDATE ttrss_entries SET 
+                       db_query($link, "UPDATE ttrss_user_entries SET 
                                last_read = NOW(),unread = false WHERE owner_uid = " . $_SESSION["uid"]);
                }
 
                $id = $_GET["id"];
                $feed_id = $_GET["feed"];
 
-               $result = db_query($link, "UPDATE ttrss_entries SET unread = false,last_read = NOW() WHERE id = '$id'");
+               $result = db_query($link, "UPDATE ttrss_user_entries 
+                       SET unread = false,last_read = NOW() 
+                       WHERE ref_id = '$id' AND feed_id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]);
 
                $addheader = $_GET["addheader"];
 
                $result = db_query($link, "SELECT title,link,content,feed_id,comments,
                        (SELECT icon_url FROM ttrss_feeds WHERE id = feed_id) as icon_url 
-                       FROM ttrss_entries
-                       WHERE   id = '$id'");
+                       FROM ttrss_entries,ttrss_user_entries
+                       WHERE   id = '$id' AND ref_id = id");
 
                if ($addheader) {
                        print "<html><head>
                        if (sprintf("%d", $feed) != 0) {
                        
                                if ($feed > 0) {
-                                       db_query($link, "UPDATE ttrss_entries 
+                                       db_query($link, "UPDATE ttrss_user_entries 
                                                SET unread = false,last_read = NOW() 
-                                               WHERE feed_id = '$feed'");
+                                               WHERE feed_id = '$feed' AND owner_uid = " . $_SESSION["uid"]);
                                                
                                } else if ($feed < 0 && $feed > -10) { // special, like starred
 
                                        if ($feed == -1) {
-                                               db_query($link, "UPDATE ttrss_entries 
+                                               db_query($link, "UPDATE ttrss_user_entries 
                                                        SET unread = false,last_read = NOW()
-                                                       WHERE marked = true");
+                                                       WHERE marked = true AND owner_uid = ".$_SESSION["uid"]);
                                        }
                        
                                } else if ($feed < -10) { // label
 
+                                       // TODO make this more efficient
+
                                        $label_id = -$feed - 11;
 
                                        $tmp_result = db_query($link, "SELECT sql_exp FROM ttrss_labels
-                                               WHERE id = '$label_id'");
+                                               WHERE id = '$label_id'");                                       
 
                                        if ($tmp_result) {
                                                $sql_exp = db_fetch_result($tmp_result, 0, "sql_exp");
 
-                                               db_query($link, "UPDATE ttrss_entries 
+                                               db_query($link, "BEGIN");
+
+                                               $tmp2_result = db_query($link,
+                                                       "SELECT 
+                                                               int_id 
+                                                       FROM 
+                                                               ttrss_user_entries,ttrss_entries 
+                                                       WHERE
+                                                               ref_id = id AND 
+                                                               $sql_exp AND
+                                                               owner_uid = " . $_SESSION["uid"]);
+
+                                               while ($tmp_line = db_fetch_assoc($tmp2_result)) {
+                                                       db_query($link, "UPDATE 
+                                                               ttrss_user_entries 
+                                                       SET 
+                                                               unread = false, last_read = NOW()
+                                                       WHERE
+                                                               int_id = " . $tmp_line["int_id"]);
+                                               }
+                                                               
+                                               db_query($link, "COMMIT");
+
+/*                                             db_query($link, "UPDATE ttrss_user_entries,ttrss_entries 
                                                        SET unread = false,last_read = NOW()
-                                                       WHERE $sql_exp");
+                                                       WHERE $sql_exp
+                                                       AND ref_id = id
+                                                       AND owner_uid = ".$_SESSION["uid"]); */
                                        }
                                }
                        } else { // tag
                $vfeed_query_part = "";
 
                // override query strategy and enable feed display when searching globally
-               if ($search_mode == "All feeds") {
+               if ($search && $search_mode == "All feeds") {
                        $query_strategy_part = "id > 0";
                        $vfeed_query_part = "(SELECT title FROM ttrss_feeds WHERE
                                id = feed_id) as feed_title,";
                                        $vfeed_query_part
                                        SUBSTRING(updated,1,19) as updated_noms
                                FROM
-                                       ttrss_entries 
+                                       ttrss_entries,ttrss_user_entries
                                WHERE
+                               ttrss_user_entries.ref_id = ttrss_entries.id AND
                                owner_uid = '".$_SESSION["uid"]."' AND
                                $search_query_part
                                $view_query_part
                                $vfeed_query_part
                                SUBSTRING(updated,1,19) as updated_noms
                                FROM
-                                       ttrss_entries,ttrss_tags
+                                       ttrss_entries,ttrss_user_entries,ttrss_tags
                                WHERE
-                                       ttrss_entries.owner_uid = '".$_SESSION["uid"]."' AND
-                                       post_id = ttrss_entries.id AND tag_name = '$feed' AND
+                                       ref_id = ttrss_entries.id AND
+                                       ttrss_user_entries.owner_uid = '".$_SESSION["uid"]."' AND
+                                       post_int_id = int_id AND tag_name = '$feed' AND
                                        $view_query_part
                                        $search_query_part
                                        $query_strategy_part ORDER BY $order_by
                if ($subop == "unread") {
                        $ids = split(",", $_GET["ids"]);
                        foreach ($ids as $id) {
-                               db_query($link, "UPDATE ttrss_entries SET unread = true WHERE feed_id = '$id'");
+                               db_query($link, "UPDATE ttrss_user_entries SET unread = true 
+                                       WHERE feed_id = '$id' AND owner_uid = ".$_SESSION["uid"]);
                        }
 
-                       print "Marked selected feeds as read.";
+                       print "Marked selected feeds as unread.";
                }
 
                if ($subop == "read") {
                        $ids = split(",", $_GET["ids"]);
                        foreach ($ids as $id) {
-                               db_query($link, "UPDATE ttrss_entries 
-                                       SET unread = false,last_read = NOW() WHERE feed_id = '$id'");
+                               db_query($link, "UPDATE ttrss_user_entries 
+                                       SET unread = false,last_read = NOW() WHERE 
+                                               feed_id = '$id' AND owner_uid = ".$_SESSION["uid"]);
                        }
 
-                       print "Marked selected feeds as unread.";
+                       print "Marked selected feeds as read.";
 
                }
 
                                title = '$feed_title', feed_url = '$feed_link',
                                update_interval = '$upd_intl',
                                purge_interval = '$purge_intl' 
-                               WHERE id = '$feed_id'");                        
+                               WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]);                    
 
                }
 
                                $ids = split(",", $_GET["ids"]);
 
                                foreach ($ids as $id) {
-                                       db_query($link, "DELETE FROM ttrss_feeds WHERE id = '$id'");
+                                       db_query($link, "DELETE FROM ttrss_feeds 
+                                               WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]);
 
                                        $icons_dir = ICONS_DIR;
                                        
                        if (!WEB_DEMO_MODE) {
 
                                $feed_link = db_escape_string($_GET["link"]);
-                                       
-                               $result = db_query($link,
-                                       "INSERT INTO ttrss_feeds (owner_uid,feed_url,title) VALUES ('".$_SESSION["uid"]."', '$feed_link', '')");
 
                                $result = db_query($link,
-                                       "SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_link'");
+                                       "SELECT id FROM ttrss_feeds 
+                                       WHERE feed_url = '$feed_link' AND owner_uid = ".$_SESSION["uid"]);
 
-                               $feed_id = db_fetch_result($result, 0, "id");
+                               if (db_num_rows($result) == 0) {
+                                       
+                                       $result = db_query($link,
+                                               "INSERT INTO ttrss_feeds (owner_uid,feed_url,title) 
+                                               VALUES ('".$_SESSION["uid"]."', '$feed_link', '')");
+
+                                       $result = db_query($link,
+                                       "SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_link' 
+                                               AND owner_uid = " . $_SESSION["uid"]);
 
-                               if ($feed_id) {
-                                       update_rss_feed($link, $feed_link, $feed_id);
+                                       $feed_id = db_fetch_result($result, 0, "id");
+
+                                       if ($feed_id) {
+                                               update_rss_feed($link, $feed_link, $feed_id);
+                                       }
+                               } else {
+
+                                       print "<div class=\"warning\">
+                                               Feed <b>$feed_link</b> already exists in the database.
+                                       </div>";
                                }
                        }
                }
 
                $result = db_query($link, "SELECT id,title,feed_url,last_error 
-                       FROM ttrss_feeds WHERE last_error != ''");
+                       FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ".$_SESSION["uid"]);
 
                if (db_num_rows($result) > 0) {
                
                        FROM 
                                ttrss_feeds WHERE owner_uid = '".$_SESSION["uid"]."' ORDER by title");
 
+               print "<div id=\"infoBox\">PLACEHOLDER</div>";
+
                print "<p><table width=\"100%\" class=\"prefFeedList\" id=\"prefFeedList\">";
                print "<tr class=\"title\">
                                        <td>&nbsp;</td><td>Select</td><td width=\"30%\">Title</td>
 
                        print "
                                Selection:&nbsp;
+                       <input type=\"submit\" class=\"button\" 
+                               onclick=\"javascript:selectedFeedDetails()\" value=\"Details\">
                        <input type=\"submit\" class=\"button\" 
                                onclick=\"javascript:editSelectedFeed()\" value=\"Edit\">
                        <input type=\"submit\" class=\"button\" 
                                ttrss_users
                        ORDER by login");
 
-               print "<div id=\"prefUserDetails\">PLACEHOLDER</div>";
+               print "<div id=\"infoBox\">PLACEHOLDER</div>";
 
                print "<p><table width=\"100%\" class=\"prefUserList\" id=\"prefUserList\">";
 
 
                $uid = sprintf("%d", $_GET["id"]);
 
-               print "<div class='userDetails'>";
+               print "<div class='infoBoxContents'>";
 
-               $result = db_query($link, "SELECT login,last_login,access_level
+               $result = db_query($link, "SELECT login,last_login,access_level,
+                       (SELECT COUNT(int_id) FROM ttrss_user_entries 
+                               WHERE owner_uid = id) AS stored_articles
                        FROM ttrss_users 
                        WHERE id = '$uid'");
                        
                $login = db_fetch_result($result, 0, "login");
                $last_login = db_fetch_result($result, 0, "last_login");
                $access_level = db_fetch_result($result, 0, "access_level");
+               $stored_articles = db_fetch_result($result, 0, "stored_articles");
 
                print "<tr><td>Username</td><td>$login</td></tr>";
                print "<tr><td>Access level</td><td>$access_level</td></tr>";
                print "<tr><td>Last logged in</td><td>$last_login</td></tr>";
+               print "<tr><td>Stored articles</td><td>$stored_articles</td></tr>";
 
                $result = db_query($link, "SELECT COUNT(id) as num_feeds FROM ttrss_feeds
                        WHERE owner_uid = '$uid'");
 
                print "<tr><td>Subscribed feeds count</td><td>$num_feeds</td></tr>";
 
-               $result = db_query($link, "SELECT 
+/*             $result = db_query($link, "SELECT 
                        SUM(LENGTH(content)+LENGTH(title)+LENGTH(link)+LENGTH(guid)) AS db_size 
-                       FROM ttrss_entries WHERE owner_uid = '$uid'");
+                       FROM ttrss_user_entries,ttrss_entries 
+                               WHERE owner_uid = '$uid' AND ref_id = id");
 
                $db_size = round(db_fetch_result($result, 0, "db_size") / 1024);
 
-               print "<tr><td>Approx. DB size</td><td>$db_size KBytes</td></tr>";
+               print "<tr><td>Approx. used DB size</td><td>$db_size KBytes</td></tr>";  */
 
                print "</table>";
 
                        $icon_file = ICONS_URL."/".$line["id"].".ico";
 
                        if (file_exists($icon_file) && filesize($icon_file) > 0) {
-                               $feed_icon = "<img class=\"feedIcon\" src=\"$icon_file\">";
+                               $feed_icon = "<img class=\"tinyFeedIcon\" src=\"$icon_file\">";
                        } else {
                                $feed_icon = "<img class=\"feedIcon\" src=\"images/blank_icon.gif\">";
                        }
 
                print "<div align='center'>
                        <input type='submit' class='button'                     
-                       onclick=\"closeUserDetails()\" value=\"Close this window\"></div>";
+                       onclick=\"closeInfoBox()\" value=\"Close this window\"></div>";
 
 //             print "</body></html>"; 
 
        }
 
+       if ($op == "feed-details") {
+
+               $feed_id = $_GET["id"];
+
+               $result = db_query($link, 
+                       "SELECT 
+                               title,feed_url,last_updated,
+                               (SELECT COUNT(int_id) FROM ttrss_user_entries 
+                                       WHERE feed_id = id) AS total,
+                               (SELECT COUNT(int_id) FROM ttrss_user_entries 
+                                       WHERE feed_id = id AND unread = true) AS unread,
+                               (SELECT COUNT(int_id) FROM ttrss_user_entries 
+                                       WHERE feed_id = id AND marked = true) AS marked
+                       FROM ttrss_feeds
+                       WHERE id = '$feed_id' AND owner_uid = ".$_SESSION["uid"]);
+
+               if (db_num_rows($result) == 0) return;
+
+               $title = db_fetch_result($result, 0, "title");
+               $last_updated = db_fetch_result($result, 0, "last_updated");
+               $feed_url = db_fetch_result($result, 0, "feed_url");
+               $total = db_fetch_result($result, 0, "total");
+               $unread = db_fetch_result($result, 0, "unread");
+               $marked = db_fetch_result($result, 0, "marked");
+
+               print "<div class=\"infoBoxContents\"><h1>$title</h1>";
+
+               print "<table width='100%'>";
+
+               print "<tr><td>Feed URL</td><td><a href=\"$feed_url\">$feed_url</a></td></tr>";
+               print "<tr><td>Last updated</td><td>$last_updated</td></tr>";
+               print "<tr><td>Total articles</td><td>$total</td></tr>";
+               print "<tr><td>Unread articles</td><td>$unread</td></tr>";
+               print "<tr><td>Starred articles</td><td>$marked</td></tr>";
+
+               print "</table>";
+
+               print "</div>";
+
+               print "<div align='center'>
+                       <input type='submit' class='button'                     
+                       onclick=\"closeInfoBox()\" value=\"Close this window\"></div>";
+
+       }
+
        db_close($link);
 ?>