diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 0262a4a9fd..6cda8e404f 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -269,29 +269,37 @@ class Contact * @brief Get the basepath for a given contact link * * @param string $url The contact link + * @param boolean $dont_update Don't update the contact * * @return string basepath - * @return boolean $dont_update Don't update the contact * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ public static function getBasepath($url, $dont_update = false) { - $contact = DBA::selectFirst('contact', ['baseurl'], ['uid' => 0, 'nurl' => Strings::normaliseLink($url)]); + $contact = DBA::selectFirst('contact', ['id', 'baseurl'], ['uid' => 0, 'nurl' => Strings::normaliseLink($url)]); + if (!DBA::isResult($contact)) { + return ''; + } + if (!empty($contact['baseurl'])) { return $contact['baseurl']; } elseif ($dont_update) { return ''; } - self::updateFromProbeByURL($url, true); + // Update the existing contact + self::updateFromProbe($contact['id'], '', true); - $contact = DBA::selectFirst('contact', ['baseurl'], ['uid' => 0, 'nurl' => Strings::normaliseLink($url)]); - if (!empty($contact['baseurl'])) { - return $contact['baseurl']; + // And fetch the result + $contact = DBA::selectFirst('contact', ['baseurl'], ['id' => $contact['id']]); + if (empty($contact['baseurl'])) { + Logger::info('No baseurl for contact', ['url' => $url]); + return ''; } - return ''; + Logger::info('Found baseurl for contact', ['url' => $url, 'baseurl' => $contact['baseurl']]); + return $contact['baseurl']; } /** diff --git a/src/Model/GContact.php b/src/Model/GContact.php index 189cc579ba..67519d01db 100644 --- a/src/Model/GContact.php +++ b/src/Model/GContact.php @@ -216,7 +216,7 @@ class GContact if (empty($gcontact['server_url'])) { // We check the server url to be sure that it is a real one - $server_url = Contact::getBasepath($gcontact['url']); + $server_url = self::getBasepath($gcontact['url']); // We are now sure that it is a correct URL. So we use it in the future if ($server_url != '') { @@ -1128,6 +1128,38 @@ class GContact self::update($gcontact); } + /** + * @brief Get the basepath for a given contact link + * + * @param string $url The gcontact link + * @param boolean $dont_update Don't update the contact + * + * @return string basepath + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws \ImagickException + */ + public static function getBasepath($url, $dont_update = false) + { + $gcontact = DBA::selectFirst('gcontact', ['server_url'], ['nurl' => Strings::normaliseLink($url)]); + if (!empty($gcontact['server_url'])) { + return $gcontact['server_url']; + } elseif ($dont_update) { + return ''; + } + + self::updateFromProbe($url, true); + + // Fetch the result + $gcontact = DBA::selectFirst('gcontact', ['server_url'], ['nurl' => Strings::normaliseLink($url)]); + if (empty($gcontact['server_url'])) { + Logger::info('No baseurl for gcontact', ['url' => $url]); + return ''; + } + + Logger::info('Found baseurl for gcontact', ['url' => $url, 'baseurl' => $gcontact['server_url']]); + return $gcontact['server_url']; + } + /** * @brief Fetches users of given GNU Social server * diff --git a/src/Model/GServer.php b/src/Model/GServer.php index f17265a3a3..de8a3c1a1a 100644 --- a/src/Model/GServer.php +++ b/src/Model/GServer.php @@ -44,7 +44,7 @@ class GServer public static function reachable(string $profile, string $server = '', string $network = '', bool $force = false) { if ($server == '') { - $server = Contact::getBasepath($profile); + $server = GContact::getBasepath($profile); } if ($server == '') { diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index dd8fab0a6d..a683a23514 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -1131,12 +1131,6 @@ class Diaspora private static function contactByHandle($uid, $handle) { $cid = Contact::getIdForURL($handle, $uid); - if (!$cid) { - $handle_parts = explode("@", $handle); - $nurl_sql = "%%://" . $handle_parts[1] . "%%/profile/" . $handle_parts[0]; - $cid = Contact::getIdForURL($nurl_sql, $uid); - } - if (!$cid) { Logger::log("Haven't found a contact for user " . $uid . " and handle " . $handle, Logger::DEBUG); return false; diff --git a/src/Worker/SearchDirectory.php b/src/Worker/SearchDirectory.php index 4fd6d44d50..d489acb7fb 100644 --- a/src/Worker/SearchDirectory.php +++ b/src/Worker/SearchDirectory.php @@ -10,7 +10,6 @@ use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Database\DBA; use Friendica\Model\GContact; -use Friendica\Model\Contact; use Friendica\Model\GServer; use Friendica\Network\Probe; use Friendica\Util\Network; @@ -55,7 +54,7 @@ class SearchDirectory continue; } - $server_url = Contact::getBasepath($jj->url); + $server_url = GContact::getBasepath($jj->url, true); if ($server_url != '') { if (!GServer::check($server_url)) { Logger::info("Friendica server doesn't answer.", ['server' => $server_url]); diff --git a/src/Worker/UpdateGContacts.php b/src/Worker/UpdateGContacts.php index 1d9d86bcf6..edee112eef 100644 --- a/src/Worker/UpdateGContacts.php +++ b/src/Worker/UpdateGContacts.php @@ -9,7 +9,7 @@ use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Worker; use Friendica\Database\DBA; -use Friendica\Model\Contact; +use Friendica\Model\GContact; use Friendica\Model\GServer; use Friendica\Util\DateTimeFormat; use Friendica\Util\Strings; @@ -53,7 +53,7 @@ class UpdateGContacts continue; } - $server_url = Contact::getBasepath($contact['url']); + $server_url = GContact::getBasepath($contact['url'], true); $force_update = false; if (!empty($contact['server_url'])) {