diff options
Diffstat (limited to 'classes/article.php')
-rwxr-xr-x | classes/article.php | 295 |
1 files changed, 19 insertions, 276 deletions
diff --git a/classes/article.php b/classes/article.php index e5c98b2c5..7253f2ead 100755 --- a/classes/article.php +++ b/classes/article.php @@ -27,6 +27,7 @@ class Article extends Handler_Protected { } } + /* function view() { $id = clean($_REQUEST["id"]); $cids = explode(",", clean($_REQUEST["cids"])); @@ -63,8 +64,9 @@ class Article extends Handler_Protected { } print json_encode($articles); - } + } */ + /* private function catchupArticleById($id, $cmode) { if ($cmode == 0) { @@ -86,6 +88,7 @@ class Article extends Handler_Protected { $feed_id = $this->getArticleFeed($id); CCache::update($feed_id, $_SESSION["uid"]); } + */ static function create_published_article($title, $url, $content, $labels_str, $owner_uid) { @@ -253,6 +256,7 @@ class Article extends Handler_Protected { print json_encode(array("id" => $ids, "score" => (int)$score, + "score_class" => get_score_class($score), "score_pic" => get_score_pic($score))); } @@ -515,9 +519,9 @@ class Article extends Handler_Protected { } if (count($entries_inline) > 0) { - $rv .= "<hr clear='both'/>"; + //$rv .= "<hr clear='both'/>"; foreach ($entries_inline as $entry) { $rv .= $entry; }; - $rv .= "<hr clear='both'/>"; + $rv .= "<br clear='both'/>"; } $rv .= "<div class=\"attachments\" dojoType=\"dijit.form.DropDownButton\">". @@ -548,276 +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 "<article id='$id'><![CDATA["; }; - - if ($mark_as_read) { - $sth = $pdo->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 = "<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 = self::get_article_enclosures($line["id"]); - - if ($zoom_mode) { - header("Content-Type: text/html"); - $rv['content'] .= "<!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['content'] .= "<meta property=\"og:title\" content=\"".htmlspecialchars($line["title"])."\"/>\n"; - $rv['content'] .= "<meta property=\"og:site_name\" content=\"".htmlspecialchars($line["feed_title"])."\"/>\n"; - $rv['content'] .= "<meta property=\"og:description\" content=\"". - htmlspecialchars(truncate_string(strip_tags($line["content"]), 500, "..."))."\"/>\n"; - - $rv['content'] .= "</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['content'] .= "<meta property=\"og:image\" content=\"" . htmlspecialchars($og_image) . "\"/>"; - } - - $rv['content'] .= "<body class=\"claro ttrss_utility ttrss_zoom\">"; - } - - $rv['content'] .= "<div class=\"post\" id=\"POST-$id\">"; - - $rv['content'] .= "<div class=\"header\">"; - - $entry_author = $line["author"]; - - if ($entry_author) { - $entry_author = __(" - ") . $entry_author; - } - - $parsed_updated = make_local_datetime($line["updated"], true, - $owner_uid, true); - - if (!$zoom_mode) - $rv['content'] .= "<div class=\"date\">$parsed_updated</div>"; - - if ($line["link"]) { - $rv['content'] .= "<div class='title'><a target='_blank' rel='noopener noreferrer' - title=\"".htmlspecialchars($line['title'])."\" - href=\"" . - htmlspecialchars($line["link"]) . "\">" . - $line["title"] . "</a>" . - "<span class='author'>$entry_author</span></div>"; - } else { - $rv['content'] .= "<div class='title'>" . $line["title"] . "$entry_author</div>"; - } - - if ($zoom_mode) { - $feed_title = htmlspecialchars($line["feed_title"]); - - $rv['content'] .= "<div class=\"feed-title\">$feed_title</div>"; - - $rv['content'] .= "<div class=\"date\">$parsed_updated</div>"; - } - - $tags_str = Article::format_tags_string($line["tags"], $id); - $tags_str_full = join(", ", $line["tags"]); - - if (!$tags_str_full) $tags_str_full = __("no tags"); - - if (!$entry_comments) $entry_comments = " "; # placeholder - - $rv['content'] .= "<div class='tags' style='float : right'> - <img src='images/tag.png' - class='tagsPic' alt='Tags' title='Tags'> "; - - if (!$zoom_mode) { - $rv['content'] .= "<span id=\"ATSTR-$id\">$tags_str</span> - <a title=\"".__('Edit tags for this article')."\" - href=\"#\" onclick=\"Article.editTags($id)\">(+)</a>"; - - $rv['content'] .= "<div dojoType=\"dijit.Tooltip\" - id=\"ATSTRTIP-$id\" connectId=\"ATSTR-$id\" - position=\"below\">$tags_str_full</div>"; - - foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_BUTTON) as $p) { - $rv['content'] .= $p->hook_article_button($line); - } - - } else { - $tags_str = strip_tags($tags_str); - $rv['content'] .= "<span id=\"ATSTR-$id\">$tags_str</span>"; - } - $rv['content'] .= "</div>"; - $rv['content'] .= "<div clear='both'>"; - - foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_LEFT_BUTTON) as $p) { - $rv['content'] .= $p->hook_article_left_button($line); - } - - $rv['content'] .= "$entry_comments</div>"; - - if ($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'] .= "<div clear='both'>"; - $rv['content'] .= __("Originally from:"); - - $rv['content'] .= " "; - - $rv['content'] .= "<a target='_blank' rel='noopener noreferrer' - href=' " . htmlspecialchars($tmp_line['site_url']) . "'>" . - $tmp_line['title'] . "</a>"; - - $rv['content'] .= " "; - - $rv['content'] .= "<a target='_blank' rel='noopener noreferrer' href='" . htmlspecialchars($tmp_line['feed_url']) . "'>"; - - $rv['content'] .= "</div>"; - } - } - - $rv['content'] .= "</div>"; - - $rv['content'] .= "<div id=\"POSTNOTE-$id\">"; - if ($line['note']) { - $rv['content'] .= Article::format_article_note($id, $line['note'], !$zoom_mode); - } - $rv['content'] .= "</div>"; - - if (!$line['lang']) $line['lang'] = 'en'; - - $rv['content'] .= "<div class=\"content\" lang=\"".$line['lang']."\">"; - - $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'] .= "</div>"; - - $rv['content'] .= "</div>"; - - } - - if ($zoom_mode) { - $rv['content'] .= " - <div class='footer'> - <button onclick=\"return window.close()\">". - __("Close this window")."</button></div>"; - $rv['content'] .= "</body></html>"; - } - - 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; @@ -906,9 +640,18 @@ class Article extends Handler_Protected { static function format_article_note($id, $note, $allow_edit = true) { - $str = "<div class='articleNote' onclick=\"Plugins.Note.edit($id)\"> - <div class='noteEdit' onclick=\"Plugins.Note.edit($id)\">". - ($allow_edit ? __('(edit note)') : "")."</div>$note</div>"; + if ($allow_edit) { + $onclick = "onclick='Plugins.Note.edit($id)'"; + $note_class = 'editable'; + } else { + $onclick = ''; + $note_class = ''; + } + + return "<div class='article-note $note_class'> + <i class='material-icons'>note</i> + <div $onclick class='body'>$note</div> + </div>"; return $str; } |