X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FContact.php;h=89325e0939fedcd860b0d8d21c27e2849386f590;hb=315dddbcb9232fea105d2da53ad2ba0e143bd7e4;hp=b0b5fcc91b0dd37bedfb3de5b4efe83d0906434a;hpb=fd1ae3f1fb3dffb6d7bd283dc388b7699a829c5d;p=friendica.git diff --git a/src/Model/Contact.php b/src/Model/Contact.php index b0b5fcc91b..89325e0939 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -1,6 +1,6 @@ $image_rid, 'uid' => $uid])) { @@ -2027,7 +2027,7 @@ class Contact if (Contact\Relation::isDiscoverable($ret['url'])) { Worker::add(PRIORITY_LOW, 'ContactDiscovery', $ret['url']); } - + // Update the public contact if ($uid != 0) { $contact = self::getByURL($ret['url'], false, ['id']); @@ -2409,6 +2409,50 @@ class Contact return $contact; } + /** + * Follow a contact + * + * @param int $cid Public contact id + * @param int $uid User ID + * + * @return bool "true" if following had been successful + */ + public static function follow(int $cid, int $uid) + { + $user = User::getById($uid); + if (empty($user)) { + return false; + } + + $contact = self::getById($cid, ['url']); + + $result = self::createFromProbe($user, $contact['url'], false); + + return $result['cid']; + } + + /** + * Unfollow a contact + * + * @param int $cid Public contact id + * @param int $uid User ID + * + * @return bool "true" if unfollowing had been successful + */ + public static function unfollow(int $cid, int $uid) + { + $cdata = self::getPublicAndUserContacID($cid, $uid); + if (empty($cdata['user'])) { + return false; + } + + $contact = self::getById($cdata['user']); + + self::removeSharer([], $contact); + + return true; + } + /** * @param array $importer Owner (local user) data * @param array $contact Existing owner-specific contact data we want to expand the relationship with. Optional. @@ -2554,7 +2598,7 @@ class Contact return null; } - public static function removeFollower($importer, $contact, array $datarray = [], $item = "") + public static function removeFollower($importer, $contact) { if (($contact['rel'] == self::FRIEND) || ($contact['rel'] == self::SHARING)) { DBA::update('contact', ['rel' => self::SHARING], ['id' => $contact['id']]); @@ -2563,7 +2607,7 @@ class Contact } } - public static function removeSharer($importer, $contact, array $datarray = [], $item = "") + public static function removeSharer($importer, $contact) { if (($contact['rel'] == self::FRIEND) || ($contact['rel'] == self::FOLLOWER)) { DBA::update('contact', ['rel' => self::FOLLOWER], ['id' => $contact['id']]); @@ -2763,11 +2807,12 @@ class Contact * * @param string $search Name or nick * @param string $mode Search mode (e.g. "community") + * @param int $uid User ID * * @return array with search results * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function searchByName($search, $mode = '') + public static function searchByName(string $search, string $mode = '', int $uid = 0) { if (empty($search)) { return []; @@ -2800,7 +2845,7 @@ class Contact NOT `failed` AND `uid` = ? AND (`addr` LIKE ? OR `name` LIKE ? OR `nick` LIKE ?) $extra_sql ORDER BY `nurl` DESC LIMIT 1000", - Protocol::DFRN, Protocol::ACTIVITYPUB, $ostatus, $diaspora, 0, $search, $search, $search + Protocol::DFRN, Protocol::ACTIVITYPUB, $ostatus, $diaspora, $uid, $search, $search, $search ); $contacts = DBA::toArray($results); @@ -2821,6 +2866,9 @@ class Contact $count = 0; foreach ($urls as $url) { + if (empty($url) || !is_string($url)) { + continue; + } $contact = self::getByURL($url, false, ['id', 'updated']); if (empty($contact['id'])) { Worker::add(PRIORITY_LOW, 'AddContact', 0, $url);