]> git.mxchange.org Git - friendica.git/commitdiff
Complete incomplete URL during feed import
authorMichael <heluecht@pirati.ca>
Mon, 16 Oct 2017 20:31:13 +0000 (20:31 +0000)
committerMichael <heluecht@pirati.ca>
Mon, 16 Oct 2017 20:31:13 +0000 (20:31 +0000)
include/feed.php
include/html2bbcode.php
include/network.php

index 5676566c422d5538bcde68cc4279f5aff4e9ca39..1aab26e1dfe7d503bf3ddcdea17af54b5073edf1 100644 (file)
@@ -27,6 +27,14 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) {
                return;
        }
 
+       if (!empty($contact['poll'])) {
+               $basepath = $contact['poll'];
+       } elseif (!empty($contact['url'])) {
+               $basepath = $contact['url'];
+       } else {
+               $basepath = '';
+       }
+
        $doc = new DOMDocument();
        @$doc->loadXML(trim($xml));
        $xpath = new DomXPath($doc);
@@ -344,7 +352,7 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) {
                        if (title_is_body($item["title"], $body)) {
                                $item["title"] = "";
                        }
-                       $item["body"] = html2bbcode($body);
+                       $item["body"] = html2bbcode($body, $basepath);
 
                        if (($item["body"] == '') && ($item["title"] != '')) {
                                $item["body"] = $item["title"];
index 435f6b77c1198aee5db6d753010581fbc86a65a0..e7e253e81ba12d19be18ed076181a93c25ddf6a4 100644 (file)
@@ -79,7 +79,7 @@ function node2bbcodesub(&$doc, $oldnode, $attributes, $startbb, $endbb)
        return($replace);
 }
 
-function html2bbcode($message)
+function html2bbcode($message, $basepath = '')
 {
 
        $message = str_replace("\r", "", $message);
@@ -90,10 +90,10 @@ function html2bbcode($message)
                function ($matches) use (&$codeblocks) {
                        $return = '[codeblock-' . count($codeblocks) . ']';
 
-            $prefix = '[code]';
-            if ($matches[1] != '') {
-                $prefix = '[code=' . $matches[1] . ']';
-            }
+           $prefix = '[code]';
+           if ($matches[1] != '') {
+               $prefix = '[code=' . $matches[1] . ']';
+           }
                        $codeblocks[] = $prefix . $matches[2] . '[/code]';
                        return $return;
                }
@@ -313,15 +313,69 @@ function html2bbcode($message)
        // Restore code blocks
        $message = preg_replace_callback('#\[codeblock-([0-9]+)\]#iU',
                function ($matches) use ($codeblocks) {
-            $return = '';
-            if (isset($codeblocks[intval($matches[1])])) {
-                $return = $codeblocks[$matches[1]];
-            }
+           $return = '';
+           if (isset($codeblocks[intval($matches[1])])) {
+               $return = $codeblocks[$matches[1]];
+           }
                        return $return;
                }
        , $message);
 
        $message = trim($message);
 
+       if ($basepath != '') {
+               $message = AddHostname($message, $basepath);
+       }
+
        return $message;
 }
+
+/**
+ * @brief Sub function to complete incomplete URL
+ *
+ * @param array $matches Result of preg_replace_callback
+ * @param string $basepath Basepath that is used to complete the URL
+ *
+ * @return string The expanded URL
+ */
+function AddHostnameSub($matches, $basepath) {
+       $base = parse_url($basepath);
+
+       $link = $matches[0];
+       $url = $matches[1];
+
+       $parts = array_merge($base, parse_url($url));
+       $url2 = unParseUrl($parts);
+
+       return str_replace($url, $url2, $link);
+}
+
+/**
+ * @brief Complete incomplete URLs in BBCode
+ *
+ * @param string $body Body with URLs
+ * @param string $basepath Basepath that is used to complete the URL
+ *
+ * @return string Body with expanded URLs
+ */
+function AddHostname($body, $basepath) {
+       $URLSearchString = "^\[\]";
+
+       $matches = array("/\[url\=([$URLSearchString]*)\].*?\[\/url\]/ism",
+                       "/\[url\]([$URLSearchString]*)\[\/url\]/ism",
+                       "/\[img\=[0-9]*x[0-9]*\](.*?)\[\/img\]/ism",
+                       "/\[img\](.*?)\[\/img\]/ism",
+                       "/\[zmg\=[0-9]*x[0-9]*\](.*?)\[\/img\]/ism",
+                       "/\[zmg\](.*?)\[\/zmg\]/ism",
+                       "/\[video\](.*?)\[\/video\]/ism",
+                       "/\[audio\](.*?)\[\/audio\]/ism",
+                       );
+
+       foreach ($matches AS $match) {
+               $body = preg_replace_callback($match,
+                                               function ($match) use ($basepath) {
+                                                       return AddHostnameSub($match, $basepath);
+                                               }, $body);
+       }
+       return $body;
+}
index c705d4e78cc3c792cfa52a7bd0a7978c8a975049..2a996cd933e9c351d2db65dad066f43a41c5a34e 100644 (file)
@@ -1003,3 +1003,34 @@ function matching_url($url1, $url2) {
 
        return normalise_link($match);
 }
+
+/**
+ * @brief Glue url parts together
+ *
+ * @param array $parsed URL parts
+ *
+ * @return string The glued URL
+ */
+function unParseUrl($parsed) {
+       $get = function ($key) use ($parsed) {
+               return isset($parsed[$key]) ? $parsed[$key] : null;
+       };
+
+       $pass      = $get('pass');
+       $user      = $get('user');
+       $userinfo  = $pass !== null ? "$user:$pass" : $user;
+       $port      = $get('port');
+       $scheme    = $get('scheme');
+       $query     = $get('query');
+       $fragment  = $get('fragment');
+       $authority =
+               ($userinfo !== null ? $userinfo."@" : '') .
+               $get('host') .
+               ($port ? ":$port" : '');
+
+       return  (strlen($scheme) ? $scheme.":" : '') .
+               (strlen($authority) ? "//".$authority : '') .
+               $get('path') .
+               (strlen($query) ? "?".$query : '') .
+               (strlen($fragment) ? "#".$fragment : '');
+}