diff --git a/backend.php b/backend.php index 82e07e6d..b4181069 100644 --- a/backend.php +++ b/backend.php @@ -288,11 +288,16 @@ "; } - // FIXME: check for null value here - - $result = db_query($link, "SELECT *,SUBSTRING(last_updated,1,16) as last_updated_s, - EXTRACT(EPOCH FROM NOW()) - EXTRACT(EPOCH FROM last_updated) as update_timeout - FROM ttrss_feeds WHERE id = '$feed'"); + if (DB_TYPE == "pgsql") { + $result = db_query($link, + "SELECT *,SUBSTRING(last_updated,1,16) as last_updated_s, + EXTRACT(EPOCH FROM NOW()) - EXTRACT(EPOCH FROM last_updated) as update_timeout + FROM ttrss_feeds WHERE id = '$feed'"); + } else { + $result = db_query($link, + "SELECT *,SUBSTRING(last_updated,1,16) as last_updated_s + FROM ttrss_feeds WHERE id = '$feed'"); + } if ($result) { @@ -356,10 +361,15 @@ $limit_query_part = "LIMIT " . $limit; } + if (DB_TYPE == "pgsql") { + $extract_epoch_qpart = " + ,EXTRACT(EPOCH FROM last_read) AS last_read_ts, + EXTRACT(EPOCH FROM updated) AS updated_ts"; + } + $result = db_query($link, "SELECT - id,title,updated,unread,feed_id,marked,link, - EXTRACT(EPOCH FROM last_read) AS last_read_ts, - EXTRACT(EPOCH FROM updated) AS updated_ts + id,title,updated,unread,feed_id,marked,link + $extract_epoch_qpart FROM ttrss_entries WHERE @@ -388,12 +398,12 @@ alt=\"Updated\">"; } - if ($line["unread"] == "t") { + if ($line["unread"] == "t" || $line["unread"] == "1") { $class .= "Unread"; ++$num_unread; } - if ($line["marked"] == "t") { + if ($line["marked"] == "t" || $line["marked"] == "1") { $marked_pic = "\"Reset"; } else { @@ -648,7 +658,7 @@ "; + onclick=\"javascript:feedEditSave()\" value=\"Save\">"; } else { print " @@ -668,7 +678,7 @@ print " All feeds: "; + class=\"button\" onclick=\"gotoExportOpml()\" value=\"Export OPML\">"; } @@ -710,7 +720,7 @@ if (!WEB_DEMO_MODE) { - $regexp = db_escape_string($_GET["reg_exp"]); + $regexp = db_escape_string($_GET["regexp"]); $match = db_escape_string($_GET["match"]); $result = db_query($link, diff --git a/db.php b/db.php index cfb289e0..d739aa9b 100644 --- a/db.php +++ b/db.php @@ -20,7 +20,7 @@ function db_escape_string($s) { if (DB_TYPE == "pgsql") { return pg_escape_string($s); } else { - return mysql_escape_string($s); + return mysql_real_escape_string($s); } } @@ -32,6 +32,14 @@ function db_query($link, $query) { } } +function db_query_2($query) { + if (DB_TYPE == "pgsql") { + return pg_query($query); + } else if (DB_TYPE == "mysql") { + return mysql_query($link); + } +} + function db_fetch_assoc($result) { if (DB_TYPE == "pgsql") { return pg_fetch_assoc($result); @@ -43,9 +51,9 @@ function db_fetch_assoc($result) { function db_num_rows($result) { if (DB_TYPE == "pgsql") { - return pg_num_rows($link, $query); + return pg_num_rows($result); } else if (DB_TYPE == "mysql") { - return mysql_num_rows($link, $query); + return mysql_num_rows($result); } } diff --git a/functions.js b/functions.js index ebb1bb8f..540d7b89 100644 --- a/functions.js +++ b/functions.js @@ -263,4 +263,6 @@ function gotoMain() { document.location.href = "tt-rss.php"; } - +function gotoExportOpml() { + document.location.href = "opml.php?op=Export"; +} diff --git a/functions.php b/functions.php index bea443c2..742e026f 100644 --- a/functions.php +++ b/functions.php @@ -171,10 +171,14 @@ $entry_guid = db_escape_string($entry_guid); + if (DB_TYPE == "pgsql") { + $extract_ts_qpart = ",EXTRACT(EPOCH FROM updated) as updated_timestamp"; + } + $result = db_query($link, " SELECT - id,last_read,no_orig_date,title,feed_id,content_hash, - EXTRACT(EPOCH FROM updated) as updated_timestamp + id,last_read,no_orig_date,title,feed_id,content_hash + $extract_ts_qpart FROM ttrss_entries WHERE diff --git a/opml.php b/opml.php index f3dd34ef..d932d8bd 100644 --- a/opml.php +++ b/opml.php @@ -8,20 +8,22 @@ } require_once "config.php"; - require_once "functions.php"; + require_once "db.php"; - $link = pg_connect(DB_CONN); + $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - pg_query($link, "set client_encoding = 'utf-8'"); + if (DB_TYPE == "pgsql") { + pg_query($link, "set client_encoding = 'utf-8'"); + } if ($op == "Export") { print ""; print "" . date("r", time()) . ""; print ""; - $result = pg_query("SELECT * FROM ttrss_feeds ORDER BY title"); + $result = db_query($link, "SELECT * FROM ttrss_feeds ORDER BY title"); - while ($line = pg_fetch_assoc($result)) { + while ($line = db_fetch_assoc($result)) { $title = $line["title"]; $url = $line["feed_url"]; @@ -32,24 +34,25 @@ } function startElement($parser, $name, $attrs) { + if ($name == "OUTLINE") { - $title = pg_escape_string($attrs['TEXT']); - $url = pg_escape_string($attrs['XMLURL']); + $title = db_escape_string($attrs['TEXT']); + $url = db_escape_string($attrs['XMLURL']); if (!$title || !$url) return; print "Feed $title ($url)... "; - $result = pg_query("SELECT id FROM ttrss_feeds WHERE + $result = db_query_2("SELECT id FROM ttrss_feeds WHERE title = '$title' OR feed_url = '$url'"); - if (pg_num_rows($result) > 0) { + if (db_num_rows($result) > 0) { print " Already imported.
"; } else { - $result = pg_query("INSERT INTO ttrss_feeds (title, feed_url) VALUES + $result = db_query_2("INSERT INTO ttrss_feeds (title, feed_url) VALUES ('$title', '$url')"); print "Done.
"; @@ -125,6 +128,6 @@ } - pg_close($link); + db_close($link); ?> diff --git a/tt-rss.js b/tt-rss.js index 2015797c..1d1c793a 100644 --- a/tt-rss.js +++ b/tt-rss.js @@ -58,17 +58,19 @@ function feedlist_callback() { } */ +function checkActiveFeedId() { + + var actfeedid = frames["feeds-frame"].document.getElementById("ACTFEEDID"); + + if (actfeedid) { + active_feed_id = actfeedid.innerHTML; + } +} function refetch_callback() { if (xmlhttp_rpc.readyState == 4) { - var actfeedid = frames["feeds-frame"].document.getElementById("ACTFEEDID"); - - if (actfeedid) { - active_feed_id = actfeedid.innerHTML; - } - document.title = "Tiny Tiny RSS"; notify("All feeds updated."); @@ -253,6 +255,7 @@ function resetSearch() { } function search() { + checkActiveFeedId(); if (active_feed_id) { viewfeed(active_feed_id, 0, ""); } else { @@ -315,9 +318,9 @@ function init() { updateFeedList(false, false); document.onkeydown = hotkey_handler; - setTimeout("timeout()", 1800*1000); - scheduleFeedUpdate(true); +// setTimeout("timeout()", 1800*1000); +// scheduleFeedUpdate(true); var content = document.getElementById("content"); diff --git a/ttrss_schema_mysql.sql b/ttrss_schema_mysql.sql index 91fde947..348cb242 100644 --- a/ttrss_schema_mysql.sql +++ b/ttrss_schema_mysql.sql @@ -5,7 +5,7 @@ create table ttrss_feeds (id integer not null auto_increment primary key, title varchar(200) not null unique, feed_url varchar(250) unique not null, icon_url varchar(250) not null default '', - last_updated timestamp default null) TYPE=InnoDB; + last_updated datetime default '') TYPE=InnoDB; insert into ttrss_feeds (title,feed_url) values ('Footnotes', 'http://gnomedesktop.org/node/feed'); insert into ttrss_feeds (title,feed_url) values ('Freedesktop.org', 'http://planet.freedesktop.org/rss20.xml'); @@ -28,19 +28,19 @@ insert into ttrss_feeds (title,feed_url) values ('Technocrat.net', 'http://syndication.technocrat.net/rss'); create table ttrss_entries (id integer not null primary key auto_increment, - feed_id integer not null, - updated timestamp not null, + feed_id integer not null references ttrss_feeds(id), + updated datetime not null, title varchar(250) not null, guid varchar(250) not null unique, link varchar(250) not null, content text not null, content_hash varchar(250) not null, - last_read timestamp, - marked bool not null default 'false', - date_entered timestamp not null, - no_orig_date bool not null default 'false', + last_read datetime, + marked bool not null default 0, + date_entered datetime not null, + no_orig_date bool not null default 0, comments varchar(250) not null default '', - unread bool not null default 'true') TYPE=InnoDB; + unread bool not null default 1) TYPE=InnoDB; drop table if exists ttrss_filters; drop table if exists ttrss_filter_types; @@ -56,7 +56,7 @@ insert into ttrss_filter_types (id,name,description) values (3, 'both', 'Title or Content'); create table ttrss_filters (id integer primary key auto_increment, - filter_type integer not null, + filter_type integer not null references ttrss_filter_types(id), reg_exp varchar(250) not null, description varchar(250) not null default '') TYPE=InnoDB;