+function add_page_info_data($data) {
+ call_hooks('page_info_data', $data);
+
+ // It maybe is a rich content, but if it does have everything that a link has,
+ // then treat it that way
+ if (($data["type"] == "rich") AND is_string($data["title"]) AND
+ is_string($data["text"]) AND (sizeof($data["images"]) > 0))
+ $data["type"] = "link";
+
+ if ((($data["type"] != "link") AND ($data["type"] != "video") AND ($data["type"] != "photo")) OR ($data["title"] == $url))
+ return("");
+
+ if ($no_photos AND ($data["type"] == "photo"))
+ return("");
+
+ // If the link contains BBCode stuff, make a short link out of this to avoid parsing problems
+ if (strpos($data["url"], '[') OR strpos($data["url"], ']')) {
+ require_once("include/network.php");
+ $data["url"] = short_link($data["url"]);
+ }
+
+ if (($data["type"] != "photo") AND is_string($data["title"]))
+ $text .= "[bookmark=".$data["url"]."]".trim($data["title"])."[/bookmark]";
+
+ if (($data["type"] != "video") AND ($photo != ""))
+ $text .= '[img]'.$photo.'[/img]';
+ elseif (($data["type"] != "video") AND (sizeof($data["images"]) > 0)) {
+ $imagedata = $data["images"][0];
+ $text .= '[img]'.$imagedata["src"].'[/img]';
+ }
+
+ if (($data["type"] != "photo") AND is_string($data["text"]))
+ $text .= "[quote]".$data["text"]."[/quote]";
+
+ $hashtags = "";
+ if (isset($data["keywords"]) AND count($data["keywords"])) {
+ $a = get_app();
+ $hashtags = "\n";
+ foreach ($data["keywords"] AS $keyword) {
+ $hashtag = str_replace(array(" ", "+", "/", ".", "#", "'"),
+ array("","", "", "", "", ""), $keyword);
+ $hashtags .= "#[url=".$a->get_baseurl()."/search?tag=".rawurlencode($hashtag)."]".$hashtag."[/url] ";
+ }
+ }
+
+ return("\n[class=type-".$data["type"]."]".$text."[/class]".$hashtags);
+}
+
+function add_page_info($url, $no_photos = false, $photo = "", $keywords = false, $keyword_blacklist = "") {
+ require_once("mod/parse_url.php");
+
+ $data = Cache::get("parse_url:".$url);
+ if (is_null($data)){
+ $data = parseurl_getsiteinfo($url, true);
+ Cache::set("parse_url:".$url,serialize($data));
+ } else
+ $data = unserialize($data);
+
+ if ($photo != "")
+ $data["images"][0]["src"] = $photo;
+
+ logger('add_page_info: fetch page info for '.$url.' '.print_r($data, true), LOGGER_DEBUG);
+
+ if (!$keywords AND isset($data["keywords"]))
+ unset($data["keywords"]);
+
+ if (($keyword_blacklist != "") AND isset($data["keywords"])) {
+ $list = explode(",", $keyword_blacklist);
+ foreach ($list AS $keyword) {
+ $keyword = trim($keyword);
+ $index = array_search($keyword, $data["keywords"]);
+ if ($index !== false)
+ unset($data["keywords"][$index]);
+ }
+ }
+
+ $text = add_page_info_data($data);
+
+ return($text);
+}
+
+function add_page_info_to_body($body, $texturl = false, $no_photos = false) {
+
+ logger('add_page_info_to_body: fetch page info for body '.$body, LOGGER_DEBUG);
+
+ $URLSearchString = "^\[\]";
+
+ // Adding these spaces is a quick hack due to my problems with regular expressions :)
+ preg_match("/[^!#@]\[url\]([$URLSearchString]*)\[\/url\]/ism", " ".$body, $matches);
+
+ if (!$matches)
+ preg_match("/[^!#@]\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", " ".$body, $matches);
+
+ // Convert urls without bbcode elements
+ if (!$matches AND $texturl) {
+ preg_match("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", " ".$body, $matches);
+
+ // Yeah, a hack. I really hate regular expressions :)
+ if ($matches)
+ $matches[1] = $matches[2];
+ }
+
+ if ($matches)
+ $footer = add_page_info($matches[1], $no_photos);
+
+ // Remove the link from the body if the link is attached at the end of the post
+ if (isset($footer) AND (trim($footer) != "") AND (strpos($footer, $matches[1]))) {
+ $removedlink = trim(str_replace($matches[1], "", $body));
+ if (($removedlink == "") OR strstr($body, $removedlink))
+ $body = $removedlink;
+
+ $url = str_replace(array('/', '.'), array('\/', '\.'), $matches[1]);
+ $removedlink = preg_replace("/\[url\=".$url."\](.*?)\[\/url\]/ism", '', $body);
+ if (($removedlink == "") OR strstr($body, $removedlink))
+ $body = $removedlink;
+ }
+
+ // Add the page information to the bottom
+ if (isset($footer) AND (trim($footer) != ""))
+ $body .= $footer;
+
+ return $body;
+}
+