]> git.mxchange.org Git - friendica.git/commitdiff
Links to Diaspora had sometimes been cut
authorMichael <heluecht@pirati.ca>
Sun, 11 Mar 2018 10:54:02 +0000 (10:54 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 11 Mar 2018 10:54:02 +0000 (10:54 +0000)
src/Content/Text/BBCode.php

index 091957c197408ae9921be0904b19f0ec81bbba80..dcf1f44817147fcd8fecdc2c6512058a102b4fde 100644 (file)
@@ -754,7 +754,7 @@ class BBCode
                if (($data["url"] != "") && ($data["title"] != "")) {
                        $text .= "\n[url=" . $data["url"] . "]" . $data["title"] . "[/url]";
                } elseif (($data["url"] != "")) {
-                       $text .= "\n" . $data["url"];
+                       $text .= "\n[url]" . $data["url"] . "[/url]";
                }
 
                return $text . "\n" . $data["after"];
@@ -831,6 +831,47 @@ class BBCode
                }
        }
 
+       /**
+        * @brief Shortens [url] BBCodes in a format that looks less ugly than the full address. (callback function)
+        * @param array $match Array with the matching values
+        * @return string reformatted link including HTML codes
+        */
+       private static function shortenVisibleUrlCallback($match)
+       {
+               $url = $match[1];
+
+               if (isset($match[2]) && ($match[1] != $match[2])) {
+                       return $match[0];
+               }
+
+               $parts = parse_url($url);
+               if (!isset($parts['scheme'])) {
+                       return $match[0];
+               }
+
+               return self::shortenVisibleUrl($url);
+       }
+
+       /**
+        * @brief Shortens [url] BBCodes in a format that looks less ugly than the full address.
+        * @param string $url URL that is about to be reformatted
+        * @return string reformatted link including HTML codes
+        */
+       private static function shortenVisibleUrl($url)
+       {
+               $parts = parse_url($url);
+               $scheme = $parts['scheme'] . '://';
+               $styled_url = str_replace($scheme, '', $url);
+
+               if (strlen($styled_url) > 30) {
+                       $styled_url = substr($styled_url, 0, 30) . "…";
+               }
+
+               $html = '<a href="%s" target="_blank">%s</a>';
+
+               return sprintf($html, $url, $styled_url);
+       }
+
        /*
         * [noparse][i]italic[/i][/noparse] turns into
         * [noparse][ i ]italic[ /i ][/noparse],
@@ -1459,6 +1500,9 @@ class BBCode
                        if ($simple_html == 7) {
                                $text = preg_replace_callback("/\[url\]([$URLSearchString]*)\[\/url\]/ism", 'self::convertUrlForMastodonCallback', $text);
                                $text = preg_replace_callback("/\[url\=([$URLSearchString]*)\]([$URLSearchString]*)\[\/url\]/ism", 'self::convertUrlForMastodonCallback', $text);
+                       } else {
+                               $text = preg_replace_callback("/\[url\]([$URLSearchString]*)\[\/url\]/ism", 'self::shortenVisibleUrlCallback', $text);
+                               $text = preg_replace_callback("/\[url\=([$URLSearchString]*)\]([$URLSearchString]*)\[\/url\]/ism", 'self::shortenVisibleUrlCallback', $text);
                        }
                } else {
                        $text = preg_replace("(\[url\]([$URLSearchString]*)\[\/url\])ism", " $1 ", $text);