function render_article($link, $id, $feed_id, $cat_id) { $query = "SELECT title,link,content,feed_id,comments,int_id,\n\t\t\tmarked,unread,published,\n\t\t\t" . SUBSTRING_FOR_DATE . "(updated,1,16) as updated,\n\t\t\tauthor\n\t\t\tFROM ttrss_entries,ttrss_user_entries\n\t\t\tWHERE\tid = '{$id}' AND ref_id = id AND owner_uid = " . $_SESSION["uid"]; $result = db_query($link, $query); if (db_num_rows($result) != 0) { $line = db_fetch_assoc($result); $tmp_result = db_query($link, "UPDATE ttrss_user_entries \n\t\t\t\tSET unread = false,last_read = NOW() \n\t\t\t\tWHERE ref_id = '{$id}'\n\t\t\t\tAND owner_uid = " . $_SESSION["uid"]); if (get_pref($link, 'HEADLINES_SMART_DATE')) { $updated_fmt = smart_date_time(strtotime($line["updated"])); } else { $short_date = get_pref($link, 'SHORT_DATE_FORMAT'); $updated_fmt = date($short_date, strtotime($line["updated"])); } $title = $line["title"]; $article_link = $line["link"]; $feed_title = getFeedTitle($link, $feed_id, false); print "<div class=\"panel\" id=\"article-{$id}\" title=\"{$title}\" \n\t\t\t\tselected=\"true\"\n\t\t\t\tmyBackLabel='{$feed_title}' myBackHref='feed.php?id={$feed_id}&cat={$cat_id}'>"; print "<h2><a target='_blank' href='{$article_link}'>{$title}</a></h2>"; print "<fieldset>"; /* print "<div class=\"row\">"; print "<label id='title'><a target='_blank' href='$article_link'>$title</a></label>"; print "</div>"; */ $is_starred = sql_bool_to_bool($line["marked"]) ? "true" : "false"; $is_published = sql_bool_to_bool($line["published"]) ? "true" : "false"; print "<div class=\"row\">"; print "<label id='updated'>Updated:</label>"; print "<input enabled='false' name='updated' disabled value='{$updated_fmt}'/>"; print "</div>"; print "</fieldset>"; $content = sanitize_rss($link, $line["content"]); $content = preg_replace("/href=/i", "target=\"_blank\" href=", $content); if (!mobile_get_pref($link, "SHOW_IMAGES")) { $content = preg_replace('/<img[^>]+>/is', '', $content); } print "<p>{$content}</p>"; print "<fieldset>"; print "<div class=\"row\">\n\t <label>Starred</label>\n\t <div class=\"toggle\" onclick=\"toggleMarked({$id}, this)\" toggled=\"{$is_starred}\"><span class=\"thumb\"></span><span class=\"toggleOn\">ON</span><span class=\"toggleOff\">OFF</span></div>\n\t </div>"; print "<div class=\"row\">\n\t <label>Published</label>\n\t <div class=\"toggle\" onclick=\"togglePublished({$id}, this)\" toggled=\"{$is_published}\"><span class=\"thumb\"></span><span class=\"toggleOn\">ON</span><span class=\"toggleOff\">OFF</span></div>\n\t </div>"; print "</fieldset>"; print "</div>"; } }
function outputHeadlinesList($link, $feed, $subop, $view_mode, $limit, $cat_view, $next_unread_feed, $offset, $vgr_last_feed = false, $override_order = false) { $disable_cache = false; $timing_info = getmicrotime(); $topmost_article_ids = array(); if (!$offset) { $offset = 0; } if ($subop == "undefined") { $subop = ""; } $subop_split = split(":", $subop); if ($subop == "CatchupSelected") { $ids = split(",", db_escape_string($_REQUEST["ids"])); $cmode = sprintf("%d", $_REQUEST["cmode"]); catchupArticlesById($link, $ids, $cmode); } if ($subop == "ForceUpdate" && sprintf("%d", $feed) > 0) { update_generic_feed($link, $feed, $cat_view, true); } if ($subop == "MarkAllRead") { catchup_feed($link, $feed, $cat_view); if (get_pref($link, 'ON_CATCHUP_SHOW_NEXT_FEED')) { if ($next_unread_feed) { $feed = $next_unread_feed; } } } if ($subop_split[0] == "MarkAllReadGR") { catchup_feed($link, $subop_split[1], false); } if ($feed_id > 0) { $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE id = '{$feed}' LIMIT 1"); if (db_num_rows($result) == 0) { print "<div align='center'>" . __('Feed not found.') . "</div>"; return; } } if (preg_match("/^-?[0-9][0-9]*\$/", $feed) != false) { $result = db_query($link, "SELECT rtl_content FROM ttrss_feeds\n\t\t\t\tWHERE id = '{$feed}' AND owner_uid = " . $_SESSION["uid"]); if (db_num_rows($result) == 1) { $rtl_content = sql_bool_to_bool(db_fetch_result($result, 0, "rtl_content")); } else { $rtl_content = false; } if ($rtl_content) { $rtl_tag = "dir=\"RTL\""; } else { $rtl_tag = ""; } } else { $rtl_tag = ""; $rtl_content = false; } $script_dt_add = get_script_dt_add(); /// START ///////////////////////////////////////////////////////////////////////////////// $search = db_escape_string($_REQUEST["query"]); if ($search) { $disable_cache = true; } $search_mode = db_escape_string($_REQUEST["search_mode"]); $match_on = db_escape_string($_REQUEST["match_on"]); if (!$match_on) { $match_on = "both"; } $real_offset = $offset * $limit; if ($_REQUEST["debug"]) { $timing_info = print_checkpoint("H0", $timing_info); } $qfh_ret = queryFeedHeadlines($link, $feed, $limit, $view_mode, $cat_view, $search, $search_mode, $match_on, $override_order, $real_offset); if ($_REQUEST["debug"]) { $timing_info = print_checkpoint("H1", $timing_info); } $result = $qfh_ret[0]; $feed_title = $qfh_ret[1]; $feed_site_url = $qfh_ret[2]; $last_error = $qfh_ret[3]; $vgroup_last_feed = $vgr_last_feed; if ($feed == -2) { $feed_site_url = article_publish_url($link); } /// STOP ////////////////////////////////////////////////////////////////////////////////// if (!$offset) { print "<div id=\"headlinesContainer\" {$rtl_tag}>"; if (!$result) { print "<div align='center'>" . __("Could not display feed (query failed). Please check label match syntax or local configuration.") . "</div>"; return; } print_headline_subtoolbar($link, $feed_site_url, $feed_title, $feed, $cat_view, $search, $match_on, $search_mode); print "<div id=\"headlinesInnerContainer\" onscroll=\"headlines_scroll_handler()\">"; } $headlines_count = db_num_rows($result); if (db_num_rows($result) > 0) { # print "\{$offset}"; if (!get_pref($link, 'COMBINED_DISPLAY_MODE') && !$offset) { print "<table class=\"headlinesList\" id=\"headlinesList\" \n\t\t\t\t\tcellspacing=\"0\">"; } $lnum = $limit * $offset; error_reporting(DEFAULT_ERROR_LEVEL); $num_unread = 0; $cur_feed_title = ''; $fresh_intl = get_pref($link, "FRESH_ARTICLE_MAX_AGE") * 60 * 60; while ($line = db_fetch_assoc($result)) { $class = $lnum % 2 ? "even" : "odd"; $id = $line["id"]; $feed_id = $line["feed_id"]; $labels = get_article_labels($link, $id); $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); } if ($line["last_read"] == "" && !sql_bool_to_bool($line["unread"])) { $update_pic = "<img id='FUPDPIC-{$id}' src=\"" . theme_image($link, 'images/updated.png') . "\" \n\t\t\t\t\t\talt=\"Updated\">"; } else { $update_pic = "<img id='FUPDPIC-{$id}' src=\"images/blank_icon.gif\" \n\t\t\t\t\t\talt=\"Updated\">"; } if (sql_bool_to_bool($line["unread"]) && time() - strtotime($line["updated_noms"]) < $fresh_intl) { $update_pic = "<img id='FUPDPIC-{$id}' src=\"" . theme_image($link, 'images/fresh_sign.png') . "\" alt=\"Fresh\">"; } if ($line["unread"] == "t" || $line["unread"] == "1") { $class .= "Unread"; ++$num_unread; $is_unread = true; } else { $is_unread = false; } if ($line["marked"] == "t" || $line["marked"] == "1") { $marked_pic = "<img id=\"FMPIC-{$id}\" \n\t\t\t\t\t\tsrc=\"" . theme_image($link, 'images/mark_set.png') . "\" \n\t\t\t\t\t\tclass=\"markedPic\" alt=\"Unstar article\" \n\t\t\t\t\t\tonclick='javascript:tMark({$id})'>"; } else { $marked_pic = "<img id=\"FMPIC-{$id}\" \n\t\t\t\t\t\tsrc=\"" . theme_image($link, 'images/mark_unset.png') . "\" \n\t\t\t\t\t\tclass=\"markedPic\" alt=\"Star article\" \n\t\t\t\t\t\tonclick='javascript:tMark({$id})'>"; } if ($line["published"] == "t" || $line["published"] == "1") { $published_pic = "<img id=\"FPPIC-{$id}\" src=\"" . theme_image($link, 'images/pub_set.png') . "\" \n\t\t\t\t\t\tclass=\"markedPic\"\n\t\t\t\t\t\talt=\"Unpublish article\" onclick='javascript:tPub({$id})'>"; } else { $published_pic = "<img id=\"FPPIC-{$id}\" src=\"" . theme_image($link, 'images/pub_unset.png') . "\" \n\t\t\t\t\t\tclass=\"markedPic\"\n\t\t\t\t\t\talt=\"Publish article\" onclick='javascript:tPub({$id})'>"; } # $content_link = "<a target=\"_blank\" href=\"".$line["link"]."\">" . # $line["title"] . "</a>"; # $content_link = "<a # href=\"" . htmlspecialchars($line["link"]) . "\" # onclick=\"view($id,$feed_id);\">" . # $line["title"] . "</a>"; # $content_link = "<a href=\"javascript:viewContentUrl('".$line["link"]."');\">" . # $line["title"] . "</a>"; if (get_pref($link, 'HEADLINES_SMART_DATE')) { $updated_fmt = smart_date_time(strtotime($line["updated_noms"])); } else { $short_date = get_pref($link, 'SHORT_DATE_FORMAT'); $updated_fmt = date($short_date, strtotime($line["updated_noms"])); } if (get_pref($link, 'SHOW_CONTENT_PREVIEW')) { $content_preview = truncate_string(strip_tags($line["content_preview"]), 100); } $score = $line["score"]; $score_pic = theme_image($link, "images/" . get_score_pic($score)); /* $score_title = __("(Click to change)"); $score_pic = "<img class='hlScorePic' src=\"images/$score_pic\" onclick=\"adjustArticleScore($id, $score)\" title=\"$score $score_title\">"; */ $score_pic = "<img class='hlScorePic' src=\"{$score_pic}\" \n\t\t\t\t\ttitle=\"{$score}\">"; if ($score > 500) { $hlc_suffix = "H"; } else { if ($score < -100) { $hlc_suffix = "L"; } else { $hlc_suffix = ""; } } $entry_author = $line["author"]; if ($entry_author) { $entry_author = " - {$entry_author}"; } $has_feed_icon = feed_has_icon($feed_id); if ($has_feed_icon) { $feed_icon_img = "<img class=\"tinyFeedIcon\" src=\"" . ICONS_URL . "/{$feed_id}.ico\" alt=\"\">"; } else { //$feed_icon_img = "<img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\" alt=\"\">"; $feed_icon_img = ""; } if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) { if (get_pref($link, 'VFEED_GROUP_BY_FEED')) { if ($feed_id != $vgroup_last_feed && $line["feed_title"]) { $cur_feed_title = $line["feed_title"]; $vgroup_last_feed = $feed_id; $cur_feed_title = htmlspecialchars($cur_feed_title); $vf_catchup_link = "(<a onclick='javascript:catchupFeedInGroup({$feed_id});' href='#'>" . __('mark as read') . "</a>)"; print "<tr class='feedTitle'><td colspan='7'>" . "<div style=\"float : right\">{$feed_icon_img}</div>" . "<a href=\"javascript:viewfeed({$feed_id}, '', false)\">" . $line["feed_title"] . "</a> {$vf_catchup_link}</td></tr>"; } } $mouseover_attrs = "onmouseover='postMouseIn({$id})' \n\t\t\t\t\t\tonmouseout='postMouseOut({$id})'"; print "<tr class='{$class}' id='RROW-{$id}' {$mouseover_attrs}>"; print "<td class='hlUpdPic'>{$update_pic}</td>"; print "<td class='hlSelectRow'>\n\t\t\t\t\t\t<input type=\"checkbox\" onclick=\"tSR(this)\"\n\t\t\t\t\t\t\tid=\"RCHK-{$id}\">\n\t\t\t\t\t\t</td>"; print "<td class='hlMarkedPic'>{$marked_pic}</td>"; print "<td class='hlMarkedPic'>{$published_pic}</td>"; # if ($line["feed_title"]) { # print "<td class='hlContent'>$content_link</td>"; # print "<td class='hlFeed'> # <a href=\"javascript:viewfeed($feed_id, '', false)\">". # truncate_string($line["feed_title"],30)."</a> </td>"; # } else { print "<td onclick='view({$id})' class='hlContent{$hlc_suffix}' valign='middle' id='HLC-{$id}'>"; print "<a id=\"RTITLE-{$id}\" \n\t\t\t\t\t\thref=\"" . htmlspecialchars($line["link"]) . "\"\n\t\t\t\t\t\tonclick=\"return false\">" . $line["title"]; if (get_pref($link, 'SHOW_CONTENT_PREVIEW')) { if ($content_preview) { print "<span class=\"contentPreview\"> - {$content_preview}</span>"; } } print "</a>"; print $labels_str; # <a href=\"javascript:viewfeed($feed_id, '', false)\">". # $line["feed_title"]."</a> if (!get_pref($link, 'VFEED_GROUP_BY_FEED')) { if ($line["feed_title"]) { print "<span class=\"hlFeed\">\n\t\t\t\t\t\t\t\t(<a href=\"javascript:viewfeed({$feed_id}, '', false)\">" . $line["feed_title"] . "</a>)\n\t\t\t\t\t\t\t</span>"; } } // print "<img id='HLL-$id' class='hlLoading' // src='images/indicator_tiny.gif' style='display : none'>"; print "</td>"; # } print "<td class=\"hlUpdated\" onclick='view({$id})'><nobr>{$updated_fmt} </nobr></td>"; print "<td class='hlMarkedPic'>{$score_pic}</td>"; if ($line["feed_title"] && !get_pref($link, 'VFEED_GROUP_BY_FEED')) { print "<td onclick=\"viewfeed({$feed_id})\" class=\"hlFeedIcon\">{$feed_icon_img}</td>"; } print "</tr>"; } else { if (get_pref($link, 'VFEED_GROUP_BY_FEED') && $line["feed_title"]) { if ($feed_id != $vgroup_last_feed) { $cur_feed_title = $line["feed_title"]; $vgroup_last_feed = $feed_id; $cur_feed_title = htmlspecialchars($cur_feed_title); $vf_catchup_link = "(<a onclick='javascript:catchupFeedInGroup({$feed_id});' href='#'>" . __('mark as read') . "</a>)"; $has_feed_icon = feed_has_icon($feed_id); if ($has_feed_icon) { $feed_icon_img = "<img class=\"tinyFeedIcon\" src=\"" . ICONS_URL . "/{$feed_id}.ico\" alt=\"\">"; } else { //$feed_icon_img = "<img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\" alt=\"\">"; } print "<div class='cdmFeedTitle'>" . "<div style=\"float : right\">{$feed_icon_img}</div>" . "<a href=\"javascript:viewfeed({$feed_id}, '', false)\">" . $line["feed_title"] . "</a> {$vf_catchup_link}</div>"; } } if ($is_unread) { $add_class = "Unread"; } else { $add_class = ""; } $expand_cdm = get_pref($link, 'CDM_EXPANDED'); $show_excerpt = false; if ($expand_cdm && $score >= -100) { $cdm_cstyle = ""; $show_excerpt = false; } else { $cdm_cstyle = "style=\"display : none\""; $show_excerpt = true; } $mouseover_attrs = "onmouseover='postMouseIn({$id})' \n\t\t\t\t\t\tonmouseout='postMouseOut({$id})'"; print "<div class=\"cdmArticle{$add_class}\" \n\t\t\t\t\t\tid=\"RROW-{$id}\"\t\t\t\t\t\t\n\t\t\t\t\t\t{$mouseover_attrs}'>"; print "<div class=\"cdmHeader\">"; if (!get_pref($link, "VFEED_GROUP_BY_FEED") || !$line["feed_title"]) { $cdm_feed_icon = "<span style=\"cursor : pointer\" onclick=\"viewfeed({$feed_id})\">{$feed_icon_img}</span>"; } print "<div class=\"articleUpdated\">{$updated_fmt} {$score_pic} {$cdm_feed_icon}\n\t\t\t\t\t\t</div>"; print "<span id=\"RTITLE-{$id}\" class=\"titleWrap{$hlc_suffix}\"><a class=\"title\" \n\t\t\t\t\t\tonclick=\"javascript:toggleUnread({$id}, 0)\"\n\t\t\t\t\t\ttarget=\"_blank\" href=\"" . $line["link"] . "\">" . $line["title"] . "</a>\n\t\t\t\t\t\t"; print $entry_author; /* if (!$expand_cdm || $score < -100) { print " <a id=\"CICH-$id\" href=\"javascript:cdmExpandArticle($id)\"> (".__('Show article').")</a>"; } */ print $labels_str; if (!get_pref($link, 'VFEED_GROUP_BY_FEED')) { if ($line["feed_title"]) { print " (<a href='javascript:viewfeed({$feed_id})'>" . $line["feed_title"] . "</a>)"; } } print "</span></div>"; if ($show_excerpt) { print "<div class=\"cdmExcerpt\" id=\"CEXC-{$id}\"\n\t\t\t\t\t\t\tonclick=\"cdmExpandArticle({$id})\"\n\t\t\t\t\t\t\ttitle=\"" . __('Click to expand article') . "\">"; $content_preview = trim(truncate_string(strip_tags($line["content_preview"]), 100)); if (strlen($content_preview) != 0) { print $content_preview; } else { print __('Click to expand article'); } print "</div>"; } print "<div class=\"cdmContent\" \n\t\t\t\t\t\tonclick=\"cdmClicked({$id})\"\n\t\t\t\t\t\tid=\"CICD-{$id}\" {$cdm_cstyle}>"; if ($line["orig_feed_id"]) { $tmp_result = db_query($link, "SELECT * FROM ttrss_archived_feeds\n\t\t\t\t\t\tWHERE id = " . $line["orig_feed_id"]); if (db_num_rows($tmp_result) != 0) { print "<div clear='both'>"; print __("Originally from:"); print " "; $tmp_line = db_fetch_assoc($tmp_result); print "<a target='_blank' \n\t\t\t\t\t\t\thref=' " . htmlspecialchars($tmp_line['site_url']) . "'>" . $tmp_line['title'] . "</a>"; print " "; 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}\">"; if ($line['note']) { print format_article_note($id, $line['note']); } print "</div>"; print sanitize_rss($link, $line["content_preview"]); $article_content = $line["content_preview"]; $e_result = db_query($link, "SELECT * FROM ttrss_enclosures WHERE\n\t\t\t\t\t\tpost_id = '{$id}' AND content_url != ''"); if (db_num_rows($e_result) > 0) { $entries_html = array(); $entries = array(); while ($e_line = db_fetch_assoc($e_result)) { $url = $e_line["content_url"]; $ctype = $e_line["content_type"]; if (!$ctype) { $ctype = __("unknown type"); } $filename = substr($url, strrpos($url, "/") + 1); $entry = format_inline_player($link, $url, $ctype); $entry .= " <a target=\"_blank\" href=\"" . htmlspecialchars($url) . "\">" . $filename . " (" . $ctype . ")" . "</a>"; array_push($entries_html, $entry); $entry = array(); $entry["type"] = $ctype; $entry["filename"] = $filename; $entry["url"] = $url; array_push($entries, $entry); } $tmp_result = db_query($link, "SELECT always_display_enclosures FROM\n\t\t\t\t\tttrss_feeds WHERE id = " . $line['feed_id'] . " AND owner_uid = " . $_SESSION["uid"]); $always_display_enclosures = db_fetch_result($tmp_result, 0, "always_display_enclosures"); if (!get_pref($link, "STRIP_IMAGES")) { if ($always_display_enclosures || !preg_match("/img/i", $article_content)) { foreach ($entries as $entry) { if (preg_match("/image/", $entry["type"]) || preg_match("/\\.(jpg|png|gif|bmp)/i", $entry["filename"])) { print "<p><img \n\t\t\t\t\t\t\t\t\talt=\"" . htmlspecialchars($entry["filename"]) . "\"\n\t\t\t\t\t\t\t\t\tsrc=\"" . htmlspecialchars($entry["url"]) . "\"></p>"; } } } } print "<div class=\"cdmEnclosures\">"; if (db_num_rows($e_result) == 1) { print __("Attachment:") . " "; } else { print __("Attachments:") . " "; } print join(", ", $entries_html); print "</div>"; } print "<br clear='both'>"; // print "</div>"; /* if (!$expand_cdm) { print "<a id=\"CICH-$id\" href=\"javascript:cdmExpandArticle($id)\"> Show article</a>"; } */ print "</div>"; print "<div class=\"cdmFooter\"><span class='s0'>"; /* print "<div class=\"markedPic\">Star it: $marked_pic</div>"; */ print __("Select:") . " <input type=\"checkbox\" onclick=\"toggleSelectRowById(this, \n\t\t\t\t\t\t\t'RROW-{$id}')\" class=\"feedCheckBox\" id=\"RCHK-{$id}\">"; print "</span><span class='s1'>{$marked_pic} "; print "{$published_pic} "; print "<img src=\"images/art-zoom.png\" class='tagsPic' \n\t\t\t\t\t\tonclick=\"zoomToArticle({$id})\"\n\t\t\t\t\t\tstyle=\"cursor : pointer\"\n\t\t\t\t\t\talt='Zoom' \n\t\t\t\t\t\ttitle='" . __('Show article summary in new window') . "'> "; $note_escaped = htmlspecialchars($line['note'], ENT_QUOTES); print "<img src=\"images/art-pub-note.png\" class='tagsPic' \n\t\t\t\t\t\tstyle=\"cursor : pointer\" style=\"cursor : pointer\"\n\t\t\t\t\t\tonclick=\"publishWithNote({$id}, '{$note_escaped}')\"\n\t\t\t\t\t\talt='PubNote' title='" . __('Publish article with a note') . "'>"; print "</span>"; $tags_str = format_tags_string(get_article_tags($link, $id), $id); print "<span class='s1'>\n\t\t\t\t\t\t<img class='tagsPic' src='" . theme_image($link, 'images/tag.png') . "' alt='Tags' title='Tags'>\n\t\t\t\t\t\t<span id=\"ATSTR-{$id}\">{$tags_str}</span>\n\t\t\t\t\t\t<a title=\"" . __('Edit tags for this article') . "\" \n\t\t\t\t\t\thref=\"javascript:editArticleTags({$id}, {$feed_id}, true)\">(+)</a>"; print "</span>"; print "<span class='s2'><a class=\"cdmToggleLink\"\n\t\t\t\t\t\t\thref=\"javascript:toggleUnread({$id})\">\n\t\t\t\t\t\t\t" . __('toggle unread') . "</a></span>"; print "</div>"; print "</div>"; } ++$lnum; } if (!get_pref($link, 'COMBINED_DISPLAY_MODE') && !$offset) { print "</table>"; } } else { $message = ""; switch ($view_mode) { case "unread": $message = __("No unread articles found to display."); break; case "updated": $message = __("No updated articles found to display."); break; case "marked": $message = __("No starred articles found to display."); break; default: if ($feed < -10) { $message = __("No articles found to display. You can assign articles to labels manually (see the Actions menu above) or use a filter."); } else { $message = __("No articles found to display."); } } if (!$offset) { print "<div class='whiteBox'>{$message}</div>"; } } if (!$offset) { print "</div>"; print "</div>"; } return array($topmost_article_ids, $headlines_count, $feed, $disable_cache, $vgroup_last_feed); }
function render_article($link, $id, $feed_id, $cat_id, $is_cat) { $query = "SELECT title,link,content,feed_id,comments,int_id,\n\t\t\tmarked,unread,published,\n\t\t\t" . SUBSTRING_FOR_DATE . "(updated,1,16) as updated,\n\t\t\tauthor\n\t\t\tFROM ttrss_entries,ttrss_user_entries\n\t\t\tWHERE\tid = '{$id}' AND ref_id = id AND owner_uid = " . $_SESSION["uid"]; $result = db_query($link, $query); if (db_num_rows($result) != 0) { $line = db_fetch_assoc($result); $tmp_result = db_query($link, "UPDATE ttrss_user_entries\n\t\t\t\tSET unread = false,last_read = NOW()\n\t\t\t\tWHERE ref_id = '{$id}'\n\t\t\t\tAND owner_uid = " . $_SESSION["uid"]); $updated_fmt = make_local_datetime($link, $line['updated'], false); $title = $line["title"]; $article_link = $line["link"]; if (!$is_cat) { $feed_title = getFeedTitle($link, $feed_id); } else { $feed_title = getCategoryTitle($link, $feed_id); } print "<div class=\"panel\" id=\"article-{$id}\" title=\"{$title}\"\n\t\t\t\tselected=\"true\"\n\t\t\t\tmyBackLabel='{$feed_title}' myBackHref='feed.php?id={$feed_id}&cat={$cat_id}&is_cat={$is_cat}'>"; if ($line['feed_id'] != $feed_id) { $real_feed_title = getFeedTitle($link, $line['feed_id']); $real_feed_id = $line['feed_id']; $feed_link = "(<a href=\"feed.php?id={$real_feed_id}\">{$real_feed_title}</a>)"; } // print "<fieldset>"; print "<div style='float : right'>({$updated_fmt})</div>"; print "<h2><a target='_blank' href='{$article_link}'>{$title}</a> {$feed_link}</h2>"; print "<hr>"; /* print "<div class=\"row\">"; print "<label id='title'><a target='_blank' href='$article_link'>$title</a></label>"; print "</div>"; */ $is_starred = sql_bool_to_bool($line["marked"]) ? "true" : "false"; $is_published = sql_bool_to_bool($line["published"]) ? "true" : "false"; //print "<div class=\"row\">"; //print "<label id='updated'>Updated:</label>"; //print "<input type='text' enabled='false' name='updated' disabled value='$updated_fmt'/>"; //print "</div>"; // print "</fieldset>"; $content = sanitize_rss($link, $line["content"]); $content = preg_replace("/href=/i", "target=\"_blank\" href=", $content); if (!mobile_get_pref($link, "SHOW_IMAGES")) { $content = preg_replace('/<img[^>]+>/is', '', $content); } print "<p>{$content}</p>"; print "<div class='nav'>\n <label>Navigation</label>\n <div class='button left' onclick='goPrev({$id}, {$feed_id}, this)'>Prev</div>\n <div class='button right' onclick='goNext({$id}, {$feed_id}, this)'>Next</div>\n </div>"; print "<fieldset>"; print "<div class=\"row\">\n\t <label>Starred</label>\n\t <div class=\"toggle\" onclick=\"toggleMarked({$id}, this)\" toggled=\"{$is_starred}\"><span class=\"thumb\"></span><span class=\"toggleOn\">ON</span><span class=\"toggleOff\">OFF</span></div>\n\t </div>"; print "<div class=\"row\">\n\t <label>Published</label>\n\t <div class=\"toggle\" onclick=\"togglePublished({$id}, this)\" toggled=\"{$is_published}\"><span class=\"thumb\"></span><span class=\"toggleOn\">ON</span><span class=\"toggleOff\">OFF</span></div>\n\t </div>"; print "<div class=\"row\">\n\t <label>Unread</label>\n\t <div class=\"toggle\" onclick=\"toggleUnread({$id}, this)\" toggled=\"{$is_unread}\"><span class=\"thumb\"></span><span class=\"toggleOn\">ON</span><span class=\"toggleOff\">OFF</span></div>\n\t </div>"; print "</fieldset>"; print "</div>"; } }
function format_headlines_list($link, $feed, $subop, $view_mode, $limit, $cat_view, $next_unread_feed, $offset, $vgr_last_feed = false, $override_order = false) { $disable_cache = false; $reply = array(); $timing_info = getmicrotime(); $topmost_article_ids = array(); if (!$offset) { $offset = 0; } if ($subop == "undefined") { $subop = ""; } $subop_split = explode(":", $subop); /* if ($subop == "CatchupSelected") { $ids = explode(",", db_escape_string($_REQUEST["ids"])); $cmode = sprintf("%d", $_REQUEST["cmode"]); catchupArticlesById($link, $ids, $cmode); } */ if ($subop == "ForceUpdate" && $feed && is_numeric($feed) > 0) { update_rss_feed($link, $feed, true); } if ($subop == "MarkAllRead") { catchup_feed($link, $feed, $cat_view); if (get_pref($link, 'ON_CATCHUP_SHOW_NEXT_FEED')) { if ($next_unread_feed) { $feed = $next_unread_feed; } } } if ($subop_split[0] == "MarkAllReadGR") { catchup_feed($link, $subop_split[1], false); } // FIXME: might break tag display? if (is_numeric($feed) && $feed > 0 && !$cat_view) { $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE id = '{$feed}' LIMIT 1"); if (db_num_rows($result) == 0) { $reply['content'] = "<div align='center'>" . __('Feed not found.') . "</div>"; } } if (preg_match("/^-?[0-9][0-9]*\$/", $feed) != false) { $result = db_query($link, "SELECT rtl_content FROM ttrss_feeds\n\t\t\t\tWHERE id = '{$feed}' AND owner_uid = " . $_SESSION["uid"]); if (db_num_rows($result) == 1) { $rtl_content = sql_bool_to_bool(db_fetch_result($result, 0, "rtl_content")); } else { $rtl_content = false; } if ($rtl_content) { $rtl_tag = "dir=\"RTL\""; } else { $rtl_tag = ""; } } else { $rtl_tag = ""; $rtl_content = false; } @($search = db_escape_string($_REQUEST["query"])); if ($search) { $disable_cache = true; } @($search_mode = db_escape_string($_REQUEST["search_mode"])); @($match_on = db_escape_string($_REQUEST["match_on"])); if (!$match_on) { $match_on = "both"; } if ($_REQUEST["debug"]) { $timing_info = print_checkpoint("H0", $timing_info); } // error_log("format_headlines_list: [" . $feed . "] subop [" . $subop . "]"); if ($search_mode == '' && $subop != '') { $search_mode = $subop; } // error_log("search_mode: " . $search_mode); $qfh_ret = queryFeedHeadlines($link, $feed, $limit, $view_mode, $cat_view, $search, $search_mode, $match_on, $override_order, $offset); if ($_REQUEST["debug"]) { $timing_info = print_checkpoint("H1", $timing_info); } $result = $qfh_ret[0]; $feed_title = $qfh_ret[1]; $feed_site_url = $qfh_ret[2]; $last_error = $qfh_ret[3]; $vgroup_last_feed = $vgr_last_feed; // if (!$offset) { if (db_num_rows($result) > 0) { $reply['toolbar'] = format_headline_subtoolbar($link, $feed_site_url, $feed_title, $feed, $cat_view, $search, $match_on, $search_mode, $view_mode, $last_error); } // } $headlines_count = db_num_rows($result); if (db_num_rows($result) > 0) { $lnum = $offset; $num_unread = 0; $cur_feed_title = ''; $fresh_intl = get_pref($link, "FRESH_ARTICLE_MAX_AGE") * 60 * 60; if ($_REQUEST["debug"]) { $timing_info = print_checkpoint("PS", $timing_info); } while ($line = db_fetch_assoc($result)) { $class = $lnum % 2 ? "even" : "odd"; $id = $line["id"]; $feed_id = $line["feed_id"]; $label_cache = $line["label_cache"]; $labels = false; if ($label_cache) { $label_cache = json_decode($label_cache, true); if ($label_cache) { if ($label_cache["no-labels"] == 1) { $labels = array(); } else { $labels = $label_cache; } } } if (!is_array($labels)) { $labels = get_article_labels($link, $id); } $labels_str = "<span id=\"HLLCTR-{$id}\">"; $labels_str .= format_article_labels($labels, $id); $labels_str .= "</span>"; if (count($topmost_article_ids) < 3) { array_push($topmost_article_ids, $id); } if ($line["last_read"] == "" && !sql_bool_to_bool($line["unread"])) { $update_pic = "<img id='FUPDPIC-{$id}' src=\"" . theme_image($link, 'images/updated.png') . "\"\n\t\t\t\t\t\talt=\"Updated\">"; } else { $update_pic = "<img id='FUPDPIC-{$id}' src=\"images/blank_icon.gif\"\n\t\t\t\t\t\talt=\"Updated\">"; } if (sql_bool_to_bool($line["unread"]) && time() - strtotime($line["updated_noms"]) < $fresh_intl) { $update_pic = "<img id='FUPDPIC-{$id}' src=\"" . theme_image($link, 'images/fresh_sign.png') . "\" alt=\"Fresh\">"; } if ($line["unread"] == "t" || $line["unread"] == "1") { $class .= " Unread"; ++$num_unread; $is_unread = true; } else { $is_unread = false; } if ($line["marked"] == "t" || $line["marked"] == "1") { $marked_pic = "<img id=\"FMPIC-{$id}\"\n\t\t\t\t\t\tsrc=\"" . theme_image($link, 'images/mark_set.png') . "\"\n\t\t\t\t\t\tclass=\"markedPic\" alt=\"Unstar article\"\n\t\t\t\t\t\tonclick='javascript:tMark({$id})'>"; } else { $marked_pic = "<img id=\"FMPIC-{$id}\"\n\t\t\t\t\t\tsrc=\"" . theme_image($link, 'images/mark_unset.png') . "\"\n\t\t\t\t\t\tclass=\"markedPic\" alt=\"Star article\"\n\t\t\t\t\t\tonclick='javascript:tMark({$id})'>"; } if ($line["published"] == "t" || $line["published"] == "1") { $published_pic = "<img id=\"FPPIC-{$id}\" src=\"" . theme_image($link, 'images/pub_set.png') . "\"\n\t\t\t\t\t\tclass=\"markedPic\"\n\t\t\t\t\t\talt=\"Unpublish article\" onclick='javascript:tPub({$id})'>"; } else { $published_pic = "<img id=\"FPPIC-{$id}\" src=\"" . theme_image($link, 'images/pub_unset.png') . "\"\n\t\t\t\t\t\tclass=\"markedPic\"\n\t\t\t\t\t\talt=\"Publish article\" onclick='javascript:tPub({$id})'>"; } # $content_link = "<a target=\"_blank\" href=\"".$line["link"]."\">" . # $line["title"] . "</a>"; # $content_link = "<a # href=\"" . htmlspecialchars($line["link"]) . "\" # onclick=\"view($id,$feed_id);\">" . # $line["title"] . "</a>"; # $content_link = "<a href=\"javascript:viewContentUrl('".$line["link"]."');\">" . # $line["title"] . "</a>"; $updated_fmt = make_local_datetime($link, $line["updated_noms"], false); if (get_pref($link, 'SHOW_CONTENT_PREVIEW')) { $content_preview = truncate_string(strip_tags($line["content_preview"]), 100); } $score = $line["score"]; $score_pic = theme_image($link, "images/" . get_score_pic($score)); /* $score_title = __("(Click to change)"); $score_pic = "<img class='hlScorePic' src=\"images/$score_pic\" onclick=\"adjustArticleScore($id, $score)\" title=\"$score $score_title\">"; */ $score_pic = "<img class='hlScorePic' src=\"{$score_pic}\"\n\t\t\t\t\ttitle=\"{$score}\">"; if ($score > 500) { $hlc_suffix = "H"; } else { if ($score < -100) { $hlc_suffix = "L"; } else { $hlc_suffix = ""; } } $entry_author = $line["author"]; if ($entry_author) { $entry_author = " - {$entry_author}"; } $has_feed_icon = feed_has_icon($feed_id); if ($has_feed_icon) { $feed_icon_img = "<img class=\"tinyFeedIcon\" src=\"" . ICONS_URL . "/{$feed_id}.ico\" alt=\"\">"; } else { $feed_icon_img = "<img class=\"tinyFeedIcon\" src=\"images/feed-icon-12x12.png\" alt=\"\">"; } if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) { if (get_pref($link, 'VFEED_GROUP_BY_FEED')) { if ($feed_id != $vgroup_last_feed && $line["feed_title"]) { $cur_feed_title = $line["feed_title"]; $vgroup_last_feed = $feed_id; $cur_feed_title = htmlspecialchars($cur_feed_title); $vf_catchup_link = "(<a onclick='javascript:catchupFeedInGroup({$feed_id});' href='#'>" . __('mark as read') . "</a>)"; $reply['content'] .= "<div class='cdmFeedTitle'>" . "<div style=\"float : right\">{$feed_icon_img}</div>" . "<a href=\"#\" onclick=\"viewfeed({$feed_id})\">" . $line["feed_title"] . "</a> {$vf_catchup_link}</div>"; } } $mouseover_attrs = "onmouseover='postMouseIn({$id})'\n\t\t\t\t\t\tonmouseout='postMouseOut({$id})'"; $reply['content'] .= "<div class='{$class}' id='RROW-{$id}' {$mouseover_attrs}>"; $reply['content'] .= "<div class='hlUpdPic'>{$update_pic}</div>"; $reply['content'] .= "<div class='hlLeft'>"; $reply['content'] .= "<input type=\"checkbox\" onclick=\"tSR(this)\"\n\t\t\t\t\t\t\tid=\"RCHK-{$id}\">"; $reply['content'] .= "{$marked_pic}"; $reply['content'] .= "{$published_pic}"; $reply['content'] .= "</div>"; $reply['content'] .= "<div onclick='return hlClicked(event, {$id})'\n\t\t\t\t\t\tclass=\"hlTitle\"><span class='hlContent{$hlc_suffix}'>"; $reply['content'] .= "<a id=\"RTITLE-{$id}\"\n\t\t\t\t\t\thref=\"" . htmlspecialchars($line["link"]) . "\"\n\t\t\t\t\t\tonclick=\"\">" . truncate_string($line["title"], 200); if (get_pref($link, 'SHOW_CONTENT_PREVIEW')) { if ($content_preview) { $reply['content'] .= "<span class=\"contentPreview\"> - {$content_preview}</span>"; } } $reply['content'] .= "</a></span>"; $reply['content'] .= $labels_str; if (!get_pref($link, 'VFEED_GROUP_BY_FEED') && defined('_SHOW_FEED_TITLE_IN_VFEEDS')) { if (@$line["feed_title"]) { $reply['content'] .= "<span class=\"hlFeed\">\n\t\t\t\t\t\t\t\t(<a href=\"#\" onclick=\"viewfeed({$feed_id})\">" . $line["feed_title"] . "</a>)\n\t\t\t\t\t\t\t</span>"; } } $reply['content'] .= "</div>"; $reply['content'] .= "<span class=\"hlUpdated\">{$updated_fmt}</span>"; $reply['content'] .= "<div class=\"hlRight\">"; $reply['content'] .= $score_pic; if ($line["feed_title"] && !get_pref($link, 'VFEED_GROUP_BY_FEED')) { $reply['content'] .= "<span onclick=\"viewfeed({$feed_id})\"\n\t\t\t\t\t\t\tstyle=\"cursor : pointer\"\n\t\t\t\t\t\t\ttitle=\"" . htmlspecialchars($line['feed_title']) . "\">\n\t\t\t\t\t\t\t{$feed_icon_img}<span>"; } $reply['content'] .= "</div>"; $reply['content'] .= "</div>"; } else { if (get_pref($link, 'VFEED_GROUP_BY_FEED') && $line["feed_title"]) { if ($feed_id != $vgroup_last_feed) { $cur_feed_title = $line["feed_title"]; $vgroup_last_feed = $feed_id; $cur_feed_title = htmlspecialchars($cur_feed_title); $vf_catchup_link = "(<a onclick='javascript:catchupFeedInGroup({$feed_id});' href='#'>" . __('mark as read') . "</a>)"; $has_feed_icon = feed_has_icon($feed_id); if ($has_feed_icon) { $feed_icon_img = "<img class=\"tinyFeedIcon\" src=\"" . ICONS_URL . "/{$feed_id}.ico\" alt=\"\">"; } else { //$feed_icon_img = "<img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\" alt=\"\">"; } $reply['content'] .= "<div class='cdmFeedTitle'>" . "<div style=\"float : right\">{$feed_icon_img}</div>" . "<a href=\"#\" onclick=\"viewfeed({$feed_id})\">" . $line["feed_title"] . "</a> {$vf_catchup_link}</div>"; } } $expand_cdm = get_pref($link, 'CDM_EXPANDED'); $mouseover_attrs = "onmouseover='postMouseIn({$id})'\n\t\t\t\t\t\tonmouseout='postMouseOut({$id})'"; $reply['content'] .= "<div class=\"{$class}\"\n\t\t\t\t\t\tid=\"RROW-{$id}\" {$mouseover_attrs}'>"; $reply['content'] .= "<div class=\"cdmHeader\">"; $reply['content'] .= "<div>"; $reply['content'] .= "<input type=\"checkbox\" onclick=\"toggleSelectRowById(this,\n\t\t\t\t\t\t\t'RROW-{$id}')\" id=\"RCHK-{$id}\"/>"; $reply['content'] .= "{$marked_pic}"; $reply['content'] .= "{$published_pic}"; $reply['content'] .= "</div>"; $reply['content'] .= "<span id=\"RTITLE-{$id}\"\n\t\t\t\t\t\tonclick=\"return cdmClicked(event, {$id});\"\n\t\t\t\t\t\tclass=\"titleWrap{$hlc_suffix}\">\n\t\t\t\t\t\t<a class=\"title\"\n\t\t\t\t\t\ttitle=\"" . htmlspecialchars($line['title']) . "\"\n\t\t\t\t\t\ttarget=\"_blank\" href=\"" . htmlspecialchars($line["link"]) . "\">" . truncate_string($line["title"], 100) . " {$entry_author}</a>"; $reply['content'] .= $labels_str; if (!get_pref($link, 'VFEED_GROUP_BY_FEED') && defined('_SHOW_FEED_TITLE_IN_VFEEDS')) { if (@$line["feed_title"]) { $reply['content'] .= "<span class=\"hlFeed\">\n\t\t\t\t\t\t\t\t(<a href=\"#\" onclick=\"viewfeed({$feed_id})\">" . $line["feed_title"] . "</a>)\n\t\t\t\t\t\t\t</span>"; } } if (!$expand_cdm) { $content_hidden = "style=\"display : none\""; } else { $excerpt_hidden = "style=\"display : none\""; } $reply['content'] .= "<span {$excerpt_hidden}\n\t\t\t\t\t\tid=\"CEXC-{$id}\" class=\"cdmExcerpt\"> - {$content_preview}</span>"; $reply['content'] .= "</span>"; $reply['content'] .= "<div>"; $reply['content'] .= "<span class='updated'>{$updated_fmt}</span>"; $reply['content'] .= "{$score_pic}"; if (!get_pref($link, "VFEED_GROUP_BY_FEED") && $line["feed_title"]) { $reply['content'] .= "<span style=\"cursor : pointer\"\n\t\t\t\t\t\t\ttitle=\"" . htmlspecialchars($line["feed_title"]) . "\"\n\t\t\t\t\t\t\tonclick=\"viewfeed({$feed_id})\">{$feed_icon_img}</span>"; } $reply['content'] .= "<div class=\"updPic\">{$update_pic}</div>"; $reply['content'] .= "</div>"; $reply['content'] .= "</div>"; $reply['content'] .= "<div class=\"cdmContent\" {$content_hidden}\n\t\t\t\t\t\tonclick=\"return cdmClicked(event, {$id});\"\n\t\t\t\t\t\tid=\"CICD-{$id}\">"; $reply['content'] .= "<div class=\"cdmContentInner\">"; if ($line["orig_feed_id"]) { $tmp_result = db_query($link, "SELECT * FROM ttrss_archived_feeds\n\t\t\t\t\tWHERE id = " . $line["orig_feed_id"]); if (db_num_rows($tmp_result) != 0) { $reply['content'] .= "<div clear='both'>"; $reply['content'] .= __("Originally from:"); $reply['content'] .= " "; $tmp_line = db_fetch_assoc($tmp_result); $reply['content'] .= "<a target='_blank'\n\t\t\t\t\t\t\t\thref=' " . htmlspecialchars($tmp_line['site_url']) . "'>" . $tmp_line['title'] . "</a>"; $reply['content'] .= " "; $reply['content'] .= "<a target='_blank' href='" . htmlspecialchars($tmp_line['feed_url']) . "'>"; $reply['content'] .= "<img title='" . __('Feed URL') . "'class='tinyFeedIcon' src='images/pub_set.gif'></a>"; $reply['content'] .= "</div>"; } } $feed_site_url = $line["site_url"]; $article_content = sanitize_rss($link, $line["content_preview"], false, false, $feed_site_url); $reply['content'] .= "<div id=\"POSTNOTE-{$id}\">"; if ($line['note']) { $reply['content'] .= format_article_note($id, $line['note']); } $reply['content'] .= "</div>"; $reply['content'] .= "<span id=\"CWRAP-{$id}\">"; $reply['content'] .= $expand_cdm ? $article_content : ''; $reply['content'] .= "</span>"; /* $tmp_result = db_query($link, "SELECT always_display_enclosures FROM ttrss_feeds WHERE id = ". (($line['feed_id'] == null) ? $line['orig_feed_id'] : $line['feed_id'])." AND owner_uid = ".$_SESSION["uid"]); $always_display_enclosures = sql_bool_to_bool(db_fetch_result($tmp_result, 0, "always_display_enclosures")); */ $always_display_enclosures = sql_bool_to_bool($line["always_display_enclosures"]); $reply['content'] .= format_article_enclosures($link, $id, $always_display_enclosures, $article_content); $reply['content'] .= "</div>"; $reply['content'] .= "<div class=\"cdmFooter\">"; $tag_cache = $line["tag_cache"]; $tags_str = format_tags_string(get_article_tags($link, $id, $_SESSION["uid"], $tag_cache), $id); $reply['content'] .= "<img src='" . theme_image($link, 'images/tag.png') . "' alt='Tags' title='Tags'>\n\t\t\t\t\t\t<span id=\"ATSTR-{$id}\">{$tags_str}</span>\n\t\t\t\t\t\t<a title=\"" . __('Edit tags for this article') . "\"\n\t\t\t\t\t\thref=\"#\" onclick=\"editArticleTags({$id}, {$feed_id}, true)\">(+)</a>"; $num_comments = $line["num_comments"]; $entry_comments = ""; if ($num_comments > 0) { if ($line["comments"]) { $comments_url = $line["comments"]; } else { $comments_url = $line["link"]; } $entry_comments = "<a target='_blank' href=\"{$comments_url}\">{$num_comments} comments</a>"; } else { if ($line["comments"] && $line["link"] != $line["comments"]) { $entry_comments = "<a target='_blank' href=\"" . $line["comments"] . "\">comments</a>"; } } if ($entry_comments) { $reply['content'] .= " ({$entry_comments})"; } $reply['content'] .= "<div style=\"float : right\">"; $reply['content'] .= "<img src=\"images/art-zoom.png\"\n\t\t\t\t\t\tonclick=\"zoomToArticle(event, {$id})\"\n\t\t\t\t\t\tstyle=\"cursor : pointer\"\n\t\t\t\t\t\talt='Zoom'\n\t\t\t\t\t\ttitle='" . __('Open article in new tab') . "'>"; //$note_escaped = htmlspecialchars($line['note'], ENT_QUOTES); $reply['content'] .= "<img src=\"images/art-pub-note.png\"\n\t\t\t\t\t\tstyle=\"cursor : pointer\" style=\"cursor : pointer\"\n\t\t\t\t\t\tonclick=\"editArticleNote({$id})\"\n\t\t\t\t\t\talt='PubNote' title='" . __('Edit article note') . "'>"; if (DIGEST_ENABLE) { $reply['content'] .= "<img src=\"" . theme_image($link, 'images/art-email.png') . "\"\n\t\t\t\t\t\t\tstyle=\"cursor : pointer\"\n\t\t\t\t\t\t\tonclick=\"emailArticle({$id})\"\n\t\t\t\t\t\t\talt='Zoom' title='" . __('Forward by email') . "'>"; } if (ENABLE_TWEET_BUTTON) { $reply['content'] .= "<img src=\"" . theme_image($link, 'images/art-tweet.png') . "\"\n\t\t\t\t\t\t\tclass='tagsPic' style=\"cursor : pointer\"\n\t\t\t\t\t\t\tonclick=\"tweetArticle({$id})\"\n\t\t\t\t\t\t\talt='Zoom' title='" . __('Share on Twitter') . "'>"; } $reply['content'] .= "<img src=\"images/digest_checkbox.png\"\n\t\t\t\t\t\tstyle=\"cursor : pointer\" style=\"cursor : pointer\"\n\t\t\t\t\t\tonclick=\"dismissArticle({$id})\"\n\t\t\t\t\t\talt='Dismiss' title='" . __('Dismiss article') . "'>"; $reply['content'] .= "</div>"; $reply['content'] .= "</div>"; $reply['content'] .= "</div>"; $reply['content'] .= "</div>"; } ++$lnum; } if ($_REQUEST["debug"]) { $timing_info = print_checkpoint("PE", $timing_info); } } else { $message = ""; switch ($view_mode) { case "unread": $message = __("No unread articles found to display."); break; case "updated": $message = __("No updated articles found to display."); break; case "marked": $message = __("No starred articles found to display."); break; default: if ($feed < -10) { $message = __("No articles found to display. You can assign articles to labels manually (see the Actions menu above) or use a filter."); } else { $message = __("No articles found to display."); } } if (!$offset && $message) { $reply['content'] .= "<div class='whiteBox'>{$message}"; $reply['content'] .= "<p class=\"small\"><span class=\"insensitive\">"; $result = db_query($link, "SELECT " . SUBSTRING_FOR_DATE . "(MAX(last_updated), 1, 19) AS last_updated FROM ttrss_feeds\n\t\t\t\t\tWHERE owner_uid = " . $_SESSION['uid']); $last_updated = db_fetch_result($result, 0, "last_updated"); $last_updated = make_local_datetime($link, $last_updated, false); $reply['content'] .= sprintf(__("Feeds last updated at %s"), $last_updated); $result = db_query($link, "SELECT COUNT(id) AS num_errors\n\t\t\t\t\tFROM ttrss_feeds WHERE last_error != '' AND owner_uid = " . $_SESSION["uid"]); $num_errors = db_fetch_result($result, 0, "num_errors"); if ($num_errors > 0) { $reply['content'] .= "<br/>"; $reply['content'] .= "<a class=\"insensitive\" href=\"#\" onclick=\"showFeedsWithErrors()\">" . __('Some feeds have update errors (click for details)') . "</a>"; } $reply['content'] .= "</span></p></div>"; } } if ($_REQUEST["debug"]) { $timing_info = print_checkpoint("H2", $timing_info); } return array($topmost_article_ids, $headlines_count, $feed, $disable_cache, $vgroup_last_feed, $reply); }
function render_article($link) { $id = db_escape_string($_GET["id"]); $feed_id = db_escape_string($_GET["feed"]); $ret_feed_id = db_escape_string($_GET["ret_feed"]); $cat_view = db_escape_string($_GET["cat"]); $result = db_query($link, "SELECT rtl_content FROM ttrss_feeds\n\t\t\tWHERE id = '{$feed_id}' AND owner_uid = " . $_SESSION["uid"]); if (db_num_rows($result) == 1) { $rtl_content = sql_bool_to_bool(db_fetch_result($result, 0, "rtl_content")); } else { $rtl_content = false; } if ($rtl_content) { $rtl_tag = "dir=\"RTL\""; $rtl_class = "RTL"; } else { $rtl_tag = ""; $rtl_class = ""; } $result = db_query($link, "UPDATE ttrss_user_entries \n\t\t\tSET unread = false,last_read = NOW() \n\t\t\tWHERE ref_id = '{$id}' AND feed_id = '{$feed_id}' AND owner_uid = " . $_SESSION["uid"]); $result = db_query($link, "SELECT title,link,content,feed_id,comments,int_id,\n\t\t\tmarked,published,\n\t\t\t" . SUBSTRING_FOR_DATE . "(updated,1,16) as updated,\n\t\t\t(SELECT icon_url FROM ttrss_feeds WHERE id = feed_id) as icon_url,\n\t\t\tnum_comments,\n\t\t\tauthor\n\t\t\tFROM ttrss_entries,ttrss_user_entries\n\t\t\tWHERE\tid = '{$id}' AND ref_id = id"); if ($result) { $line = db_fetch_assoc($result); $num_comments = $line["num_comments"]; $entry_comments = ""; if ($num_comments > 0) { if ($line["comments"]) { $comments_url = $line["comments"]; } else { $comments_url = $line["link"]; } $entry_comments = "<a href=\"{$comments_url}\">{$num_comments} comments</a>"; } else { if ($line["comments"] && $line["link"] != $line["comments"]) { $entry_comments = "<a href=\"" . $line["comments"] . "\">comments</a>"; } } $tmp_result = db_query($link, "SELECT DISTINCT tag_name FROM\n\t\t\t\tttrss_tags WHERE post_int_id = " . $line["int_id"] . "\n\t\t\t\tORDER BY tag_name"); $tags_str = ""; $f_tags_str = ""; $num_tags = 0; while ($tmp_line = db_fetch_assoc($tmp_result)) { $num_tags++; $tag = $tmp_line["tag_name"]; $tag_str = "<a href=\"?go=vf&id={$tag}\">{$tag}</a>, "; $tags_str .= $tag_str; } $tags_str = preg_replace("/, \$/", "", $tags_str); $parsed_updated = date(get_pref($link, 'SHORT_DATE_FORMAT'), strtotime($line["updated"])); print "<div id=\"heading\">"; # if (file_exists("../icons/$feed_id.ico") && filesize("../icons/$feed_id.ico") > 0) { # print "<img class=\"feedIcon\" src=\"../icons/$feed_id.ico\">"; # } if (!$cat_view) { $feed_title = getFeedTitle($link, $ret_feed_id); } else { $feed_title = getCategoryTitle($link, $ret_feed_id); $feed_title_native = getFeedTitle($link, $feed_id); } if ($feed_title_native) { $feed_link = "<a href=\"index.php?go=vf&id={$feed_id}\">{$feed_title_native}</a>"; $feed_link .= " in <a href=\"index.php?go=vf&id={$ret_feed_id}&cat={$cat_view}\">\n\t\t\t\t\t{$feed_title}</a>"; } else { $feed_link = "<a href=\"index.php?go=vf&id={$ret_feed_id}\">{$feed_title}</a>"; } $feedlist = "<a href=\"index.php\">" . __('Back to feedlist') . "</a>"; print "<a href=\"" . $line["link"] . "\">" . truncate_string($line["title"], 30) . "</a>"; print " <span id=\"headingAddon\">{$parsed_updated} ({$feed_link}, {$feedlist})</span>"; print "</div>"; if ($num_tags > 0) { print "<div class=\"postTags\">" . __("Tags:") . " {$tags_str}</div>"; } if ($line["marked"] == "t" || $line["marked"] == "1") { $marked_pic = "<img class='marked' src=\"../../images/mark_set.png\">"; } else { $marked_pic = "<img class='marked' src=\"../../images/mark_unset.png\">"; } if ($line["published"] == "t" || $line["published"] == "1") { $published_pic = "<img class='marked' src=\"../../images/pub_set.gif\">"; } else { $published_pic = "<img class='marked' src=\"../../images/pub_unset.gif\">"; } print "<div class=\"postStarOps\">"; print "<a title=\"" . __('Toggle starred') . "\"href=\"?go=view&id={$id}&ret_feed={$ret_feed_id}&feed={$feed_id}&sop=ts\">{$marked_pic}</a>"; print "<a title=\"" . __('Toggle published') . "\" href=\"?go=view&id={$id}&ret_feed={$ret_feed_id}&feed={$feed_id}&sop=tp\">{$published_pic}</a>"; // Mark unread print "<a title=\"" . __('Mark as unread') . "\" href=\"?go=vf&id={$ret_feed_id}&feed={$feed_id}&sop=mu&aid={$id}"; if ($cat_view) { print "&cat={$cat_view}"; } print "\"><img class='marked' src=\"../../images/art-set-unread.png\"></a>"; print "</div>"; print sanitize_rss($link, $line["content"], true); } print "</body></html>"; }