New function to fetch contact data by url
This commit is contained in:
parent
7822238fe0
commit
019a9d44c5
1 changed files with 40 additions and 19 deletions
|
@ -190,6 +190,44 @@ class Contact
|
||||||
return DBA::selectFirst('contact', $fields, ['id' => $id]);
|
return DBA::selectFirst('contact', $fields, ['id' => $id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches a contact by a given url
|
||||||
|
*
|
||||||
|
* @param string $url profile url
|
||||||
|
* @param integer $uid User ID of the contact
|
||||||
|
* @param array $fields Field list
|
||||||
|
* @param boolean $update true = always update, false = never update, null = update when not found or outdated
|
||||||
|
* @return array contact array
|
||||||
|
*/
|
||||||
|
public static function getByURL(string $url, int $uid = 0, array $fields = [], $update = null)
|
||||||
|
{
|
||||||
|
if ($update || is_null($update)) {
|
||||||
|
$cid = self::getIdForURL($url, $uid, !($update ?? false));
|
||||||
|
if (empty($cid)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return self::getById($cid, $fields);
|
||||||
|
}
|
||||||
|
|
||||||
|
// We first try the nurl (http://server.tld/nick), most common case
|
||||||
|
$options = ['order' => ['id']];
|
||||||
|
$contact = DBA::selectFirst('contact', $fields, ['nurl' => Strings::normaliseLink($url), 'uid' => $uid, 'deleted' => false], $options);
|
||||||
|
|
||||||
|
// Then the addr (nick@server.tld)
|
||||||
|
if (!DBA::isResult($contact)) {
|
||||||
|
$contact = DBA::selectFirst('contact', $fields, ['addr' => str_replace('acct:', '', $url), 'uid' => $uid, 'deleted' => false], $options);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Then the alias (which could be anything)
|
||||||
|
if (!DBA::isResult($contact)) {
|
||||||
|
// The link could be provided as http although we stored it as https
|
||||||
|
$ssl_url = str_replace('http://', 'https://', $url);
|
||||||
|
$condition = ['`alias` IN (?, ?, ?) AND `uid` = ? AND NOT `deleted`', $url, Strings::normaliseLink($url), $ssl_url, $uid];
|
||||||
|
$contact = DBA::selectFirst('contact', $fields, $condition, $options);
|
||||||
|
}
|
||||||
|
return $contact;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests if the given contact is a follower
|
* Tests if the given contact is a follower
|
||||||
*
|
*
|
||||||
|
@ -1459,26 +1497,9 @@ class Contact
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @todo Verify if we can't use Contact::getDetailsByUrl instead of the following
|
$contact = self::getByURL($url, $uid, ['id', 'avatar', 'updated', 'network'], false);
|
||||||
// We first try the nurl (http://server.tld/nick), most common case
|
|
||||||
$fields = ['id', 'avatar', 'updated', 'network'];
|
|
||||||
$options = ['order' => ['id']];
|
|
||||||
$contact = DBA::selectFirst('contact', $fields, ['nurl' => Strings::normaliseLink($url), 'uid' => $uid, 'deleted' => false], $options);
|
|
||||||
|
|
||||||
// Then the addr (nick@server.tld)
|
if (!empty($contact)) {
|
||||||
if (!DBA::isResult($contact)) {
|
|
||||||
$contact = DBA::selectFirst('contact', $fields, ['addr' => str_replace('acct:', '', $url), 'uid' => $uid, 'deleted' => false], $options);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Then the alias (which could be anything)
|
|
||||||
if (!DBA::isResult($contact)) {
|
|
||||||
// The link could be provided as http although we stored it as https
|
|
||||||
$ssl_url = str_replace('http://', 'https://', $url);
|
|
||||||
$condition = ['`alias` IN (?, ?, ?) AND `uid` = ? AND NOT `deleted`', $url, Strings::normaliseLink($url), $ssl_url, $uid];
|
|
||||||
$contact = DBA::selectFirst('contact', $fields, $condition, $options);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (DBA::isResult($contact)) {
|
|
||||||
$contact_id = $contact["id"];
|
$contact_id = $contact["id"];
|
||||||
$update_contact = false;
|
$update_contact = false;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue