]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Item/Display.php
Merge pull request #12479 from MrPetovan/bug/deprecated
[friendica.git] / src / Module / Item / Display.php
index 7a0e589f82efbe3ee6dce6d2e751b86b6f050104..01bf9a5587ec263946e7866b99670254022b168d 100644 (file)
@@ -17,7 +17,6 @@
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  *
- * See update_profile.php for documentation
  */
 
 namespace Friendica\Module\Item;
@@ -47,6 +46,9 @@ use Friendica\Network\HTTPException;
 use Friendica\Content\Widget;
 use Psr\Log\LoggerInterface;
 
+/**
+ * Controller to display one item and its conversation
+ */
 class Display extends BaseModule
 {
        /** @var App\Page */
@@ -134,11 +136,12 @@ class Display extends BaseModule
                }
 
                if ($item['gravity'] != Item::GRAVITY_PARENT) {
-                       $parent = Post::selectFirstForUser($itemUid, $fields, [
+                       $parent = Post::selectFirst($fields, [
                                'uid'    => [0, $itemUid],
                                'uri-id' => $item['parent-uri-id']
                        ], ['order' => ['uid' => true]]);
-                       $item   = $parent ?: $item;
+
+                       $item = $parent ?: $item;
                }
 
                if (!$this->pConfig->get($this->session->getLocalUserId(), 'system', 'detailed_notif')) {
@@ -193,8 +196,7 @@ class Display extends BaseModule
 
        protected function getDisplayData(array $item, bool $update = false, int $updateUid = 0, bool $force = false): string
        {
-               $isRemoteContact = false;
-               $itemUid         = $this->session->getLocalUserId();
+               $itemUid = $this->session->getLocalUserId();
 
                $parent = null;
                if (!$this->session->getLocalUserId() && !empty($item['parent-uri-id'])) {
@@ -203,8 +205,7 @@ class Display extends BaseModule
 
                if (!empty($parent)) {
                        $pageUid         = $parent['uid'];
-                       $isRemoteContact = $this->session->getRemoteContactID($pageUid);
-                       if ($isRemoteContact) {
+                       if ($this->session->getRemoteContactID($pageUid)) {
                                $itemUid = $parent['uid'];
                        }
                } else {
@@ -212,24 +213,21 @@ class Display extends BaseModule
                }
 
                if (!empty($pageUid) && ($pageUid != $this->session->getLocalUserId())) {
-                       $page_user = User::getById($pageUid, ['hidewall']);
+                       $page_user = User::getById($pageUid, ['nickname', 'hidewall']);
                }
 
-               $is_owner = $this->session->getLocalUserId() && (in_array($pageUid, [$this->session->getLocalUserId(), 0]));
-
-               if (!empty($page_user['hidewall']) && !$is_owner && !$isRemoteContact) {
-                       throw new HTTPException\ForbiddenException($this->t('Access to this profile has been restricted.'));
+               if (!empty($page_user['hidewall']) && !$this->session->isAuthenticated()) {
+                       $this->baseUrl->redirect('profile/' . $page_user['nickname'] . '/restricted');
                }
 
                $sql_extra = Item::getPermissionsSQLByUserId($pageUid);
 
                if ($this->session->getLocalUserId() && ($this->session->getLocalUserId() == $pageUid)) {
-                       $condition = [
+                       $unseen = Post::exists([
                                'parent-uri-id' => $item['parent-uri-id'],
                                'uid'           => $this->session->getLocalUserId(),
                                'unseen'        => true
-                       ];
-                       $unseen    = Post::exists($condition);
+                       ]);
                } else {
                        $unseen = false;
                }
@@ -239,12 +237,23 @@ class Display extends BaseModule
                }
 
                $condition = ["`uri-id` = ? AND `uid` IN (0, ?) " . $sql_extra, $item['uri-id'], $itemUid];
-               $fields    = ['parent-uri-id', 'body', 'title', 'author-name', 'author-avatar', 'plink', 'author-id',
-                                         'owner-id', 'contact-id'];
-               $item      = Post::selectFirstForUser($pageUid, $fields, $condition);
+               $fields    = [
+                       'parent-uri-id', 'body', 'title', 'author-name', 'author-avatar', 'plink', 'author-id',
+                       'owner-id', 'contact-id'
+               ];
+
+               $item = Post::selectFirstForUser($pageUid, $fields, $condition);
 
                if (empty($item)) {
-                       throw new HTTPException\NotFoundException($this->t('The requested item doesn\'t exist or has been deleted.'));
+                       $this->page['aside'] = '';
+                       throw new HTTPException\NotFoundException($this->t('Unfortunately, the requested conversation isn\'t available to you.</p>
+<p>Possible reasons include:</p>
+<ul>
+       <li>The top-level post isn\'t visible.</li>
+       <li>The top-level post was deleted.</li>
+       <li>The node has blocked the top-level author or the author of the shared post.</li>
+       <li>You have ignored or blocked the top-level author or the author of the shared post.</li>
+</ul><p>'));
                }
 
                $item['uri-id'] = $item['parent-uri-id'];
@@ -262,6 +271,8 @@ class Display extends BaseModule
 
                $output = '';
 
+               $is_owner = $this->session->getLocalUserId() && (in_array($pageUid, [$this->session->getLocalUserId(), 0]));
+
                // We need the editor here to be able to reshare an item.
                if ($is_owner && !$update) {
                        $output .= $this->conversation->statusEditor([], 0, true);
@@ -277,11 +288,10 @@ class Display extends BaseModule
        {
                if (Post::exists(['uri-id' => $uriId, 'private' => [Item::PUBLIC, Item::UNLISTED]])) {
                        // For the atom feed the nickname doesn't matter at all, we only need the item id.
-                       $alternate              = sprintf('display/feed-item/%s.atom', $uriId);
-                       $conversation           = sprintf('display/feed-item/%s/conversation.atom', $parentUriId);
-                       $this->page['htmlhead'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('display-head.tpl'),
-                               ['$alternate'    => $alternate,
-                                '$conversation' => $conversation]);
+                       $this->page['htmlhead'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('display-head.tpl'), [
+                               '$alternate'    => sprintf('display/feed-item/%s.atom', $uriId),
+                               '$conversation' => sprintf('display/feed-item/%s/conversation.atom', $parentUriId)
+                       ]);
                }
        }
 
@@ -317,8 +327,9 @@ class Display extends BaseModule
 
                $page = $this->page;
 
-               if (Contact::exists(['unsearchable' => true,
-                                                        'id'           => [$item['contact-id'], $item['author-id'], $item['owner-id']]])) {
+               if (Contact::exists([
+                       'unsearchable' => true, 'id' => [$item['contact-id'], $item['author-id'], $item['owner-id']]
+               ])) {
                        $page['htmlhead'] .= "<meta content=\"noindex, noarchive\" name=\"robots\" />\n";
                }