From: Andrew Dolgov <noreply@fakecake.org>
Date: Tue, 29 May 2018 19:04:02 +0000 (+0300)
Subject: share: add support for og:image, etc. metadata for shared articles
X-Git-Tag: 18.8~25
X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=f5302247c6eecba217f35173b3f038cc828a7402;p=tt-rss.git

share: add support for og:image, etc. metadata for shared articles
---

diff --git a/classes/article.php b/classes/article.php
old mode 100644
new mode 100755
index edf95b74..c8ee5b93
--- a/classes/article.php
+++ b/classes/article.php
@@ -629,16 +629,52 @@ class Article extends Handler_Protected {
 				}
 			}
 
+			$enclosures = self::get_article_enclosures($line["id"]);
+
 			if ($zoom_mode) {
 				header("Content-Type: text/html");
-				$rv['content'] .= "<html><head>
+				$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\">
+						<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) . "\"/>";
+				}
 
-					</head><body class=\"claro ttrss_utility ttrss_zoom\">";
+				$rv['content'] .= "<body class=\"claro ttrss_utility ttrss_zoom\">";
 			}
 
 			$rv['content'] .= "<div class=\"postReply\" id=\"POST-$id\">";