From b2c079893bbd783193fd212db435f5e6ebc8b094 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 9 Dec 2018 11:13:02 +0300 Subject: [PATCH] move Article::format_article() to Handler_Public --- classes/article.php | 272 ------------------------------------- classes/handler/public.php | 197 ++++++++++++++++++++++++++- 2 files changed, 194 insertions(+), 275 deletions(-) diff --git a/classes/article.php b/classes/article.php index 3ddf66d5c..7253f2ead 100755 --- a/classes/article.php +++ b/classes/article.php @@ -552,278 +552,6 @@ class Article extends Handler_Protected { return $rv; } - static function format_article($id, $mark_as_read = true, $zoom_mode = false, $owner_uid = false) { - if (!$owner_uid) $owner_uid = $_SESSION["uid"]; - - $rv = array(); - - $rv['id'] = $id; - - /* we can figure out feed_id from article id anyway, why do we - * pass feed_id here? let's ignore the argument :(*/ - - $pdo = Db::pdo(); - - $sth = $pdo->prepare("SELECT feed_id FROM ttrss_user_entries - WHERE ref_id = ?"); - $sth->execute([$id]); - $row = $sth->fetch(); - - $feed_id = (int) $row["feed_id"]; - - $rv['feed_id'] = $feed_id; - - //if (!$zoom_mode) { print "
prepare("UPDATE ttrss_user_entries - SET unread = false,last_read = NOW() - WHERE ref_id = ? AND owner_uid = ?"); - $sth->execute([$id, $owner_uid]); - - CCache::update($feed_id, $owner_uid); - } - - $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]); - - 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 = "$num_comments ". - _ngettext("comment", "comments", $num_comments).""; - - } else { - if ($line["comments"] && $line["link"] != $line["comments"]) { - $entry_comments = "".__("comments").""; - } - } - - $enclosures = self::get_article_enclosures($line["id"]); - - if ($zoom_mode) { - header("Content-Type: text/html"); - $rv['content'] .= " - - - ".$line["title"]."". - stylesheet_tag("css/default.css")." - - "; - - $rv['content'] .= "\n"; - $rv['content'] .= "\n"; - $rv['content'] .= "\n"; - - $rv['content'] .= ""; - - $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['content'] .= ""; - } - - $rv['content'] .= ""; - } - - $rv['content'] .= "
"; - - /* header */ - - $rv['content'] .= "
"; - $rv['content'] .= "
"; # row - - //$entry_author = $line["author"] ? " - " . $line["author"] : ""; - $parsed_updated = make_local_datetime($line["updated"], true, - $owner_uid, true); - - if ($line["link"]) { - $rv['content'] .= ""; - } else { - $rv['content'] .= "
" . $line["title"] . "
"; - } - - if (!$zoom_mode) - $rv['content'] .= "
$parsed_updated
"; - - $rv['content'] .= "
"; # row - - $rv['content'] .= "
"; # row - - /* left buttons */ - - $rv['content'] .= "
"; - foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_LEFT_BUTTON) as $p) { - $rv['content'] .= $p->hook_article_left_button($line); - } - $rv['content'] .= "
"; - - /* comments */ - - $rv['content'] .= "
$entry_comments
"; - $rv['content'] .= "
".$line['author']."
"; - - /* tags */ - - $tags_str = Article::format_tags_string($line["tags"], $id); - $tags_str_full = join(", ", $line["tags"]); - - if (!$tags_str_full) $tags_str_full = __("no tags"); - - $rv['content'] .= "label_outline
"; - - if (!$zoom_mode) { - $rv['content'] .= "$tags_str - (+)"; - - $rv['content'] .= "
$tags_str_full
"; - - } else { - $tags_str = strip_tags($tags_str); - $rv['content'] .= "$tags_str"; - } - - $rv['content'] .= "
"; - - /* buttons */ - - $rv['content'] .= "
"; - foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_BUTTON) as $p) { - $rv['content'] .= $p->hook_article_button($line); - } - $rv['content'] .= "
"; - - $rv['content'] .= "
"; # row - - $rv['content'] .= "
"; # header - - /* note */ - - $rv['content'] .= "
"; - if ($line['note']) { - $rv['content'] .= Article::format_article_note($id, $line['note'], !$zoom_mode); - } - $rv['content'] .= "
"; - - /* content */ - - $lang = $line['lang'] ? $line['lang'] : "en"; - $rv['content'] .= "
"; - - /* originally from */ - - if (!$zoom_mode && $line["orig_feed_id"]) { - - $of_sth = $pdo->prepare("SELECT * FROM ttrss_archived_feeds - WHERE id = ? AND owner_uid = ?"); - $of_sth->execute([$line["orig_feed_id"], $owner_uid]); - - if ($tmp_line = $of_sth->fetch()) { - - $rv['content'] .= "
"; - $rv['content'] .= __("Originally from:"); - - $rv['content'] .= " "; - - $rv['content'] .= "" . - $tmp_line['title'] . ""; - - $rv['content'] .= " "; - - $rv['content'] .= ""; - - $rv['content'] .= "
"; - } - } - - /* content body */ - - $rv['content'] .= $line["content"]; - - if (!$zoom_mode) { - $rv['content'] .= Article::format_article_enclosures($id, - $line["always_display_enclosures"], - $line["content"], - $line["hide_images"]); - } - - $rv['content'] .= "
"; # content - - $rv['content'] .= "
"; # post - - } - - foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_FORMAT_ARTICLE) as $p) { - $rv['content'] = $p->hook_format_article($rv['content'], $line, $zoom_mode); - } - - return $rv; - - } - static function get_article_tags($id, $owner_uid = 0, $tag_cache = false) { $a_id = $id; 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 = "$num_comments ". + _ngettext("comment", "comments", $num_comments).""; + + } else { + if ($line["comments"] && $line["link"] != $line["comments"]) { + $entry_comments = "".__("comments").""; + } + } + + $enclosures = Article::get_article_enclosures($line["id"]); + + header("Content-Type: text/html"); + + $rv .= " + + + ".$line["title"]."". + stylesheet_tag("css/default.css")." + + "; + + $rv .= "\n"; + $rv .= "\n"; + $rv .= "\n"; + + $rv .= ""; + + $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 .= ""; + } + + $rv .= ""; + $rv .= "
"; + + /* header */ + + $rv .= "
"; + $rv .= "
"; # row + + //$entry_author = $line["author"] ? " - " . $line["author"] : ""; + $parsed_updated = make_local_datetime($line["updated"], true, + $owner_uid, true); + + if ($line["link"]) { + $rv .= ""; + } else { + $rv .= "
" . $line["title"] . "
"; + } + + $rv .= "
$parsed_updated
"; + + $rv .= "
"; # row + + $rv .= "
"; # row + + /* left buttons */ + + $rv .= "
"; + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_LEFT_BUTTON) as $p) { + $rv .= $p->hook_article_left_button($line); + } + $rv .= "
"; + + /* comments */ + + $rv .= "
$entry_comments
"; + $rv .= "
".$line['author']."
"; + + /* tags */ + + $tags_str = Article::format_tags_string($line["tags"], $id); + + $rv .= "label_outline
"; + + $tags_str = strip_tags($tags_str); + $rv .= "$tags_str"; + + $rv .= "
"; + + /* buttons */ + + $rv .= "
"; + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_BUTTON) as $p) { + $rv .= $p->hook_article_button($line); + } + $rv .= "
"; + + $rv .= "
"; # row + + $rv .= "
"; # header + + /* content */ + + $lang = $line['lang'] ? $line['lang'] : "en"; + $rv .= "
"; + + /* content body */ + + $rv .= $line["content"]; + + /* $rv .= Article::format_article_enclosures($id, + $line["always_display_enclosures"], + $line["content"], + $line["hide_images"]); */ + + $rv .= "
"; # content + + $rv .= "
"; # 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"]);