$faviconURL = $urlParts['scheme'].'://'.$urlParts['host'].$linkUrl;
} else if (substr($linkUrl, 0, 7) == 'http://') {
$faviconURL = $linkUrl;
- } else if (substr($url, -1, 1) == '/') {
- $faviconURL = $url.$linkUrl;
} else {
- $faviconURL = $url.'/'.$linkUrl;
+ $pos = strrpos($url, "/");
+ // no "/" in url or "/" is part of "://"
+ if ($pos === false || $pos == (strpos($url, "://")+2)) {
+ $faviconURL = $url.'/'.$linkUrl;
+ } else {
+ $faviconURL = substr($url, 0, $pos+1).$linkUrl;
+ }
}
} else {
$http_response = fgets( $socket, 22 );
- $responses = "/(200 OK)|(30[0-9] Moved)/";
+ $responses = "/(200 OK)|(30[123])/";
if ( preg_match($responses, $http_response) ) {
fclose($socket);
return true;
if (defined('DAEMON_EXTENDED_DEBUG') || $_GET['xdebug']) {
_debug("update_rss_feed: new feed, catching it up...");
}
- catchup_feed($link, $feed, false);
+ catchup_feed($link, $feed, false, $owner_uid);
}
if (!$hidden) {
}
function printFeedEntry($feed_id, $class, $feed_title, $unread, $icon_file, $link,
- $rtl_content = false, $last_updated = false, $last_error = false) {
+ $rtl_content = false, $last_updated = false, $last_error = false,
+ $fg_content = false, $bg_content = false) {
if (file_exists($icon_file) && filesize($icon_file) > 0) {
$feed_icon = "<img id=\"FIMG-$feed_id\" src=\"$icon_file\">";
$feed = "<a title=\"$link_title\" id=\"FEEDL-$feed_id\"
href=\"javascript:viewfeed('$feed_id', '', false, '', false, 0);\">$feed_title</a>";
+/* if ($feed_id < -10) {
+ $bg_color = "#00ccff";
+ $fg_color = "white";
+ }
+
+ if ($fg_color || $bg_color) {
+ $color_str = "<div class='labelColorIndicator'
+ style='color : $fg_color; background-color : $bg_color'>l</div>";
+ }
+
+ print $color_str; */
+
print "<li id=\"FEEDR-$feed_id\" class=\"$class\">";
if (get_pref($link, 'ENABLE_FEED_ICONS')) {
print "$feed_icon";
print "<div class=\"feedExtInfo\">
<span id=\"FLUPD-$feed_id\">$last_updated ($total total) $error_notify_msg</span></div>";
}
-
+
print "</li>";
}
if (!$_SESSION["uid"] || !validate_session($link)) {
render_login_form($link, $mobile);
+ //header("Location: login.php");
exit;
} else {
/* bump login timestamp */
}
}
+ function bool_to_sql_bool($s) {
+ if ($s) {
+ return "true";
+ } else {
+ return "false";
+ }
+ }
function toggleEvenOdd($a) {
if ($a == "even")
}
}
- function catchup_feed($link, $feed, $cat_view) {
+ function catchup_feed($link, $feed, $cat_view, $owner_uid) {
+
+ if (!$owner_uid) $owner_uid = $_SESSION['uid'];
if (preg_match("/^-?[0-9][0-9]*$/", $feed) != false) {
if ($cat_view) {
- if ($feed > 0) {
- $cat_qpart = "cat_id = '$feed'";
- } else {
- $cat_qpart = "cat_id IS NULL";
- }
+ if ($feed >= 0) {
+
+ if ($feed > 0) {
+ $cat_qpart = "cat_id = '$feed'";
+ } else {
+ $cat_qpart = "cat_id IS NULL";
+ }
- $tmp_result = db_query($link, "SELECT id
- FROM ttrss_feeds WHERE $cat_qpart AND owner_uid = " .
- $_SESSION["uid"]);
+ $tmp_result = db_query($link, "SELECT id
+ FROM ttrss_feeds WHERE $cat_qpart AND owner_uid = $owner_uid");
+
+ while ($tmp_line = db_fetch_assoc($tmp_result)) {
+
+ $tmp_feed = $tmp_line["id"];
- while ($tmp_line = db_fetch_assoc($tmp_result)) {
+ db_query($link, "UPDATE ttrss_user_entries
+ SET unread = false,last_read = NOW()
+ WHERE feed_id = '$tmp_feed' AND owner_uid = $owner_uid");
+ }
+ } else if ($feed == -2) {
- $tmp_feed = $tmp_line["id"];
db_query($link, "UPDATE ttrss_user_entries
- SET unread = false,last_read = NOW()
- WHERE feed_id = '$tmp_feed' AND owner_uid = " . $_SESSION["uid"]);
+ SET unread = false,last_read = NOW() WHERE (SELECT COUNT(*)
+ FROM ttrss_user_labels2 WHERE article_id = ref_id) > 0
+ AND unread = true AND owner_uid = $owner_uid");
}
} else if ($feed > 0) {
db_query($link, "UPDATE ttrss_user_entries
SET unread = false,last_read = NOW()
WHERE (feed_id = '$feed' OR $children_qpart)
- AND owner_uid = " . $_SESSION["uid"]);
+ AND owner_uid = $owner_uid");
} else {
db_query($link, "UPDATE ttrss_user_entries
SET unread = false,last_read = NOW()
- WHERE feed_id = '$feed' AND owner_uid = " . $_SESSION["uid"]);
+ WHERE feed_id = '$feed' AND owner_uid = $owner_uid");
}
} else if ($feed < 0 && $feed > -10) { // special, like starred
if ($feed == -1) {
db_query($link, "UPDATE ttrss_user_entries
SET unread = false,last_read = NOW()
- WHERE marked = true AND owner_uid = ".$_SESSION["uid"]);
+ WHERE marked = true AND owner_uid = $owner_uid");
}
if ($feed == -2) {
db_query($link, "UPDATE ttrss_user_entries
SET unread = false,last_read = NOW()
- WHERE published = true AND owner_uid = ".$_SESSION["uid"]);
+ WHERE published = true AND owner_uid = $owner_uid");
}
if ($feed == -3) {
ttrss_user_entries WHERE $match_part AND
unread = true AND
ttrss_user_entries.ref_id = ttrss_entries.id AND
- owner_uid = ".$_SESSION["uid"]);
+ owner_uid = $owner_uid");
$affected_ids = array();
if ($feed == -4) {
db_query($link, "UPDATE ttrss_user_entries
SET unread = false,last_read = NOW()
- WHERE owner_uid = ".$_SESSION["uid"]);
+ WHERE owner_uid = $owner_uid");
}
} else if ($feed < -10) { // label
$label_id = -$feed - 11;
db_query($link, "UPDATE ttrss_user_entries, ttrss_user_labels2
- SET unread = false WHERE label_id = '$label_id' AND unread = true
- AND owner_uid = '".$_SESSION["uid"]."' AND ref_id = article_id");
+ SET unread = false, last_read = NOW()
+ WHERE label_id = '$label_id' AND unread = true
+ AND owner_uid = '$owner_uid' AND ref_id = article_id");
}
- ccache_update($link, $feed, $_SESSION["uid"], $cat_view);
+ ccache_update($link, $feed, $owner_uid, $cat_view);
} else { // tag
db_query($link, "BEGIN");
$tag_name = db_escape_string($feed);
$result = db_query($link, "SELECT post_int_id FROM ttrss_tags
- WHERE tag_name = '$tag_name' AND owner_uid = " . $_SESSION["uid"]);
+ WHERE tag_name = '$tag_name' AND owner_uid = $owner_uid");
while ($line = db_fetch_assoc($result)) {
db_query($link, "UPDATE ttrss_user_entries SET
}
function get_script_dt_add() {
- if (strpos(VERSION, ".99") === false) {
+/* if (strpos(VERSION, ".99") === false) {
return VERSION;
} else {
return time();
- }
+ } */
+ return time();
}
function get_pgsql_version($link) {
print "<param key=\"hide_read_feeds\" value=\"" .
(int) get_pref($link, "HIDE_READ_FEEDS") . "\"/>";
+ print "<param key=\"enable_feed_cats\" value=\"" .
+ (int) get_pref($link, "ENABLE_FEED_CATS") . "\"/>";
+
print "<param key=\"feeds_sort_by_unread\" value=\"" .
(int) get_pref($link, "FEEDS_SORT_BY_UNREAD") . "\"/>";
print "<param key=\"sync_counters\" value=\"1\"/>";
+ print "<param key=\"offline_enabled\" value=\"".
+ (int) get_pref($link, "ENABLE_OFFLINE_READING") . "\"/>";
+
+ $result = db_query($link, "SELECT COUNT(*) AS cf FROM
+ ttrss_feeds WHERE owner_uid = " . $_SESSION["uid"]);
+
+ $num_feeds = db_fetch_result($result, 0, "cf");
+
+ print "<param key=\"num_feeds\" value=\"".
+ (int)$num_feeds. "\"/>";
+
print "</init-params>";
}
function print_runtime_info($link) {
print "<runtime-info>";
+ $result = db_query($link, "SELECT COUNT(*) AS cf FROM
+ ttrss_feeds WHERE owner_uid = " . $_SESSION["uid"]);
+
+ $num_feeds = db_fetch_result($result, 0, "cf");
+
+ print "<param key=\"num_feeds\" value=\"".
+ (int)$num_feeds. "\"/>";
+
if (ENABLE_UPDATE_DAEMON) {
print "<param key=\"daemon_is_running\" value=\"".
sprintf("%d", file_is_locked("update_daemon.lock")) . "\"/>";
guid,
ttrss_entries.id,ttrss_entries.title,
updated,
+ note,
unread,feed_id,marked,published,link,last_read,
".SUBSTRING_FOR_DATE."(last_read,1,19) as last_read_noms,
$vfeed_query_part
$result = db_query($link, "SELECT
guid,
+ note,
ttrss_entries.id as id,title,
updated,
unread,feed_id,
function generate_syndicated_feed($link, $owner_uid, $feed, $is_cat,
$limit, $search, $search_mode, $match_on) {
+ $note_style = "background-color : #fff7d5; border-width : 1px; ".
+ "padding : 5px; border-style : dashed; border-color : #e7d796;".
+ "margin-top : 5px; color : #9a8c59;";
+
if (!$limit) $limit = 30;
$qfh_ret = queryFeedHeadlines($link, $feed,
print "<title>" .
htmlspecialchars($line["title"]) . "</title>";
- print "<description><![CDATA[" .
- $line["content_preview"] . "]]></description>";
+ print "<description><![CDATA[";
+ print $line["content_preview"];
+ if ($line["note"]) {
+ print "<div style='$note_style'>";
+ print $line["note"];
+ print "</div>";
+ }
+ print "]]></description>";
print "</item>";
}
if (!$tags) {
- $result = db_query($link, "SELECT id,caption FROM
+ $result = db_query($link, "SELECT * FROM
ttrss_labels2 WHERE owner_uid = '$owner_uid' ORDER by caption");
if (db_num_rows($result) > 0) {
printFeedEntry($label_id,
$class, $line["caption"],
- $count, "images/label.png", $link);
+ $count, "images/label.png", $link,
+ false, false, false,
+ $line['fg_color'], $line['bg_color']);
}
".SUBSTRING_FOR_DATE."(updated,1,16) as updated,
(SELECT icon_url FROM ttrss_feeds WHERE id = feed_id) as icon_url,
num_comments,
- author
+ author,
+ note
FROM ttrss_entries,ttrss_user_entries
WHERE id = '$id' AND ref_id = id AND owner_uid = " . $_SESSION["uid"]);
if (!$entry_comments) $entry_comments = " "; # placeholder
print "<div style='float : right'>
- <img src='images/tag.png' class='tagsPic' alt='Tags' title='Tags'>";
+ <img src='images/tag.png' class='tagsPic' alt='Tags' title='Tags'> ";
if (!$zoom_mode) {
print "<span id=\"ATSTR-$id\">$tags_str</span>
style=\"cursor : pointer\" style=\"cursor : pointer\"
onclick=\"zoomToArticle($id)\"
alt='Zoom' title='".__('Show article summary in new window')."'>";
+
+ $note_escaped = htmlspecialchars($line['note'], ENT_QUOTES);
+
+ print "<img src=\"images/art-pub-note.png\" class='tagsPic'
+ style=\"cursor : pointer\" style=\"cursor : pointer\"
+ onclick=\"publishWithNote($id, '$note_escaped')\"
+ alt='PubNote' title='".__('Publish article with a note')."'>";
+
}
print "</div>";
print "<div clear='both'>$entry_comments</div>";
print $article_content;
+ print "<div id=\"POSTNOTE-$id\">";
+ if ($line['note']) {
+ print format_article_note($id, $line['note']);
+ }
+ print "</div>";
+
$result = db_query($link, "SELECT * FROM ttrss_enclosures WHERE
post_id = '$id' AND content_url != ''");
$feed_id = $line["feed_id"];
$labels = get_article_labels($link, $id);
- $labels_str = "<span id=\"HLLCTR-$id\">";
-
- foreach ($labels as $l) {
- $labels_str .= "<span
- class='hlLabelRef'>".
- $l[1]."</span>";
- }
+ $labels_str = "<span id=\"HLLCTR-$id\">";
+ $labels_str .= format_article_labels($labels, $id);
$labels_str .= "</span>";
-
+
if (count($topmost_article_ids) < 5) {
array_push($topmost_article_ids, $id);
}
// print "<div class=\"cdmInnerContent\" id=\"CICD-$id\" $cdm_cstyle>";
print sanitize_rss($link, $line["content_preview"]);
+
+ print "<div id=\"POSTNOTE-$id\">";
+ if ($line['note']) {
+ print format_article_note($id, $line['note']);
+ }
+ print "</div>";
+
$article_content = $line["content_preview"];
$e_result = db_query($link, "SELECT * FROM ttrss_enclosures WHERE
" <input type=\"checkbox\" onclick=\"toggleSelectRowById(this,
'RROW-$id')\" class=\"feedCheckBox\" id=\"RCHK-$id\">";
- print "</span><span class='s1'>$marked_pic</span> ";
- print "<span class='s1'>$published_pic</span> ";
- print "<span class='s1'><img src=\"images/art-zoom.png\" class='tagsPic'
+ print "</span><span class='s1'>$marked_pic ";
+ print "$published_pic ";
+ print "<img src=\"images/art-zoom.png\" class='tagsPic'
onclick=\"zoomToArticle($id)\"
style=\"cursor : pointer\"
alt='Zoom'
- title='".__('Show article summary in new window')."'></span>";
+ title='".__('Show article summary in new window')."'> ";
+
+ $note_escaped = htmlspecialchars($line['note'], ENT_QUOTES);
+
+ print "<img src=\"images/art-pub-note.png\" class='tagsPic'
+ style=\"cursor : pointer\" style=\"cursor : pointer\"
+ onclick=\"publishWithNote($id, '$note_escaped')\"
+ alt='PubNote' title='".__('Publish article with a note')."'>";
+
+ print "</span>";
$tags_str = format_tags_string(get_article_tags($link, $id), $id);
print "</span>";
- print "<span class='s2'>Toggle: <a class=\"cdmToggleLink\"
+ print "<span class='s2'><a class=\"cdmToggleLink\"
href=\"javascript:toggleUnread($id)\">
- Unread</a></span>";
+ ".__('toggle unread')."</a></span>";
print "</div>";
print "</div>";
value = 0 WHERE owner_uid = '$owner_uid'");
}
+ function ccache_remove($link, $feed_id, $owner_uid, $is_cat = false) {
+
+ if (!$is_cat) {
+ $table = "ttrss_counters_cache";
+ } else {
+ $table = "ttrss_cat_counters_cache";
+ }
+
+ db_query($link, "DELETE FROM $table WHERE
+ feed_id = '$feed_id' AND owner_uid = '$owner_uid'");
+
+ }
+
function ccache_update_all($link, $owner_uid) {
if (get_pref($link, 'ENABLE_FEED_CATS', $owner_uid)) {
function ccache_find($link, $feed_id, $owner_uid, $is_cat = false,
$no_update = false) {
+ if (!is_numeric($feed_id)) return;
+
if (!$is_cat) {
$table = "ttrss_counters_cache";
} else {
function ccache_update($link, $feed_id, $owner_uid, $is_cat = false,
$update_pcat = true) {
+ if (!is_numeric($feed_id)) return;
+
$prev_unread = ccache_find($link, $feed_id, $owner_uid, $is_cat, true);
/* When updating a label, all we need to do is recalculate feed counters
$unread = (int) getFeedArticles($link, $feed_id, $is_cat, true, $owner_uid);
}
+ db_query($link, "BEGIN");
+
$result = db_query($link, "SELECT feed_id FROM $table
WHERE owner_uid = '$owner_uid' AND feed_id = '$feed_id' LIMIT 1");
($feed_id, $unread, $owner_uid, NOW())");
}
+ db_query($link, "COMMIT");
+
if ($feed_id > 0 && $prev_unread != $unread) {
if (!$is_cat) {
function get_article_labels($link, $id) {
$result = db_query($link,
- "SELECT DISTINCT label_id,caption
+ "SELECT DISTINCT label_id,caption,fg_color,bg_color
FROM ttrss_labels2, ttrss_user_labels2
WHERE id = label_id
AND article_id = '$id'
$rv = array();
while ($line = db_fetch_assoc($result)) {
- $rk = array($line["label_id"], $line["caption"]);
+ $rk = array($line["label_id"], $line["caption"], $line["fg_color"],
+ $line["bg_color"]);
array_push($rv, $rk);
}
return $tags_str;
}
+
+ function format_article_labels($labels, $id) {
+
+ $labels_str = "";
+
+ foreach ($labels as $l) {
+ $labels_str .= sprintf("<span class='hlLabelRef'
+ style='color : %s; background-color : %s'>%s</span>",
+ $l[2], $l[3], $l[1]);
+ }
+
+ return $labels_str;
+
+ }
+
+ function format_article_note($id, $note) {
+
+ $note_escaped = htmlspecialchars($note, ENT_QUOTES);
+
+ $str = "<div class='articleNote'>";
+ $str .= "<div class='articleNoteOps'>";
+ $str .= "<a href=\"javascript:publishWithNote($id, '$note_escaped')\">".
+ __('edit note')."</a>";
+ $str .= "</div>";
+ $str .= $note;
+ $str .= "</div>";
+
+ return $str;
+ }
?>