X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fplaintext.php;h=05431bee2d27d2b6ca601d9f0a93d02e873c9590;hb=810843763dcde2a004f992dc23c928a45ab8184b;hp=d824f8759590d3068d3e048db0b12cf355687176;hpb=f58104e357fe55bd298773eef23fb9e2ac04abf4;p=friendica.git diff --git a/include/plaintext.php b/include/plaintext.php index d824f87595..05431bee2d 100644 --- a/include/plaintext.php +++ b/include/plaintext.php @@ -46,30 +46,26 @@ function get_attached_data($body) { // if nothing is found, it maybe having an image. if (!isset($post["type"])) { require_once("mod/parse_url.php"); + require_once("include/Photo.php"); $URLSearchString = "^\[\]"; if (preg_match_all("(\[url=([$URLSearchString]*)\]\s*\[img\]([$URLSearchString]*)\[\/img\]\s*\[\/url\])ism", $body, $pictures, PREG_SET_ORDER)) { if (count($pictures) == 1) { // Checking, if the link goes to a picture - $data = parseurl_getsiteinfo($pictures[0][1], true); - + $data = parseurl_getsiteinfo_cached($pictures[0][1], true); if ($data["type"] == "photo") { $post["type"] = "photo"; - if (isset($data["images"][0])) + if (isset($data["images"][0])) { $post["image"] = $data["images"][0]["src"]; - else + $post["url"] = $data["url"]; + } else $post["image"] = $data["url"]; $post["preview"] = $pictures[0][2]; $post["text"] = str_replace($pictures[0][0], "", $body); } else { - $img_str = fetch_url($pictures[0][1]); - - $tempfile = tempnam(get_config("system","temppath"), "cache"); - file_put_contents($tempfile, $img_str); - $mime = image_type_to_mime_type(exif_imagetype($tempfile)); - unlink($tempfile); - if (substr($mime, 0, 6) == "image/") { + $imgdata = get_photo_info($pictures[0][1]); + if (substr($imgdata["mime"], 0, 6) == "image/") { $post["type"] = "photo"; $post["image"] = $pictures[0][1]; $post["preview"] = $pictures[0][2]; @@ -94,49 +90,71 @@ function get_attached_data($body) { $post["text"] = $body; } } + + if (preg_match_all("(\[url\]([$URLSearchString]*)\[\/url\])ism", $body, $links, PREG_SET_ORDER)) { + if (count($links) == 1) { + $post["type"] = "text"; + $post["url"] = $links[0][1]; + $post["text"] = $body; + } + } if (!isset($post["type"])) { $post["type"] = "text"; $post["text"] = trim($body); } + } elseif (isset($post["url"]) AND ($post["type"] == "video")) { + require_once("mod/parse_url.php"); + $data = parseurl_getsiteinfo_cached($post["url"], true); + + if (isset($data["images"][0])) + $post["image"] = $data["images"][0]["src"]; } return($post); } function shortenmsg($msg, $limit, $twitter = false) { - // To-Do: - // For Twitter URLs aren't shortened, but they have to be calculated as if. + /// @TODO + /// For Twitter URLs aren't shortened, but they have to be calculated as if. $lines = explode("\n", $msg); $msg = ""; $recycle = html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8'); foreach ($lines AS $row=>$line) { - if (strlen(trim($msg."\n".$line)) <= $limit) + if (iconv_strlen(trim($msg."\n".$line), "UTF-8") <= $limit) $msg = trim($msg."\n".$line); // Is the new message empty by now or is it a reshared message? elseif (($msg == "") OR (($row == 1) AND (substr($msg, 0, 4) == $recycle))) - $msg = substr(substr(trim($msg."\n".$line), 0, $limit), 0, -3)."..."; + $msg = iconv_substr(iconv_substr(trim($msg."\n".$line), 0, $limit, "UTF-8"), 0, -3, "UTF-8")."..."; else break; } return($msg); } -function plaintext($a, $b, $limit = 0, $includedlinks = false) { +function plaintext($a, $b, $limit = 0, $includedlinks = false, $htmlmode = 2) { require_once("include/bbcode.php"); require_once("include/html2plain.php"); require_once("include/network.php"); + // Remove the hash tags + $URLSearchString = "^\[\]"; + $body = preg_replace("/([#@])\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '$1$3', $b["body"]); + + // Add an URL element if the text contains a raw link + $body = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url]$2[/url]', $body); + // At first look at data that is attached via "type-..." stuff // This will hopefully replaced with a dedicated bbcode later - $post = get_attached_data($b["body"]); + //$post = get_attached_data($b["body"]); + $post = get_attached_data($body); if (($b["title"] != "") AND ($post["text"] != "")) $post["text"] = trim($b["title"]."\n\n".$post["text"]); elseif ($b["title"] != "") $post["text"] = trim($b["title"]); - $html = bbcode($post["text"], false, false, 2); + $html = bbcode($post["text"], false, false, $htmlmode); $msg = html2plain($html, 0, true); $msg = trim(html_entity_decode($msg,ENT_QUOTES,'UTF-8')); @@ -144,6 +162,8 @@ function plaintext($a, $b, $limit = 0, $includedlinks = false) { if ($includedlinks) { if ($post["type"] == "link") $link = $post["url"]; + elseif ($post["type"] == "text") + $link = $post["url"]; elseif ($post["type"] == "video") $link = $post["url"]; elseif ($post["type"] == "photo") @@ -159,8 +179,22 @@ function plaintext($a, $b, $limit = 0, $includedlinks = false) { // But: if the link is beyond the limit, then it has to be added. if (($link != "") AND strstr($msg, $link)) { $pos = strpos($msg, $link); - if (($limit == 0) OR ($pos < $limit)) + + // Will the text be shortened in the link? + // Or is the link the last item in the post? + if (($limit > 0) AND ($pos < $limit) AND (($pos + 23 > $limit) OR ($pos + strlen($link) == strlen($msg)))) + $msg = trim(str_replace($link, "", $msg)); + elseif (($limit == 0) OR ($pos < $limit)) { + // The limit has to be increased since it will be shortened - but not now + // Only do it with Twitter (htmlmode = 8) + if (($limit > 0) AND (strlen($link) > 23) AND ($htmlmode == 8)) + $limit = $limit - 23 + strlen($link); + $link = ""; + + if ($post["type"] == "text") + unset($post["url"]); + } } } @@ -171,15 +205,20 @@ function plaintext($a, $b, $limit = 0, $includedlinks = false) { $msg = str_replace(" ", " ", $msg); // Twitter is using its own limiter, so we always assume that shortened links will have this length - if (strlen($link) > 0) + if (iconv_strlen($link, "UTF-8") > 0) $limit = $limit - 23; - if (strlen($msg) > $limit) { + if (iconv_strlen($msg, "UTF-8") > $limit) { - if (!isset($post["url"])) { + if (($post["type"] == "text") AND isset($post["url"])) + $post["url"] = $b["plink"]; + elseif (!isset($post["url"])) { $limit = $limit - 23; $post["url"] = $b["plink"]; - } + } elseif (strpos($b["body"], "[share") !== false) + $post["url"] = $b["plink"]; + elseif (get_pconfig($b["uid"], "system", "no_intelligent_shortening")) + $post["url"] = $b["plink"]; $msg = shortenmsg($msg, $limit); }