mirror of
https://github.com/friendica/friendica
synced 2024-12-23 20:00:16 +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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($contact['poll'])) {
|
||||||
|
$basepath = $contact['poll'];
|
||||||
|
} elseif (!empty($contact['url'])) {
|
||||||
|
$basepath = $contact['url'];
|
||||||
|
} else {
|
||||||
|
$basepath = '';
|
||||||
|
}
|
||||||
|
|
||||||
$doc = new DOMDocument();
|
$doc = new DOMDocument();
|
||||||
@$doc->loadXML(trim($xml));
|
@$doc->loadXML(trim($xml));
|
||||||
$xpath = new DomXPath($doc);
|
$xpath = new DomXPath($doc);
|
||||||
|
@ -344,7 +352,7 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) {
|
||||||
if (title_is_body($item["title"], $body)) {
|
if (title_is_body($item["title"], $body)) {
|
||||||
$item["title"] = "";
|
$item["title"] = "";
|
||||||
}
|
}
|
||||||
$item["body"] = html2bbcode($body);
|
$item["body"] = html2bbcode($body, $basepath);
|
||||||
|
|
||||||
if (($item["body"] == '') && ($item["title"] != '')) {
|
if (($item["body"] == '') && ($item["title"] != '')) {
|
||||||
$item["body"] = $item["title"];
|
$item["body"] = $item["title"];
|
||||||
|
|
|
@ -79,7 +79,7 @@ function node2bbcodesub(&$doc, $oldnode, $attributes, $startbb, $endbb)
|
||||||
return($replace);
|
return($replace);
|
||||||
}
|
}
|
||||||
|
|
||||||
function html2bbcode($message)
|
function html2bbcode($message, $basepath = '')
|
||||||
{
|
{
|
||||||
|
|
||||||
$message = str_replace("\r", "", $message);
|
$message = str_replace("\r", "", $message);
|
||||||
|
@ -90,10 +90,10 @@ function html2bbcode($message)
|
||||||
function ($matches) use (&$codeblocks) {
|
function ($matches) use (&$codeblocks) {
|
||||||
$return = '[codeblock-' . count($codeblocks) . ']';
|
$return = '[codeblock-' . count($codeblocks) . ']';
|
||||||
|
|
||||||
$prefix = '[code]';
|
$prefix = '[code]';
|
||||||
if ($matches[1] != '') {
|
if ($matches[1] != '') {
|
||||||
$prefix = '[code=' . $matches[1] . ']';
|
$prefix = '[code=' . $matches[1] . ']';
|
||||||
}
|
}
|
||||||
$codeblocks[] = $prefix . $matches[2] . '[/code]';
|
$codeblocks[] = $prefix . $matches[2] . '[/code]';
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
@ -313,15 +313,69 @@ function html2bbcode($message)
|
||||||
// Restore code blocks
|
// Restore code blocks
|
||||||
$message = preg_replace_callback('#\[codeblock-([0-9]+)\]#iU',
|
$message = preg_replace_callback('#\[codeblock-([0-9]+)\]#iU',
|
||||||
function ($matches) use ($codeblocks) {
|
function ($matches) use ($codeblocks) {
|
||||||
$return = '';
|
$return = '';
|
||||||
if (isset($codeblocks[intval($matches[1])])) {
|
if (isset($codeblocks[intval($matches[1])])) {
|
||||||
$return = $codeblocks[$matches[1]];
|
$return = $codeblocks[$matches[1]];
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
, $message);
|
, $message);
|
||||||
|
|
||||||
$message = trim($message);
|
$message = trim($message);
|
||||||
|
|
||||||
|
if ($basepath != '') {
|
||||||
|
$message = addHostname($message, $basepath);
|
||||||
|
}
|
||||||
|
|
||||||
return $message;
|
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);
|
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