mirror of
https://github.com/friendica/friendica
synced 2024-12-23 15:20:17 +00:00
Merge pull request #3795 from annando/complete-url
Complete incomplete URL during feed import
This commit is contained in:
commit
6640e6ceef
3 changed files with 103 additions and 10 deletions
|
@ -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"];
|
||||
|
|
|
@ -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);
|
||||
|
@ -323,5 +323,59 @@ function html2bbcode($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;
|
||||
}
|
||||
|
|
|
@ -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 : '');
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue