summaryrefslogtreecommitdiff
path: root/classes/handler
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2018-12-09 11:13:02 +0300
committerAndrew Dolgov <[email protected]>2018-12-09 11:13:02 +0300
commitb2c079893bbd783193fd212db435f5e6ebc8b094 (patch)
treebeccb1a4c63bf939e148d07c146dcfa015863543 /classes/handler
parent966fe6d612df57e891670ca0efc26432c4659133 (diff)
move Article::format_article() to Handler_Public
Diffstat (limited to 'classes/handler')
-rwxr-xr-xclasses/handler/public.php197
1 files changed, 194 insertions, 3 deletions
diff --git a/classes/handler/public.php b/classes/handler/public.php
index 7e3ee727b..f10ce07bd 100755
--- a/classes/handler/public.php
+++ b/classes/handler/public.php
@@ -300,16 +300,207 @@ class Handler_Public extends Handler {
$id = $row["ref_id"];
$owner_uid = $row["owner_uid"];
- $article = Article::format_article($id, false, true, $owner_uid);
-
- print_r($article['content']);
+ print $this->format_article($id, $owner_uid);
} else {
+ header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
print "Article not found.";
}
}
+ private function format_article($id, $owner_uid) {
+
+ $pdo = Db::pdo();
+
+ $sth = $pdo->prepare("SELECT id,title,link,content,feed_id,comments,int_id,lang,
+ ".SUBSTRING_FOR_DATE."(updated,1,16) as updated,
+ (SELECT site_url FROM ttrss_feeds WHERE id = feed_id) as site_url,
+ (SELECT title FROM ttrss_feeds WHERE id = feed_id) as feed_title,
+ (SELECT hide_images FROM ttrss_feeds WHERE id = feed_id) as hide_images,
+ (SELECT always_display_enclosures FROM ttrss_feeds WHERE id = feed_id) as always_display_enclosures,
+ num_comments,
+ tag_cache,
+ author,
+ guid,
+ orig_feed_id,
+ note
+ FROM ttrss_entries,ttrss_user_entries
+ WHERE id = ? AND ref_id = id AND owner_uid = ?");
+ $sth->execute([$id, $owner_uid]);
+
+ $rv = '';
+
+ if ($line = $sth->fetch()) {
+
+ $line["tags"] = Article::get_article_tags($id, $owner_uid, $line["tag_cache"]);
+ unset($line["tag_cache"]);
+
+ $line["content"] = sanitize($line["content"],
+ $line['hide_images'],
+ $owner_uid, $line["site_url"], false, $line["id"]);
+
+ foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE) as $p) {
+ $line = $p->hook_render_article($line);
+ }
+
+ $line['content'] = rewrite_cached_urls($line['content']);
+
+ $num_comments = (int) $line["num_comments"];
+ $entry_comments = "";
+
+ if ($num_comments > 0) {
+ if ($line["comments"]) {
+ $comments_url = htmlspecialchars($line["comments"]);
+ } else {
+ $comments_url = htmlspecialchars($line["link"]);
+ }
+ $entry_comments = "<a class=\"comments\"
+ target='_blank' rel=\"noopener noreferrer\" href=\"$comments_url\">$num_comments ".
+ _ngettext("comment", "comments", $num_comments)."</a>";
+
+ } else {
+ if ($line["comments"] && $line["link"] != $line["comments"]) {
+ $entry_comments = "<a class=\"comments\" target='_blank' rel=\"noopener noreferrer\" href=\"".
+ htmlspecialchars($line["comments"])."\">".__("comments")."</a>";
+ }
+ }
+
+ $enclosures = Article::get_article_enclosures($line["id"]);
+
+ header("Content-Type: text/html");
+
+ $rv .= "<!DOCTYPE html>
+ <html><head>
+ <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>
+ <title>".$line["title"]."</title>".
+ stylesheet_tag("css/default.css")."
+ <link rel=\"shortcut icon\" type=\"image/png\" href=\"images/favicon.png\">
+ <link rel=\"icon\" type=\"image/png\" sizes=\"72x72\" href=\"images/favicon-72px.png\">";
+
+ $rv .= "<meta property=\"og:title\" content=\"".htmlspecialchars($line["title"])."\"/>\n";
+ $rv .= "<meta property=\"og:site_name\" content=\"".htmlspecialchars($line["feed_title"])."\"/>\n";
+ $rv .= "<meta property=\"og:description\" content=\"".
+ htmlspecialchars(truncate_string(strip_tags($line["content"]), 500, "..."))."\"/>\n";
+
+ $rv .= "</head>";
+
+ $og_image = false;
+
+ foreach ($enclosures as $enc) {
+ if (strpos($enc["content_type"], "image/") !== FALSE) {
+ $og_image = $enc["content_url"];
+ break;
+ }
+ }
+
+ if (!$og_image) {
+ $tmpdoc = new DOMDocument();
+
+ if (@$tmpdoc->loadHTML(mb_substr($line["content"], 0, 131070))) {
+ $tmpxpath = new DOMXPath($tmpdoc);
+ $first_img = $tmpxpath->query("//img")->item(0);
+
+ if ($first_img) {
+ $og_image = $first_img->getAttribute("src");
+ }
+ }
+ }
+
+ if ($og_image) {
+ $rv .= "<meta property=\"og:image\" content=\"" . htmlspecialchars($og_image) . "\"/>";
+ }
+
+ $rv .= "<body class='flat ttrss_utility ttrss_zoom'>";
+ $rv .= "<div class='post post-$id'>";
+
+ /* header */
+
+ $rv .= "<div class='header'>";
+ $rv .= "<div class='row'>"; # row
+
+ //$entry_author = $line["author"] ? " - " . $line["author"] : "";
+ $parsed_updated = make_local_datetime($line["updated"], true,
+ $owner_uid, true);
+
+ if ($line["link"]) {
+ $rv .= "<div class='title'><a target='_blank' rel='noopener noreferrer'
+ title=\"".htmlspecialchars($line['title'])."\"
+ href=\"" .htmlspecialchars($line["link"]) . "\">" . $line["title"] . "</a></div>";
+ } else {
+ $rv .= "<div class='title'>" . $line["title"] . "</div>";
+ }
+
+ $rv .= "<div class='date'>$parsed_updated<br/></div>";
+
+ $rv .= "</div>"; # row
+
+ $rv .= "<div class='row'>"; # row
+
+ /* left buttons */
+
+ $rv .= "<div class='buttons left'>";
+ foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_LEFT_BUTTON) as $p) {
+ $rv .= $p->hook_article_left_button($line);
+ }
+ $rv .= "</div>";
+
+ /* comments */
+
+ $rv .= "<div class='comments'>$entry_comments</div>";
+ $rv .= "<div class='author'>".$line['author']."</div>";
+
+ /* tags */
+
+ $tags_str = Article::format_tags_string($line["tags"], $id);
+
+ $rv .= "<i class='material-icons'>label_outline</i><div>";
+
+ $tags_str = strip_tags($tags_str);
+ $rv .= "<span id=\"ATSTR-$id\">$tags_str</span>";
+
+ $rv .= "</div>";
+
+ /* buttons */
+
+ $rv .= "<div class='buttons right'>";
+ foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_BUTTON) as $p) {
+ $rv .= $p->hook_article_button($line);
+ }
+ $rv .= "</div>";
+
+ $rv .= "</div>"; # row
+
+ $rv .= "</div>"; # header
+
+ /* content */
+
+ $lang = $line['lang'] ? $line['lang'] : "en";
+ $rv .= "<div class=\"content\" lang=\"$lang\">";
+
+ /* content body */
+
+ $rv .= $line["content"];
+
+ /* $rv .= Article::format_article_enclosures($id,
+ $line["always_display_enclosures"],
+ $line["content"],
+ $line["hide_images"]); */
+
+ $rv .= "</div>"; # content
+
+ $rv .= "</div>"; # post
+
+ }
+
+ foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_FORMAT_ARTICLE) as $p) {
+ $rv = $p->hook_format_article($rv, $line, true);
+ }
+
+ return $rv;
+
+ }
+
function rss() {
$feed = clean($_REQUEST["id"]);
$key = clean($_REQUEST["key"]);