]> git.mxchange.org Git - friendica.git/blobdiff - include/plaintext.php
Bugfix for pull request #2147 (Fix for issue #2122)
[friendica.git] / include / plaintext.php
index 65b0b347d3ed704dc142daffb82d1e09022b0dfd..204feb137f00bf05dba1731977069d6ffc9aa781 100644 (file)
@@ -9,6 +9,10 @@ function get_attached_data($body) {
  - description:
  - (thumbnail)
 */
+
+       // Simplify image codes
+       $body = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $body);
+
        $post = array();
 
        if (preg_match_all("(\[class=(.*?)\](.*?)\[\/class\])ism",$body, $attached,  PREG_SET_ORDER)) {
@@ -22,10 +26,12 @@ function get_attached_data($body) {
 
                        $attacheddata = $data[2];
 
-                       if (preg_match("/\[img\](.*?)\[\/img\]/ism", $attacheddata, $matches))
+                       $URLSearchString = "^\[\]";
+
+                       if (preg_match("/\[img\]([$URLSearchString]*)\[\/img\]/ism", $attacheddata, $matches))
                                $post["image"] = $matches[1];
 
-                       if (preg_match("/\[bookmark\=(.*?)\](.*?)\[\/bookmark\]/ism", $attacheddata, $matches)) {
+                       if (preg_match("/\[bookmark\=([$URLSearchString]*)\](.*?)\[\/bookmark\]/ism", $attacheddata, $matches)) {
                                $post["url"] = $matches[1];
                                $post["title"] = $matches[2];
                        }
@@ -36,46 +42,30 @@ function get_attached_data($body) {
 
                }
        }
-       return($post);
-}
-
-function plaintext($a, $b, $limit = 0, $includedlinks = false) {
-       require_once("include/bbcode.php");
-       require_once("include/html2plain.php");
-       require_once("mod/parse_url.php");
-       require_once("include/network.php");
-
-       // Simplify image codes
-       $body = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $b["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($body);
 
        // if nothing is found, it maybe having an image.
        if (!isset($post["type"])) {
-               if (preg_match_all("(\[url=(.*?)\]\s*\[img\](.*?)\[\/img\]\s*\[\/url\])ism", $body, $pictures,  PREG_SET_ORDER)) {
+               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];
@@ -88,7 +78,7 @@ function plaintext($a, $b, $limit = 0, $includedlinks = false) {
                                $post["image"] = $pictures[0][2];
                                $post["text"] = $body;
                        }
-               } elseif (preg_match_all("(\[img\](.*?)\[\/img\])ism", $body, $pictures,  PREG_SET_ORDER)) {
+               } elseif (preg_match_all("(\[img\]([$URLSearchString]*)\[\/img\])ism", $body, $pictures,  PREG_SET_ORDER)) {
                        if (count($pictures) == 1) {
                                $post["type"] = "photo";
                                $post["image"] = $pictures[0][1];
@@ -104,14 +94,51 @@ function plaintext($a, $b, $limit = 0, $includedlinks = false) {
                        $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.
+
+       $lines = explode("\n", $msg);
+       $msg = "";
+       $recycle = html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8');
+       foreach ($lines AS $row=>$line) {
+               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 = 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, $htmlmode = 2) {
+       require_once("include/bbcode.php");
+       require_once("include/html2plain.php");
+       require_once("include/network.php");
+
+       // 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"]);
+
        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'));
 
@@ -146,26 +173,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"])) {
                                $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"];
 
-                       $lines = explode("\n", $msg);
-                       $msg = "";
-                       $recycle = html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8');
-                       foreach ($lines AS $row=>$line) {
-                               if (strlen(trim($msg."\n".$line)) <= $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 = shortenmsg($msg, $limit);
                }
        }