require_once 'config.php';
require_once 'db-prefs.php';
require_once 'compat.php';
+ require_once 'errors.php';
+ require_once 'version.php';
require_once 'magpierss/rss_utils.inc';
(SELECT date_entered FROM ttrss_entries WHERE
id = ref_id) < NOW() - INTERVAL '$purge_interval days'"); */
- $result = db_query($link, "DELETE FROM ttrss_user_entries WHERE
- ttrss_entries.id = ref_id AND
- marked = false AND
- feed_id = '$feed_id' AND
- ttrss_entries.date_entered < NOW() - INTERVAL '$purge_interval days'");
+ $pg_version = get_pgsql_version($link);
+
+ if (preg_match("/^7\./", $pg_version) || preg_match("/^8\.0/", $pg_version)) {
+
+ $result = db_query($link, "DELETE FROM ttrss_user_entries WHERE
+ ttrss_entries.id = ref_id AND
+ marked = false AND
+ feed_id = '$feed_id' AND
+ ttrss_entries.date_entered < NOW() - INTERVAL '$purge_interval days'");
+
+ } else {
+
+ $result = db_query($link, "DELETE FROM ttrss_user_entries
+ USING ttrss_entries
+ WHERE ttrss_entries.id = ref_id AND
+ marked = false AND
+ feed_id = '$feed_id' AND
+ ttrss_entries.date_entered < NOW() - INTERVAL '$purge_interval days'");
+ }
$rows = pg_affected_rows($result);
} else {
+
/* $result = db_query($link, "DELETE FROM ttrss_user_entries WHERE
marked = false AND feed_id = '$feed_id' AND
(SELECT date_entered FROM ttrss_entries WHERE
$unread = 'false';
$last_read_qpart = 'NOW()';
}
+
+ if ($filter_name == 'mark') {
+ $marked = 'true';
+ } else {
+ $marked = 'false';
+ }
$result = db_query($link,
"INSERT INTO ttrss_user_entries
- (ref_id, owner_uid, feed_id, unread, last_read)
+ (ref_id, owner_uid, feed_id, unread, last_read, marked)
VALUES ('$ref_id', '$owner_uid', '$feed', $unread,
- $last_read_qpart)");
+ $last_read_qpart, $marked)");
}
$post_needs_update = false;
}
function print_select($id, $default, $values, $attributes = "") {
- print "<select id=\"$id\" $attributes>";
+ print "<select name=\"$id\" id=\"$id\" $attributes>";
foreach ($values as $v) {
if ($v == $default)
$sel = " selected";
print "</select>";
}
+ function print_select_hash($id, $default, $values, $attributes = "") {
+ print "<select name=\"$id\" id='$id' $attributes>";
+ foreach (array_keys($values) as $v) {
+ if ($v == $default)
+ $sel = "selected";
+ else
+ $sel = "";
+
+ print "<option $sel value=\"$v\">".$values[$v]."</option>";
+ }
+
+ print "</select>";
+ }
+
function get_filter_name($title, $content, $link, $filters) {
if ($filters["title"]) {
}
function printFeedEntry($feed_id, $class, $feed_title, $unread, $icon_file, $link,
- $rtl_content = false) {
+ $rtl_content = false, $last_updated = false, $last_error = false) {
if (file_exists($icon_file) && filesize($icon_file) > 0) {
$feed_icon = "<img id=\"FIMG-$feed_id\" src=\"$icon_file\">";
$rtl_tag = "dir=\"ltr\"";
}
- $feed = "<a href=\"javascript:viewfeed('$feed_id', 0);\">$feed_title</a>";
+ if ($last_error) {
+ $link_title = "Error: $last_error ($last_updated)";
+ } else if ($last_updated) {
+ $link_title = "Updated: $last_updated";
+ }
+
+ $feed = "<a title=\"$link_title\" id=\"FEEDL-$feed_id\" href=\"javascript:viewfeed('$feed_id', 0);\">$feed_title</a>";
print "<li id=\"FEEDR-$feed_id\" class=\"$class\">";
if (get_pref($link, 'ENABLE_FEED_ICONS')) {
db_query($link, "COMMIT");
}
-
+
+ function lookup_user_id($link, $user) {
+
+ $result = db_query($link, "SELECT id FROM ttrss_users WHERE
+ login = '$login'");
+
+ if (db_num_rows($result) == 1) {
+ return db_fetch_result($result, 0, "id");
+ } else {
+ return false;
+ }
+ }
+
function authenticate_user($link, $login, $password) {
$pwd_hash = 'SHA1:' . sha1($password);
}
function validate_session($link) {
- if (SESSION_CHECK_ADDRESS && !DATABASE_BACKED_SESSIONS && $_SESSION["uid"]) {
+ if (SESSION_CHECK_ADDRESS && $_SESSION["uid"]) {
if ($_SESSION["ip_address"]) {
if ($_SESSION["ip_address"] != $_SERVER["REMOTE_ADDR"]) {
return false;
function basic_nosid_redirect_check() {
if (!SINGLE_USER_MODE) {
- if (!$_COOKIE["ttrss_sid"]) {
+ if (!$_COOKIE[get_session_cookie_name()]) {
$redirect_uri = get_login_redirect();
$return_to = preg_replace('/.*?\//', '', $_SERVER["REQUEST_URI"]);
header("Location: $redirect_uri?rt=$return_to");
}
if ($error_code != 0) {
- print "<error error-code='$error_code'/>";
+ print_error_xml(5);
return false;
} else {
return true;
$old_counters = $_SESSION["fctr_last_value"];
$result = db_query($link, "SELECT id,last_error,parent_feed,
+ SUBSTRING(last_updated,1,19) AS last_updated,
(SELECT count(id)
FROM ttrss_entries,ttrss_user_entries
WHERE feed_id = ttrss_feeds.id AND
$fctrs_modified = false;
+ $short_date = get_pref($link, 'SHORT_DATE_FORMAT');
+
while ($line = db_fetch_assoc($result)) {
$id = $line["id"];
$count = $line["count"];
$last_error = htmlspecialchars($line["last_error"]);
-
+
+ if (get_pref($link, 'HEADLINES_SMART_DATE')) {
+ $last_updated = smart_date_time(strtotime($line["last_updated"]));
+ } else {
+ $last_updated = date($short_date, strtotime($line["last_updated"]));
+ }
+
$has_img = is_file(ICONS_DIR . "/$id.ico");
$tmp_result = db_query($link,
$has_img_part = "";
}
- print "<counter type=\"feed\" id=\"$id\" counter=\"$count\" $has_img_part $error_part/>";
+ print "<counter type=\"feed\" id=\"$id\" counter=\"$count\" $has_img_part $error_part updated=\"$last_updated\"/>";
}
}
}
}
+ function get_script_dt_add() {
+ if (strpos(VERSION, "99") === false) {
+ return VERSION;
+ } else {
+ return time();
+ }
+ }
+
+ function get_pgsql_version($link) {
+ $result = db_query($link, "SELECT version() AS version");
+ $version = split(" ", db_fetch_result($result, 0, "version"));
+ return $version[1];
+ }
+
+ function print_error_xml($code, $add_msg = "") {
+ global $ERRORS;
+
+ $error_msg = $ERRORS[$code];
+
+ if ($add_msg) {
+ $error_msg = "$error_msg; $add_msg";
+ }
+
+ print "<error error-code=\"$code\" error-msg=\"$error_msg\"/>";
+ }
+
+ function subscribe_to_feed($link, $feed_link, $cat_id = 0) {
+
+ if ($cat_id == "0" || !$cat_id) {
+ $cat_qpart = "NULL";
+ } else {
+ $cat_qpart = "'$cat_id'";
+ }
+
+ $result = db_query($link,
+ "SELECT id FROM ttrss_feeds
+ WHERE feed_url = '$feed_link' AND owner_uid = ".$_SESSION["uid"]);
+
+ if (db_num_rows($result) == 0) {
+
+ $result = db_query($link,
+ "INSERT INTO ttrss_feeds (owner_uid,feed_url,title,cat_id)
+ VALUES ('".$_SESSION["uid"]."', '$feed_link',
+ '[Unknown]', $cat_qpart)");
+
+ $result = db_query($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 ($feed_id) {
+ update_rss_feed($link, $feed_link, $feed_id, true);
+ }
+
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ function print_feed_select($link, $id, $default_id = "",
+ $attributes = "", $include_all_feeds = true) {
+
+ print "<select id=\"$id\" name=\"$id\" $attributes>";
+ if ($include_all_feeds) {
+ print "<option value=\"0\">All feeds</option>";
+ }
+
+ $result = db_query($link, "SELECT id,title FROM ttrss_feeds
+ WHERE owner_uid = ".$_SESSION["uid"]." ORDER BY title");
+
+ if (db_num_rows($result) > 0 && $include_all_feeds) {
+ print "<option disabled>--------</option>";
+ }
+
+ while ($line = db_fetch_assoc($result)) {
+ if ($line["id"] == $default_id) {
+ $is_selected = "selected";
+ } else {
+ $is_selected = "";
+ }
+ printf("<option $is_selected value='%d'>%s</option>",
+ $line["id"], htmlspecialchars(db_unescape_string($line["title"])));
+ }
+
+ print "</select>";
+ }
+
+ function print_feed_cat_select($link, $id, $default_id = "",
+ $attributes = "", $include_all_cats = true) {
+
+ print "<select id=\"$id\" name=\"$id\" $attributes>";
+
+ if ($include_all_cats) {
+ print "<option value=\"0\">Uncategorized</option>";
+ }
+
+ $result = db_query($link, "SELECT id,title FROM ttrss_feed_categories
+ WHERE owner_uid = ".$_SESSION["uid"]." ORDER BY title");
+
+ if (db_num_rows($result) > 0 && $include_all_cats) {
+ print "<option disabled>--------</option>";
+ }
+
+ while ($line = db_fetch_assoc($result)) {
+ if ($line["id"] == $default_id) {
+ $is_selected = "selected";
+ } else {
+ $is_selected = "";
+ }
+ printf("<option $is_selected value='%d'>%s</option>",
+ $line["id"], htmlspecialchars(db_unescape_string($line["title"])));
+ }
+
+ print "</select>";
+ }
+
+ function checkbox_to_sql_bool($val) {
+ return ($val == "on") ? "true" : "false";
+ }
+
+ function getFeedCatTitle($link, $id) {
+ if ($id == -1) {
+ return "Special";
+ } else if ($id < -10) {
+ return "Labels";
+ } else if ($id > 0) {
+ $result = db_query($link, "SELECT ttrss_feed_categories.title
+ FROM ttrss_feeds, ttrss_feed_categories WHERE ttrss_feeds.id = '$id' AND
+ cat_id = ttrss_feed_categories.id");
+ if (db_num_rows($result) == 1) {
+ return db_fetch_result($result, 0, "title");
+ } else {
+ return "Uncategorized";
+ }
+ } else {
+ return "getFeedCatTitle($id) failed";
+ }
+
+ }
+
+ function getFeedTitle($link, $id) {
+ if ($id == -1) {
+ return "Starred articles";
+ } else if ($id < -10) {
+ $label_id = -10 - $id;
+ $result = db_query($link, "SELECT description FROM ttrss_labels WHERE id = '$label_id'");
+ if (db_num_rows($result) == 1) {
+ return db_fetch_result($result, 0, "description");
+ } else {
+ return "Unknown label ($label_id)";
+ }
+
+ } else if ($id > 0) {
+ $result = db_query($link, "SELECT title FROM ttrss_feeds WHERE id = '$id'");
+ if (db_num_rows($result) == 1) {
+ return db_fetch_result($result, 0, "title");
+ } else {
+ return "Unknown feed ($id)";
+ }
+ } else {
+ return "getFeedTitle($id) failed";
+ }
+
+ }
+
+ function get_session_cookie_name() {
+ return ((!defined('TTRSS_SESSION_NAME')) ? "ttrss_sid" : TTRSS_SESSION_NAME);
+ }
+
+ function print_init_params($link) {
+ print "<init-params>";
+ if ($_SESSION["stored-params"]) {
+ foreach (array_keys($_SESSION["stored-params"]) as $key) {
+ $value = htmlspecialchars($_SESSION["stored-params"][$key]);
+ print "<param key=\"$key\" value=\"$value\"/>";
+ }
+ }
+
+ print "<param key=\"daemon_enabled\" value=\"" . ENABLE_UPDATE_DAEMON . "\"/>";
+ print "<param key=\"feeds_frame_refresh\" value=\"" . FEEDS_FRAME_REFRESH . "\"/>";
+
+ print "<param key=\"on_catchup_show_next_feed\" value=\"" .
+ get_pref($link, "ON_CATCHUP_SHOW_NEXT_FEED") . "\"/>";
+
+ print "</init-params>";
+ }
?>