]> 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 bd3c6d774b8d55abe702604c3c7176f4a75a7c16..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
@@ -367,7 +369,7 @@ 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;';
@@ -407,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';
@@ -427,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'])) {
@@ -544,7 +552,7 @@ class Item
                                        unset($item['owner-name']);
                                        unset($item['owner-avatar']);
                                }
-       
+
                                $item['postopts'] = '';
                        }
 
@@ -669,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']  = '';
                }
@@ -695,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 {