X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FContact%2FRelation.php;h=ed520f25ffea9c915f7b060b98b5da0b572337b6;hb=8db0e090d7afc3fbfeaf7a587140c80c98233484;hp=f0f24774ef61783d897ea8d3c35f48042cc8de91;hpb=a6423031eba1236127160ced3028e36401f40536;p=friendica.git diff --git a/src/Model/Contact/Relation.php b/src/Model/Contact/Relation.php index f0f24774ef..ed520f25ff 100644 --- a/src/Model/Contact/Relation.php +++ b/src/Model/Contact/Relation.php @@ -1,6 +1,6 @@ $url]); return; } if (!self::isDiscoverable($url, $contact)) { + Logger::info('Contact is not discoverable', ['url' => $url]); return; } $uid = User::getIdForURL($url); if (!empty($uid)) { - // Fetch the followers/followings locally + Logger::info('Fetch the followers/followings locally', ['url' => $url]); $followers = self::getContacts($uid, [Contact::FOLLOWER, Contact::FRIEND]); $followings = self::getContacts($uid, [Contact::SHARING, Contact::FRIEND]); - } else { + } elseif (!Contact::isLocal($url)) { + Logger::info('Fetch the followers/followings by polling the endpoints', ['url' => $url]); $apcontact = APContact::getByURL($url, false); if (!empty($apcontact['followers']) && is_string($apcontact['followers'])) { @@ -104,10 +107,14 @@ class Relation } else { $followings = []; } + } else { + Logger::notice('Contact seems to be local but could not be found here', ['url' => $url]); + $followers = []; + $followings = []; } if (empty($followers) && empty($followings)) { - DBA::update('contact', ['last-discovery' => DateTimeFormat::utcNow()], ['id' => $contact['id']]); + Contact::update(['last-discovery' => DateTimeFormat::utcNow()], ['id' => $contact['id']]); Logger::info('The contact does not offer discoverable data', ['id' => $contact['id'], 'url' => $url, 'network' => $contact['network']]); return; } @@ -155,7 +162,7 @@ class Relation DBA::delete('contact-relation', ['cid' => $target, 'follows' => false, 'last-interaction' => DBA::NULL_DATETIME]); } - DBA::update('contact', ['last-discovery' => DateTimeFormat::utcNow()], ['id' => $target]); + Contact::update(['last-discovery' => DateTimeFormat::utcNow()], ['id' => $target]); Logger::info('Contacts discovery finished', ['id' => $target, 'url' => $url, 'follower' => $follower_counter, 'following' => $following_counter]); return; } @@ -167,7 +174,7 @@ class Relation * @param array $rel * @return array contact list */ - private static function getContacts(int $uid, array $rel) + private static function getContacts(int $uid, array $rel): array { $list = []; $profile = Profile::getByUID($uid); @@ -175,8 +182,15 @@ class Relation return $list; } - $condition = ['rel' => $rel, 'uid' => $uid, 'self' => false, 'deleted' => false, - 'hidden' => false, 'archive' => false, 'pending' => false]; + $condition = [ + 'rel' => $rel, + 'uid' => $uid, + 'self' => false, + 'deleted' => false, + 'hidden' => false, + 'archive' => false, + 'pending' => false, + ]; $condition = DBA::mergeConditions($condition, ["`url` IN (SELECT `url` FROM `apcontact`)"]); $contacts = DBA::select('contact', ['url'], $condition); while ($contact = DBA::fetch($contacts)) { @@ -194,7 +208,7 @@ class Relation * @param array $contact Contact array * @return boolean True if contact is discoverable */ - public static function isDiscoverable(string $url, array $contact = []) + public static function isDiscoverable(string $url, array $contact = []): bool { $contact_discovery = DI::config()->get('system', 'contact_discovery'); @@ -247,12 +261,14 @@ class Relation } /** - * @param int $uid user + * Returns an array of suggested contacts for given user id + * + * @param int $uid User id * @param int $start optional, default 0 * @param int $limit optional, default 80 * @return array */ - static public function getSuggestions(int $uid, int $start = 0, int $limit = 80) + static public function getSuggestions(int $uid, int $start = 0, int $limit = 80): array { $cid = Contact::getPublicIdByUserId($uid); $totallimit = $start + $limit; @@ -265,20 +281,25 @@ class Relation // The query returns contacts where contacts interacted with whom the given user follows. // Contacts who already are in the user's contact table are ignored. - $results = DBA::select('contact', [], - ["`id` IN (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` IN + $results = DBA::select('contact', [], ["`id` IN (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` IN (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` = ?) AND NOT `cid` IN (SELECT `id` FROM `contact` WHERE `uid` = ? AND `nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` = ? AND `rel` IN (?, ?)))) AND NOT `hidden` AND `network` IN (?, ?, ?, ?)", - $cid, 0, $uid, Contact::FRIEND, Contact::SHARING, - Protocol::ACTIVITYPUB, Protocol::DFRN, $diaspora, $ostatus], - ['order' => ['last-item' => true], 'limit' => $totallimit] + $cid, + 0, + $uid, Contact::FRIEND, Contact::SHARING, + Protocol::ACTIVITYPUB, Protocol::DFRN, $diaspora, $ostatus, + ], [ + 'order' => ['last-item' => true], + 'limit' => $totallimit, + ] ); while ($contact = DBA::fetch($results)) { $contacts[$contact['id']] = $contact; } + DBA::close($results); Logger::info('Contacts of contacts who are followed by the given user', ['uid' => $uid, 'cid' => $cid, 'count' => count($contacts)]); @@ -358,12 +379,12 @@ class Relation * @return int * @throws Exception */ - public static function countFollows(int $cid, array $condition = []) + public static function countFollows(int $cid, array $condition = []): int { - $condition = DBA::mergeConditions($condition, - ['`id` IN (SELECT `relation-cid` FROM `contact-relation` WHERE `cid` = ? AND `follows`)', - $cid] - ); + $condition = DBA::mergeConditions($condition, [ + '`id` IN (SELECT `relation-cid` FROM `contact-relation` WHERE `cid` = ? AND `follows`)', + $cid, + ]); return DI::dba()->count('contact', $condition); } @@ -549,7 +570,7 @@ class Relation * @param int $count * @param int $offset * @param bool $shuffle - * @return array + * @return array|bool Array on success, false on failure * @throws Exception */ public static function listCommon(int $sourceId, int $targetId, array $condition = [], int $count = 30, int $offset = 0, bool $shuffle = false) @@ -574,7 +595,7 @@ class Relation * @return int * @throws Exception */ - public static function countCommonFollows(int $sourceId, int $targetId, array $condition = []) + public static function countCommonFollows(int $sourceId, int $targetId, array $condition = []): int { $condition = DBA::mergeConditions($condition, ['`id` IN (SELECT `relation-cid` FROM `contact-relation` WHERE `cid` = ? AND `follows`) @@ -594,7 +615,7 @@ class Relation * @param int $count * @param int $offset * @param bool $shuffle - * @return array + * @return array|bool Array on success, false on failure * @throws Exception */ public static function listCommonFollows(int $sourceId, int $targetId, array $condition = [], int $count = 30, int $offset = 0, bool $shuffle = false) @@ -619,7 +640,7 @@ class Relation * @return int * @throws Exception */ - public static function countCommonFollowers(int $sourceId, int $targetId, array $condition = []) + public static function countCommonFollowers(int $sourceId, int $targetId, array $condition = []): int { $condition = DBA::mergeConditions($condition, ["`id` IN (SELECT `cid` FROM `contact-relation` WHERE `relation-cid` = ? AND `follows`) @@ -639,7 +660,7 @@ class Relation * @param int $count * @param int $offset * @param bool $shuffle - * @return array + * @return array|bool Array on success, false on failure * @throws Exception */ public static function listCommonFollowers(int $sourceId, int $targetId, array $condition = [], int $count = 30, int $offset = 0, bool $shuffle = false)