X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FContact.php;h=cbe370a4aa8250d35a899d3b1de59d2e32105adf;hb=456ae169aba480141c43616eca385605aa1911d4;hp=2e7d4b68b586332b0a31e1a29f1278aa5b3a36c0;hpb=606b0257ffee320419266ecf7a58e3bc1e8a7e62;p=friendica.git diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 2e7d4b68b5..cbe370a4aa 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -653,9 +653,9 @@ class Contact 'nick' => $user['nickname'], 'pubkey' => $user['pubkey'], 'prvkey' => $user['prvkey'], - 'photo' => User::getAvatarUrlForId($user['uid']), - 'thumb' => User::getAvatarUrlForId($user['uid'], Proxy::SIZE_THUMB), - 'micro' => User::getAvatarUrlForId($user['uid'], Proxy::SIZE_MICRO), + 'photo' => User::getAvatarUrl($user), + 'thumb' => User::getAvatarUrl($user, Proxy::SIZE_THUMB), + 'micro' => User::getAvatarUrl($user, Proxy::SIZE_MICRO), 'blocked' => 0, 'pending' => 0, 'url' => DI::baseUrl() . '/profile/' . $user['nickname'], @@ -709,7 +709,7 @@ class Contact return false; } - $fields = ['nickname', 'page-flags', 'account-type', 'prvkey', 'pubkey']; + $fields = ['uid', 'nickname', 'page-flags', 'account-type', 'prvkey', 'pubkey']; $user = DBA::selectFirst('user', $fields, ['uid' => $uid, 'account_expired' => false]); if (!DBA::isResult($user)) { return false; @@ -768,7 +768,7 @@ class Contact $fields['micro'] = self::getDefaultAvatar($fields, Proxy::SIZE_MICRO); } - $fields['avatar'] = User::getAvatarUrlForId($uid); + $fields['avatar'] = User::getAvatarUrl($user); $fields['forum'] = $user['page-flags'] == User::PAGE_FLAGS_COMMUNITY; $fields['prv'] = $user['page-flags'] == User::PAGE_FLAGS_PRVGROUP; $fields['unsearchable'] = !$profile['net-publish']; @@ -795,8 +795,8 @@ class Contact // Update the profile $fields = [ - 'photo' => User::getAvatarUrlForId($uid), - 'thumb' => User::getAvatarUrlForId($uid, Proxy::SIZE_THUMB) + 'photo' => User::getAvatarUrl($user), + 'thumb' => User::getAvatarUrl($user, Proxy::SIZE_THUMB) ]; DBA::update('profile', $fields, ['uid' => $uid]); @@ -830,17 +830,17 @@ class Contact * Sends an unfriend message. Removes the contact for two-way unfriending or sharing only protocols (feed an mail) * * @param array $user User unfriending - * @param array $contact Contact unfriended + * @param array $contact Contact (uid != 0) unfriended * @param boolean $two_way Revoke eventual inbound follow as well - * @return bool|null true if successful, false if not, null if no action was performed + * @return bool|null true if successful, false if not, null if no remote action was performed * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function terminateFriendship(array $user, array $contact, bool $two_way = false): bool + public static function terminateFriendship(array $user, array $contact): ?bool { - $result = Protocol::terminateFriendship($user, $contact, $two_way); + $result = Protocol::terminateFriendship($user, $contact); - if ($two_way || in_array($contact['network'], [Protocol::FEED, Protocol::MAIL])) { + if ($contact['rel'] == Contact::SHARING || in_array($contact['network'], [Protocol::FEED, Protocol::MAIL])) { self::remove($contact['id']); } else { self::update(['rel' => Contact::FOLLOWER], ['id' => $contact['id']]); @@ -872,7 +872,11 @@ class Contact // A null value here means the remote network doesn't support explicit follow revocation, we can still // break the locally recorded relationship if ($result !== false) { - DBA::update('contact', ['rel' => $contact['rel'] == self::FRIEND ? self::SHARING : self::NOTHING], ['id' => $contact['id']]); + if ($contact['rel'] == self::FRIEND) { + self::update(['rel' => self::SHARING], ['id' => $contact['id']]); + } else { + self::remove($contact['id']); + } } return $result; @@ -994,7 +998,6 @@ class Contact $pm_url = ''; $status_link = ''; $photos_link = ''; - $contact_drop_link = ''; $poke_link = ''; if ($uid == 0) { @@ -1046,10 +1049,6 @@ class Contact $posts_link = DI::baseUrl() . '/contact/' . $contact['id'] . '/conversations'; - if (!$contact['self']) { - $contact_drop_link = DI::baseUrl() . '/contact/' . $contact['id'] . '/drop?confirm=1'; - } - $follow_link = ''; $unfollow_link = ''; if (!$contact['self'] && Protocol::supportsFollow($contact['network'])) { @@ -1060,10 +1059,6 @@ class Contact } } - if (!empty($follow_link) || !empty($unfollow_link)) { - $contact_drop_link = ''; - } - /** * Menu array: * "name" => [ "Label", "link", (bool)Should the link opened in a new tab? ] @@ -1083,7 +1078,6 @@ class Contact 'photos' => [DI::l10n()->t('View Photos') , $photos_link , true], 'network' => [DI::l10n()->t('Network Posts') , $posts_link , false], 'edit' => [DI::l10n()->t('View Contact') , $contact_url , false], - 'drop' => [DI::l10n()->t('Drop Contact') , $contact_drop_link, false], 'pm' => [DI::l10n()->t('Send PM') , $pm_url , false], 'poke' => [DI::l10n()->t('Poke') , $poke_link , false], 'follow' => [DI::l10n()->t('Connect/Follow'), $follow_link , true], @@ -1370,12 +1364,13 @@ class Contact * @param bool $thread_mode * @param int $update Update mode * @param int $parent Item parent ID for the update mode + * @param bool $only_media Only display media content * @return string posts in HTML * @throws \Exception */ - public static function getPostsFromUrl($contact_url, $thread_mode = false, $update = 0, $parent = 0) + public static function getPostsFromUrl($contact_url, $thread_mode = false, $update = 0, $parent = 0, bool $only_media = false) { - return self::getPostsFromId(self::getIdForURL($contact_url), $thread_mode, $update, $parent); + return self::getPostsFromId(self::getIdForURL($contact_url), $thread_mode, $update, $parent, $only_media); } /** @@ -1384,14 +1379,13 @@ class Contact * @param int $cid Contact ID * @param bool $thread_mode * @param int $update Update mode - * @param int $parent Item parent ID for the update mode + * @param int $parent Item parent ID for the update mode + * @param bool $only_media Only display media content * @return string posts in HTML * @throws \Exception */ - public static function getPostsFromId($cid, $thread_mode = false, $update = 0, $parent = 0) + public static function getPostsFromId($cid, $thread_mode = false, $update = 0, $parent = 0, bool $only_media = false) { - $a = DI::app(); - $contact = DBA::selectFirst('contact', ['contact-type', 'network'], ['id' => $cid]); if (!DBA::isResult($contact)) { return ''; @@ -1422,6 +1416,11 @@ class Contact } } + if ($only_media) { + $condition = DBA::mergeConditions($condition, ["`uri-id` IN (SELECT `uri-id` FROM `post-media` WHERE `type` IN (?, ?, ?))", + Post\Media::AUDIO, Post\Media::IMAGE, Post\Media::VIDEO]); + } + if (DI::mode()->isMobile()) { $itemsPerPage = DI::pConfig()->get(local_user(), 'system', 'itemspage_mobile_network', DI::config()->get('system', 'itemspage_network_mobile')); @@ -1723,19 +1722,22 @@ class Contact * Get avatar link for given contact id * * @param integer $cid contact id - * @param string $size One of the ProxyUtils::SIZE_* constants + * @param string $size One of the Proxy::SIZE_* constants * @param string $updated Contact update date * @return string avatar link */ - public static function getAvatarUrlForId(int $cid, string $size = '', string $updated = ''):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 - if (empty($updated)) { - $contact = self::getById($cid, ['updated']); - $updated = $contact['updated'] ?? ''; + if (empty($updated) || empty($guid)) { + $account = DBA::selectFirst('account-user-view', ['updated', 'guid'], ['id' => $cid]); + $updated = $account['updated'] ?? ''; + $guid = $account['guid'] ?? ''; } + $guid = urlencode($guid); + $url = DI::baseUrl() . '/photo/contact/'; switch ($size) { case Proxy::SIZE_MICRO: @@ -1754,7 +1756,7 @@ class Contact $url .= Proxy::PIXEL_LARGE . '/'; break; } - return $url . $cid . ($updated ? '?ts=' . strtotime($updated) : ''); + return $url . ($guid ?: $cid) . ($updated ? '?ts=' . strtotime($updated) : ''); } /** @@ -1762,7 +1764,7 @@ class Contact * * @param string $url contact url * @param integer $uid user id - * @param string $size One of the ProxyUtils::SIZE_* constants + * @param string $size One of the Proxy::SIZE_* constants * @return string avatar link */ public static function getAvatarUrlForUrl(string $url, int $uid, string $size = ''):string @@ -1777,19 +1779,22 @@ class Contact * Get header link for given contact id * * @param integer $cid contact id - * @param string $size One of the ProxyUtils::SIZE_* constants + * @param string $size One of the Proxy::SIZE_* constants * @param string $updated Contact update date * @return string header link */ - public static function getHeaderUrlForId(int $cid, string $size = '', string $updated = ''):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 - if (empty($updated)) { - $contact = self::getById($cid, ['updated']); - $updated = $contact['updated'] ?? ''; + if (empty($updated) || empty($guid)) { + $account = DBA::selectFirst('account-user-view', ['updated', 'guid'], ['id' => $cid]); + $updated = $account['updated'] ?? ''; + $guid = $account['guid'] ?? ''; } + $guid = urlencode($guid); + $url = DI::baseUrl() . '/photo/header/'; switch ($size) { case Proxy::SIZE_MICRO: @@ -1809,7 +1814,7 @@ class Contact break; } - return $url . $cid . ($updated ? '?ts=' . strtotime($updated) : ''); + return $url . ($guid ?: $cid) . ($updated ? '?ts=' . strtotime($updated) : ''); } /** @@ -2185,7 +2190,7 @@ class Contact } $update = false; - $guid = $ret['guid'] ?? ''; + $guid = ($ret['guid'] ?? '') ?: Item::guidFromUri($ret['url'], parse_url($ret['url'], PHP_URL_HOST)); // make sure to not overwrite existing values with blank entries except some technical fields $keep = ['batch', 'notify', 'poll', 'request', 'confirm', 'poco', 'baseurl']; @@ -2213,6 +2218,8 @@ class Contact self::updateAvatar($id, $ret['photo'], $update); } + $uriid = ItemURI::insert(['uri' => $ret['url'], 'guid' => $guid]); + if (!$update) { self::updateContact($id, $uid, $contact['url'], $ret['url'], ['failed' => false, 'last-update' => $updated, 'success_update' => $updated]); @@ -2231,12 +2238,7 @@ class Contact return true; } - if (empty($guid)) { - $ret['uri-id'] = ItemURI::getIdByURI($ret['url']); - } else { - $ret['uri-id'] = ItemURI::insert(['uri' => $ret['url'], 'guid' => $guid]); - } - + $ret['uri-id'] = $uriid; $ret['nurl'] = Strings::normaliseLink($ret['url']); $ret['updated'] = $updated; $ret['failed'] = false; @@ -2706,7 +2708,7 @@ class Contact // Ensure to always have the correct network type, independent from the connection request method self::updateFromProbe($contact['id']); - Post\UserNotification::insertNotication($contact['id'], Verb::getID(Activity::FOLLOW), $importer['uid']); + Post\UserNotification::insertNotification($contact['id'], Activity::FOLLOW, $importer['uid']); return true; } else { @@ -2737,7 +2739,7 @@ class Contact self::updateAvatar($contact_id, $photo, true); - Post\UserNotification::insertNotication($contact_id, Verb::getID(Activity::FOLLOW), $importer['uid']); + Post\UserNotification::insertNotification($contact_id, Activity::FOLLOW, $importer['uid']); $contact_record = DBA::selectFirst('contact', ['id', 'network', 'name', 'url', 'photo'], ['id' => $contact_id]);