]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/Contact.php
New option to disable the fetching of parents
[friendica.git] / src / Model / Contact.php
index f8ff91ec554112f4a4a19559f16b4e94ca8369b1..c873c3941e8c912519e39aea97e868a661c2f769 100644 (file)
@@ -359,7 +359,7 @@ class Contact
         * @throws HTTPException\InternalServerErrorException
         * @throws \ImagickException
         */
-       public static function isFollowerByURL(string $url, uid $uid): bool
+       public static function isFollowerByURL(string $url, int $uid): bool
        {
                $cid = self::getIdForURL($url, $uid);
 
@@ -474,7 +474,6 @@ class Contact
         * Check if the given contact ID is on the same server
         *
         * @param string $url The contact link
-        *
         * @return boolean Is it the same server?
         */
        public static function isLocalById(int $cid): bool
@@ -556,7 +555,6 @@ class Contact
         *
         * @param int $cid Either public contact id or user's contact id
         * @param int $uid User ID
-        *
         * @return array with public and user's contact id
         * @throws HTTPException\InternalServerErrorException
         * @throws \ImagickException
@@ -597,12 +595,11 @@ class Contact
         * @param int $cid A contact ID
         * @param int $uid The User ID
         * @param array $fields The selected fields for the contact
-        *
         * @return array The contact details
         *
         * @throws \Exception
         */
-       public static function getContactForUser($cid, $uid, array $fields = [])
+       public static function getContactForUser(int $cid, int $uid, array $fields = []): array
        {
                $contact = DBA::selectFirst('contact', $fields, ['id' => $cid, 'uid' => $uid]);
 
@@ -620,7 +617,7 @@ class Contact
         * @return bool Operation success
         * @throws HTTPException\InternalServerErrorException
         */
-       public static function createSelfFromUserId($uid)
+       public static function createSelfFromUserId(int $uid): bool
        {
                $user = DBA::selectFirst('user', ['uid', 'username', 'nickname', 'pubkey', 'prvkey'],
                        ['uid' => $uid, 'account_expired' => false]);
@@ -677,12 +674,12 @@ class Contact
        /**
         * Updates the self-contact for the provided user id
         *
-        * @param int     $uid
-        * @param boolean $update_avatar Force the avatar update
-        * @return bool   "true" if updated
+        * @param int   $uid
+        * @param bool  $update_avatar Force the avatar update
+        * @return bool "true" if updated
         * @throws HTTPException\InternalServerErrorException
         */
-       public static function updateSelfFromUserID($uid, $update_avatar = false)
+       public static function updateSelfFromUserID(int $uid, bool $update_avatar = false): bool
        {
                $fields = ['id', 'uri-id', 'name', 'nick', 'location', 'about', 'keywords', 'avatar', 'prvkey', 'pubkey', 'manually-approve',
                        'xmpp', 'matrix', 'contact-type', 'forum', 'prv', 'avatar-date', 'url', 'nurl', 'unsearchable',
@@ -706,23 +703,33 @@ class Contact
                }
 
                $file_suffix = 'jpg';
+               $url = DI::baseUrl() . '/profile/' . $user['nickname'];
+
+               $fields = [
+                       'name'         => $profile['name'],
+                       'nick'         => $user['nickname'],
+                       'avatar-date'  => $self['avatar-date'],
+                       'location'     => Profile::formatLocation($profile),
+                       'about'        => $profile['about'],
+                       'keywords'     => $profile['pub_keywords'],
+                       'contact-type' => $user['account-type'],
+                       'prvkey'       => $user['prvkey'],
+                       'pubkey'       => $user['pubkey'],
+                       'xmpp'         => $profile['xmpp'],
+                       'matrix'       => $profile['matrix'],
+                       'network'      => Protocol::DFRN,
+                       'url'          => $url,
+                       // it seems as if ported accounts can have wrong values, so we make sure that now everything is fine.
+                       'nurl'         => Strings::normaliseLink($url),
+                       'uri-id'       => ItemURI::getIdByURI($url),
+                       'addr'         => $user['nickname'] . '@' . substr(DI::baseUrl(), strpos(DI::baseUrl(), '://') + 3),
+                       'request'      => DI::baseUrl() . '/dfrn_request/' . $user['nickname'],
+                       'notify'       => DI::baseUrl() . '/dfrn_notify/' . $user['nickname'],
+                       'poll'         => DI::baseUrl() . '/dfrn_poll/'. $user['nickname'],
+                       'confirm'      => DI::baseUrl() . '/dfrn_confirm/' . $user['nickname'],
+                       'poco'         => DI::baseUrl() . '/poco/' . $user['nickname'],
+               ];
 
-               $fields = ['name' => $profile['name'], 'nick' => $user['nickname'],
-                       'avatar-date' => $self['avatar-date'], 'location' => Profile::formatLocation($profile),
-                       'about' => $profile['about'], 'keywords' => $profile['pub_keywords'],
-                       'contact-type' => $user['account-type'], 'prvkey' => $user['prvkey'],
-                       'pubkey' => $user['pubkey'], 'xmpp' => $profile['xmpp'], 'matrix' => $profile['matrix'], 'network' => Protocol::DFRN];
-
-               // it seems as if ported accounts can have wrong values, so we make sure that now everything is fine.
-               $fields['url'] = DI::baseUrl() . '/profile/' . $user['nickname'];
-               $fields['nurl'] = Strings::normaliseLink($fields['url']);
-               $fields['uri-id'] = ItemURI::getIdByURI($fields['url']);
-               $fields['addr'] = $user['nickname'] . '@' . substr(DI::baseUrl(), strpos(DI::baseUrl(), '://') + 3);
-               $fields['request'] = DI::baseUrl() . '/dfrn_request/' . $user['nickname'];
-               $fields['notify'] = DI::baseUrl() . '/dfrn_notify/' . $user['nickname'];
-               $fields['poll'] = DI::baseUrl() . '/dfrn_poll/'. $user['nickname'];
-               $fields['confirm'] = DI::baseUrl() . '/dfrn_confirm/' . $user['nickname'];
-               $fields['poco'] = DI::baseUrl() . '/poco/' . $user['nickname'];
 
                $avatar = Photo::selectFirst(['resource-id', 'type'], ['uid' => $uid, 'profile' => true]);
                if (DBA::isResult($avatar)) {
@@ -795,9 +802,10 @@ class Contact
         * Marks a contact for removal
         *
         * @param int $id contact id
+        * @return void
         * @throws HTTPException\InternalServerErrorException
         */
-       public static function remove($id)
+       public static function remove(int $id)
        {
                // We want just to make sure that we don't delete our "self" contact
                $contact = DBA::selectFirst('contact', ['uri-id', 'photo', 'thumb', 'micro', 'uid'], ['id' => $id, 'self' => false]);
@@ -822,6 +830,7 @@ class Contact
         * Unfollow the remote contact
         *
         * @param array $contact Target user-specific contact (uid != 0) array
+        * @return void
         * @throws HTTPException\InternalServerErrorException
         * @throws \ImagickException
         */
@@ -851,6 +860,7 @@ class Contact
         * The local relationship is updated immediately, the eventual remote server is messaged in the background.
         *
         * @param array $contact User-specific contact array (uid != 0) to revoke the follow from
+        * @return void
         * @throws HTTPException\InternalServerErrorException
         * @throws \ImagickException
         */
@@ -878,6 +888,7 @@ class Contact
         * Completely severs a relationship with a contact
         *
         * @param array $contact User-specific contact (uid != 0) array
+        * @return void
         * @throws HTTPException\InternalServerErrorException
         * @throws \ImagickException
         */
@@ -925,7 +936,7 @@ class Contact
         * up or some other transient event and that there's a possibility we could recover from it.
         *
         * @param array $contact contact to mark for archival
-        * @return null
+        * @return void
         * @throws HTTPException\InternalServerErrorException
         */
        public static function markForArchival(array $contact)
@@ -978,7 +989,7 @@ class Contact
         * @see   Contact::markForArchival()
         *
         * @param array $contact contact to be unmarked for archival
-        * @return null
+        * @return void
         * @throws \Exception
         */
        public static function unmarkForArchival(array $contact)
@@ -1025,7 +1036,7 @@ class Contact
         * @throws HTTPException\InternalServerErrorException
         * @throws \ImagickException
         */
-       public static function photoMenu(array $contact, $uid = 0)
+       public static function photoMenu(array $contact, int $uid = 0): array
        {
                $pm_url = '';
                $status_link = '';
@@ -1168,11 +1179,11 @@ class Contact
         * @throws HTTPException\InternalServerErrorException
         * @throws \ImagickException
         */
-       public static function getIdForURL($url, $uid = 0, $update = null, $default = [])
+       public static function getIdForURL(string $url = null, int $uid = 0, $update = null, array $default = []): int
        {
                $contact_id = 0;
 
-               if ($url == '') {
+               if (empty($url)) {
                        Logger::notice('Empty url, quitting', ['url' => $url, 'user' => $uid, 'default' => $default]);
                        return 0;
                }
@@ -1180,7 +1191,7 @@ class Contact
                $contact = self::getByURL($url, false, ['id', 'network', 'uri-id'], $uid);
 
                if (!empty($contact)) {
-                       $contact_id = $contact["id"];
+                       $contact_id = $contact['id'];
 
                        if (empty($update) && (!empty($contact['uri-id']) || is_bool($update))) {
                                Logger::debug('Contact found', ['url' => $url, 'uid' => $uid, 'update' => $update, 'cid' => $contact_id]);
@@ -1197,10 +1208,10 @@ class Contact
                $data = [];
 
                if (empty($default['network']) || $update) {
-                       $data = Probe::uri($url, "", $uid);
+                       $data = Probe::uri($url, '', $uid);
 
                        // Take the default values when probing failed
-                       if (!empty($default) && !in_array($data["network"], array_merge(Protocol::NATIVE_SUPPORT, [Protocol::PUMPIO]))) {
+                       if (!empty($default) && !in_array($data['network'], array_merge(Protocol::NATIVE_SUPPORT, [Protocol::PUMPIO]))) {
                                $data = array_merge($data, $default);
                        }
                } elseif (!empty($default['network'])) {
@@ -1312,7 +1323,7 @@ class Contact
         * @return boolean Is the contact archived?
         * @throws HTTPException\InternalServerErrorException
         */
-       public static function isArchived(int $cid)
+       public static function isArchived(int $cid): bool
        {
                if ($cid == 0) {
                        return false;
@@ -1352,11 +1363,10 @@ class Contact
         * Checks if the contact is blocked
         *
         * @param int $cid contact id
-        *
         * @return boolean Is the contact blocked?
         * @throws HTTPException\InternalServerErrorException
         */
-       public static function isBlocked($cid)
+       public static function isBlocked(int $cid): bool
        {
                if ($cid == 0) {
                        return false;
@@ -1378,11 +1388,10 @@ class Contact
         * Checks if the contact is hidden
         *
         * @param int $cid contact id
-        *
         * @return boolean Is the contact hidden?
         * @throws \Exception
         */
-       public static function isHidden($cid)
+       public static function isHidden(int $cid): bool
        {
                if ($cid == 0) {
                        return false;
@@ -1406,7 +1415,7 @@ class Contact
         * @return string posts in HTML
         * @throws \Exception
         */
-       public static function getPostsFromUrl($contact_url, $thread_mode = false, $update = 0, $parent = 0, bool $only_media = false)
+       public static function getPostsFromUrl(string $contact_url, bool $thread_mode = false, int $update = 0, int $parent = 0, bool $only_media = false): string
        {
                return self::getPostsFromId(self::getIdForURL($contact_url), $thread_mode, $update, $parent, $only_media);
        }
@@ -1422,7 +1431,7 @@ class Contact
         * @return string posts in HTML
         * @throws \Exception
         */
-       public static function getPostsFromId($cid, $thread_mode = false, $update = 0, $parent = 0, bool $only_media = false)
+       public static function getPostsFromId(int $cid, bool $thread_mode = false, int $update = 0, int $parent = 0, bool $only_media = false): string
        {
                $contact = DBA::selectFirst('contact', ['contact-type', 'network'], ['id' => $cid]);
                if (!DBA::isResult($contact)) {
@@ -1958,7 +1967,7 @@ class Contact
         * @param string  $updated Contact update date
         * @return string avatar link
         */
-       public static function getAvatarUrlForId(int $cid, string $size = '', string $updated = '', string $guid = ''):string
+       public static function getAvatarUrlForId(int $cid, string $size = '', string $updated = '', string $guid = ''): string
        {
                // We have to fetch the "updated" variable when it wasn't provided
                // The parameter can be provided to improve performance
@@ -1999,7 +2008,7 @@ class Contact
         * @param string  $size One of the Proxy::SIZE_* constants
         * @return string avatar link
         */
-       public static function getAvatarUrlForUrl(string $url, int $uid, string $size = ''):string
+       public static function getAvatarUrlForUrl(string $url, int $uid, string $size = ''): string
        {
                $condition = ["`nurl` = ? AND ((`uid` = ? AND `network` IN (?, ?)) OR `uid` = ?)",
                        Strings::normaliseLink($url), $uid, Protocol::FEED, Protocol::MAIL, 0];
@@ -2015,7 +2024,7 @@ class Contact
         * @param string  $updated Contact update date
         * @return string header link
         */
-       public static function getHeaderUrlForId(int $cid, string $size = '', string $updated = '', string $guid = ''):string
+       public static function getHeaderUrlForId(int $cid, string $size = '', string $updated = '', string $guid = ''): string
        {
                // We have to fetch the "updated" variable when it wasn't provided
                // The parameter can be provided to improve performance
@@ -2312,6 +2321,8 @@ class Contact
        }
 
        /**
+        * Updates contact record by provided id and optional network
+        *
         * @param integer $id      contact id
         * @param string  $network Optional network we are probing for
         * @return boolean
@@ -2335,13 +2346,15 @@ class Contact
        }
 
        /**
+        * Updates contact record by provided id and probed data
+        *
         * @param integer $id      contact id
         * @param array   $ret     Probed data
         * @return boolean
         * @throws HTTPException\InternalServerErrorException
         * @throws \ImagickException
         */
-       private static function updateFromProbeArray(int $id, array $ret)
+       private static function updateFromProbeArray(int $id, array $ret): bool
        {
                /*
                  Warning: Never ever fetch the public key via Probe::uri and write it into the contacts.
@@ -2436,7 +2449,7 @@ class Contact
 
                $new_pubkey = $ret['pubkey'] ?? '';
 
-               if ($uid == 0) {
+               if ($uid == 0 && DI::config()->get('system', 'fetch_featured_posts')) {
                        if ($ret['network'] == Protocol::ACTIVITYPUB) {
                                $apcontact = APContact::getByURL($ret['url'], false);
                                if (!empty($apcontact['featured'])) {
@@ -2552,6 +2565,8 @@ class Contact
        }
 
        /**
+        * Updates contact record by provided URL
+        *
         * @param integer $url contact url
         * @return integer Contact id
         * @throws HTTPException\InternalServerErrorException