From 5d35974c19b50c98695c57cc1ad9195a36e7c396 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 14 Feb 2016 11:56:23 +0100 Subject: [PATCH] "addr" and "server_url" are now generated directly in "update_gcontact" if not given. --- include/Scrape.php | 69 ++++++++++++++++++++++++++++++++++---------- include/ostatus.php | 20 ------------- include/socgraph.php | 22 ++++++++++++++ 3 files changed, 75 insertions(+), 36 deletions(-) diff --git a/include/Scrape.php b/include/Scrape.php index d54a838afd..ef1db0312d 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -841,18 +841,18 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { $vcard['fn'] = $url; if (($notify != "") AND ($poll != "")) { - $baseurl = matching(normalise_link($notify), normalise_link($poll)); + $baseurl = matching_url(normalise_link($notify), normalise_link($poll)); - $baseurl2 = matching($baseurl, normalise_link($profile)); + $baseurl2 = matching_url($baseurl, normalise_link($profile)); if ($baseurl2 != "") $baseurl = $baseurl2; } if (($baseurl == "") AND ($notify != "")) - $baseurl = matching(normalise_link($profile), normalise_link($notify)); + $baseurl = matching_url(normalise_link($profile), normalise_link($notify)); if (($baseurl == "") AND ($poll != "")) - $baseurl = matching(normalise_link($profile), normalise_link($poll)); + $baseurl = matching_url(normalise_link($profile), normalise_link($poll)); $baseurl = rtrim($baseurl, "/"); @@ -907,19 +907,56 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { return $result; } -function matching($part1, $part2) { - $len = min(strlen($part1), strlen($part2)); +/** + * @brief Find the matching part between two url + * + * @param string $url1 + * @param string $url2 + * @return string The matching part + */ +function matching_url($url1, $url2) { + + if (($url1 == "") OR ($url2 == "")) + return ""; + + $url1 = normalise_link($url1); + $url2 = normalise_link($url2); + + $parts1 = parse_url($url1); + $parts2 = parse_url($url2); + + if (!isset($parts1["host"]) OR !isset($parts2["host"])) + return ""; + + if ($parts1["scheme"] != $parts2["scheme"]) + return ""; + + if ($parts1["host"] != $parts2["host"]) + return ""; + + if ($parts1["port"] != $parts2["port"]) + return ""; + + $match = $parts1["scheme"]."://".$parts1["host"]; + + if ($parts1["port"]) + $match .= ":".$parts1["port"]; + + $pathparts1 = explode("/", $parts1["path"]); + $pathparts2 = explode("/", $parts2["path"]); - $match = ""; - $matching = true; $i = 0; - while (($i <= $len) AND $matching) { - if (substr($part1, $i, 1) == substr($part2, $i, 1)) - $match .= substr($part1, $i, 1); - else - $matching = false; + $path = ""; + do { + $path1 = $pathparts1[$i]; + $path2 = $pathparts2[$i]; - $i++; - } - return($match); + if ($path1 == $path2) + $path .= $path1."/"; + + } while (($path1 == $path2) AND ($i++ <= count($pathparts1))); + + $match .= $path; + + return normalise_link($match); } diff --git a/include/ostatus.php b/include/ostatus.php index 983ed6e1b4..5c5016d0fc 100644 --- a/include/ostatus.php +++ b/include/ostatus.php @@ -164,8 +164,6 @@ function ostatus_fetchauthor($xpath, $context, $importer, &$contact, $onlyfetch) update_contact_avatar($author["author-avatar"], $importer["uid"], $contact["id"]); } - - /// @todo Add the "addr" field $contact["generation"] = 2; $contact["photo"] = $author["author-avatar"]; update_gcontact($contact); @@ -675,24 +673,6 @@ function ostatus_conv_fetch_actor($actor) { } } - $contact["server_url"] = $contact["url"]; - - $server_url = matching($contact["server_url"], $contact["alias"]); - if (strlen($server_url) > 8) - $contact["server_url"] = $server_url; - - $server_url = matching($contact["server_url"], $contact["photo"]); - if (strlen($server_url) > 8) - $contact["server_url"] = $server_url; - - if (($contact["server_url"] == $contact["url"]) OR ($contact["server_url"] == $contact["alias"])) - unset($contact["server_url"]); - else { - $hostname = str_replace("http://", "", normalise_link($contact["server_url"])); - if ($hostname AND $contact["nick"]) - $contact["addr"] = $contact["nick"]."@".$hostname; - } - update_gcontact($contact); } diff --git a/include/socgraph.php b/include/socgraph.php index ce5b08e641..e07e0d3533 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -1433,6 +1433,28 @@ function update_gcontact($contact) { if (!isset($contact["updated"])) $contact["updated"] = datetime_convert(); + if ($contact["server_url"] == "") { + $server_url = $contact["url"]; + + $server_url = matching_url($server_url, $contact["alias"]); + if ($server_url != "") + $contact["server_url"] = $server_url; + + $server_url = matching_url($server_url, $contact["photo"]); + if ($server_url != "") + $contact["server_url"] = $server_url; + + $server_url = matching_url($server_url, $contact["notify"]); + if ($server_url != "") + $contact["server_url"] = $server_url; + } else + $contact["server_url"] = normalise_link($contact["server_url"]); + + if (($contact["addr"] == "") AND ($contact["server_url"] != "") AND ($contact["nick"] != "")) { + $hostname = str_replace("http://", "", $contact["server_url"]); + $contact["addr"] = $contact["nick"]."@".$hostname; + } + // Check if any field changed $update = false; unset($fields["generation"]);