*/
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'];
}
/**
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 != '') {
self::update($gcontact);
}
+ /**
+ * @brief Get the basepath for a given contact link
+ *
+ * @param string $url The gcontact link
+ *
+ * @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)
+ {
+ $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
*
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 == '') {
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;
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;
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]);
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;
continue;
}
- $server_url = Contact::getBasepath($contact['url']);
+ $server_url = GContact::getBasepath($contact['url'], true);
$force_update = false;
if (!empty($contact['server_url'])) {