]> git.mxchange.org Git - friendica.git/blobdiff - src/Content/Item.php
Merge pull request #13375 from MrPetovan/bug/empty-timeline
[friendica.git] / src / Content / Item.php
index 3981978f4eae6abcfbeb9a234a31f9d0b18b8c9d..163db89aa472c6b698cffb5ca92d244d9d7b4b4f 100644 (file)
@@ -34,15 +34,16 @@ use Friendica\Core\Protocol;
 use Friendica\Core\Session\Capability\IHandleUserSessions;
 use Friendica\Core\System;
 use Friendica\Database\DBA;
+use Friendica\DI;
 use Friendica\Model\Attach;
+use Friendica\Model\Circle;
 use Friendica\Model\Contact;
 use Friendica\Model\Conversation;
 use Friendica\Model\FileTag;
-use Friendica\Model\Circle;
 use Friendica\Model\Item as ItemModel;
 use Friendica\Model\Photo;
-use Friendica\Model\Tag;
 use Friendica\Model\Post;
+use Friendica\Model\Tag;
 use Friendica\Model\User;
 use Friendica\Network\HTTPException;
 use Friendica\Object\EMail\ItemCCEMail;
@@ -54,6 +55,7 @@ use Friendica\Util\ParseUrl;
 use Friendica\Util\Profiler;
 use Friendica\Util\Proxy;
 use Friendica\Util\XML;
+use GuzzleHttp\Psr7\Uri;
 
 /**
  * A content helper class for displaying items
@@ -305,18 +307,20 @@ class Item
                                }
 
                                $author_arr = [
-                                       'uid' => 0,
-                                       'id' => $item['author-id'],
+                                       'uid'     => 0,
+                                       'id'      => $item['author-id'],
                                        'network' => $item['author-network'],
-                                       'url' => $item['author-link'],
+                                       'url'     => $item['author-link'],
+                                       'alias'   => $item['author-alias'],
                                ];
                                $author  = '[url=' . Contact::magicLinkByContact($author_arr) . ']' . $item['author-name'] . '[/url]';
 
                                $author_arr = [
-                                       'uid' => 0,
-                                       'id' => $obj['author-id'],
+                                       'uid'     => 0,
+                                       'id'      => $obj['author-id'],
                                        'network' => $obj['author-network'],
-                                       'url' => $obj['author-link'],
+                                       'url'     => $obj['author-link'],
+                                       'alias'   => $obj['author-alias'],
                                ];
                                $objauthor  = '[url=' . Contact::magicLinkByContact($author_arr) . ']' . $obj['author-name'] . '[/url]';
 
@@ -365,17 +369,18 @@ class Item
        {
                $this->profiler->startRecording('rendering');
                $sub_link = $contact_url = $pm_url = $status_link = '';
-               $photos_link = $posts_link = $block_link = $ignore_link = '';
+               $photos_link = $posts_link = $block_link = $ignore_link = $collapse_link = $ignoreserver_link = '';
 
                if ($this->userSession->getLocalUserId() && $this->userSession->getLocalUserId() == $item['uid'] && $item['gravity'] == ItemModel::GRAVITY_PARENT && !$item['self'] && !$item['mention']) {
                        $sub_link = 'javascript:doFollowThread(' . $item['id'] . '); return false;';
                }
 
                $author = [
-                       'uid' => 0,
-                       'id' => $item['author-id'],
+                       'uid'     => 0,
+                       'id'      => $item['author-id'],
                        'network' => $item['author-network'],
-                       'url' => $item['author-link'],
+                       'url'     => $item['author-link'],
+                       'alias'   => $item['author-alias'],
                ];
                $profile_link = Contact::magicLinkByContact($author, $item['author-link']);
                if (strpos($profile_link, 'contact/redir/') === 0) {
@@ -404,6 +409,11 @@ class Item
                        $collapse_link = $item['self'] ? '' : $contact_url . '/collapse?t=' . $formSecurityToken;
                }
 
+               $authorBaseUri = new Uri($item['author-baseurl'] ?? '');
+               if (!empty($item['author-gsid']) && $authorBaseUri->getHost() && !DI::baseUrl()->isLocalUrl($authorBaseUri)) {
+                       $ignoreserver_link = 'settings/server/' . $item['author-gsid'] . '/ignore';
+               }
+
                if ($cid && !$item['self']) {
                        $contact_url = 'contact/' . $cid;
                        $posts_link  = $contact_url . '/posts';
@@ -424,7 +434,8 @@ class Item
                                $this->l10n->t('Send PM') => $pm_url,
                                $this->l10n->t('Block') => $block_link,
                                $this->l10n->t('Ignore') => $ignore_link,
-                               $this->l10n->t('Collapse') => $collapse_link
+                               $this->l10n->t('Collapse') => $collapse_link,
+                               $this->l10n->t("Ignore %s server", $authorBaseUri->getHost()) => $ignoreserver_link,
                        ];
 
                        if (!empty($item['language'])) {
@@ -534,6 +545,14 @@ class Item
                        $item['private'] = $private_group ? ItemModel::PRIVATE : ItemModel::UNLISTED;
 
                        if ($only_to_group) {
+                               $cdata = Contact::getPublicAndUserContactID($group_contact['id'], $item['uid']);
+                               if (!empty($cdata['user'])) {
+                                       $item['owner-id'] = $cdata['user'];
+                                       unset($item['owner-link']);
+                                       unset($item['owner-name']);
+                                       unset($item['owner-avatar']);
+                               }
+
                                $item['postopts'] = '';
                        }
 
@@ -658,14 +677,15 @@ class Item
         * Add a share block for the given item array
         *
         * @param array $item
-        * @param bool $add_media
+        * @param bool $add_media   true = Media is added to the body
+        * @param bool $for_display true = The share block is used for display purposes, false = used for connectors, transport to other systems, ...
         * @return string
         */
-       public function createSharedBlockByArray(array $item, bool $add_media = false): string
+       public function createSharedBlockByArray(array $item, bool $add_media = false, bool $for_display = false): string
        {
                if ($item['network'] == Protocol::FEED) {
                        return PageInfo::getFooterFromUrl($item['plink']);
-               } elseif (!in_array($item['network'] ?? '', Protocol::FEDERATED)) {
+               } elseif (!in_array($item['network'] ?? '', Protocol::FEDERATED) && !$for_display) {
                        $item['guid'] = '';
                        $item['uri']  = '';
                }
@@ -684,7 +704,7 @@ class Item
 
                // If it is a reshared post then reformat it to avoid display problems with two share elements
                if (!empty($shared)) {
-                       if (!empty($shared['guid']) && ($encapsulated_share = $this->createSharedPostByGuid($shared['guid'], true))) {
+                       if (($item['network'] != Protocol::BLUESKY) && !empty($shared['guid']) && ($encapsulated_share = $this->createSharedPostByGuid($shared['guid'], true))) {
                                if (!empty(BBCode::fetchShareAttributes($item['body']))) {
                                        $item['body'] = preg_replace("/\[share.*?\](.*)\[\/share\]/ism", $encapsulated_share, $item['body']);
                                } else {