]> git.mxchange.org Git - friendica.git/blobdiff - src/Object/Post.php
Fix whitespace issue
[friendica.git] / src / Object / Post.php
index 7c73be7796086f05490c73afc7bd8e82fa847f97..17c0c1f68e640b7ec608a969e8741cd800b66e9c 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2022, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -191,7 +191,7 @@ class Post
                $pinned = '';
                $pin = false;
                $star = false;
-               $ignore = false;
+               $ignore_thread = false;
                $ispinned = 'unpinned';
                $isstarred = 'unstarred';
                $indent = '';
@@ -218,9 +218,9 @@ class Post
                if (DI::userSession()->getLocalUserId()) {
                        if (Strings::compareLink(DI::session()->get('my_url'), $item['author-link'])) {
                                if ($item['event-id'] != 0) {
-                                       $edpost = ['events/event/' . $item['event-id'], DI::l10n()->t('Edit')];
+                                       $edpost = ['calendar/event/edit/' . $item['event-id'], DI::l10n()->t('Edit')];
                                } else {
-                                       $edpost = ['editpost/' . $item['id'], DI::l10n()->t('Edit')];
+                                       $edpost = [sprintf('post/%s/edit', $item['id']), DI::l10n()->t('Edit')];
                                }
                        }
                        $dropping = in_array($item['uid'], [0, DI::userSession()->getLocalUserId()]);
@@ -246,8 +246,9 @@ class Post
                // Showing the one or the other text, depending upon if we can only hide it or really delete it.
                $delete = $origin ? DI::l10n()->t('Delete globally') : DI::l10n()->t('Remove locally');
 
-               $drop = false;
-               $block = false;
+               $drop   = false;
+               $block  = false;
+               $ignore = false;
                if (DI::userSession()->getLocalUserId()) {
                        $drop = [
                                'dropping' => $dropping,
@@ -259,9 +260,14 @@ class Post
 
                if (!$item['self'] && DI::userSession()->getLocalUserId()) {
                        $block = [
-                               'blocking' => true,
-                               'block'   => DI::l10n()->t('Block %s', $item['author-name']),
-                               'author_id'   => $item['author-id'],
+                               'blocking'  => true,
+                               'block'     => DI::l10n()->t('Block %s', $item['author-name']),
+                               'author_id' => $item['author-id'],
+                       ];
+                       $ignore = [
+                               'ignoring'  => true,
+                               'ignore'    => DI::l10n()->t('Ignore %s', $item['author-name']),
+                               'author_id' => $item['author-id'],
                        ];
                }
 
@@ -280,7 +286,7 @@ class Post
                        $profile_link = $item['author-link'];
                }
 
-               if (strpos($profile_link, 'redir/') === 0) {
+               if (strpos($profile_link, 'contact/redir/') === 0) {
                        $sparkle = ' sparkle';
                }
 
@@ -327,14 +333,14 @@ class Post
 
                if ($this->isToplevel()) {
                        if (DI::userSession()->getLocalUserId()) {
-                               $ignored = PostModel\ThreadUser::getIgnored($item['uri-id'], DI::userSession()->getLocalUserId());
-                               if ($item['mention'] || $ignored) {
-                                       $ignore = [
+                               $ignored_thread = PostModel\ThreadUser::getIgnored($item['uri-id'], DI::userSession()->getLocalUserId());
+                               if ($item['mention'] || $ignored_thread) {
+                                       $ignore_thread = [
                                                'do'        => DI::l10n()->t('Ignore thread'),
                                                'undo'      => DI::l10n()->t('Unignore thread'),
                                                'toggle'    => DI::l10n()->t('Toggle ignore status'),
-                                               'classdo'   => $ignored ? 'hidden' : '',
-                                               'classundo' => $ignored ? '' : 'hidden',
+                                               'classdo'   => $ignored_thread ? 'hidden' : '',
+                                               'classundo' => $ignored_thread ? '' : 'hidden',
                                                'ignored'   => DI::l10n()->t('Ignored'),
                                        ];
                                }
@@ -518,15 +524,17 @@ class Post
                        'pinned'          => $pinned,
                        'isstarred'       => $isstarred,
                        'star'            => $star,
-                       'ignore'          => $ignore,
+                       'ignore'          => $ignore_thread,
                        'tagger'          => $tagger,
                        'filer'           => $filer,
                        'language'        => $languages,
                        'drop'            => $drop,
                        'block'           => $block,
+                       'ignore_author'   => $ignore,
                        'vote'            => $buttons,
                        'like_html'       => $responses['like']['output'],
                        'dislike_html'    => $responses['dislike']['output'],
+                       'emojis'          => $this->getEmojis($item),
                        'responses'       => $responses,
                        'switchcomment'   => DI::l10n()->t('Comment'),
                        'reply_label'     => DI::l10n()->t('Reply to %s', $profile_name),
@@ -585,20 +593,78 @@ class Post
                        }
                }
 
+               // Copy values/set defaults
                $result['total_comments_num'] = $this->isToplevel() ? $total_children : 0;
+               $result['private']            = $item['private'];
+               $result['toplevel']           = ($this->isToplevel() ? 'toplevel_item' : '');
+               $result['flatten']            = !$this->isThreaded();
+               $result['threaded']           = $this->isThreaded();
 
-               $result['private'] = $item['private'];
-               $result['toplevel'] = ($this->isToplevel() ? 'toplevel_item' : '');
+               return $result;
+       }
 
-               if ($this->isThreaded()) {
-                       $result['flatten'] = false;
-                       $result['threaded'] = true;
-               } else {
-                       $result['flatten'] = true;
-                       $result['threaded'] = false;
+       /**
+        * Fetch emojis
+        *
+        * @param array $item
+        * @return array
+        */
+       private function getEmojis(array $item): array
+       {
+               if (empty($item['emojis'])) {
+                       return [];
                }
 
-               return $result;
+               $emojis = [];
+               foreach ($item['emojis'] as $index => $element) {
+                       $actors = implode(', ', $element['title']);
+                       switch ($element['verb']) {
+                               case Activity::ANNOUNCE:
+                                       $title = DI::l10n()->t('Reshared by: %s', $actors);
+                                       $icon  = ['fa' => 'fa-retweet', 'icon' => 'icon-retweet'];
+                                       break;
+
+                               case Activity::VIEW:
+                                       $title = DI::l10n()->t('Viewed by: %s', $actors);
+                                       $icon  = ['fa' => 'fa-eye', 'icon' => 'icon-eye-open'];
+                                       break;
+
+                               case Activity::LIKE:
+                                       $title = DI::l10n()->t('Liked by: %s', $actors);
+                                       $icon  = ['fa' => 'fa-thumbs-up', 'icon' => 'icon-thumbs-up'];
+                                       break;
+
+                               case Activity::DISLIKE:
+                                       $title = DI::l10n()->t('Disliked by: %s', $actors);
+                                       $icon  = ['fa' => 'fa-thumbs-down', 'icon' => 'icon-thumbs-down'];
+                                       break;
+
+                               case Activity::ATTEND:
+                                       $title = DI::l10n()->t('Attended by: %s', $actors);
+                                       $icon  = ['fa' => 'fa-check', 'icon' => 'icon-ok'];
+                                       break;
+
+                               case Activity::ATTENDMAYBE:
+                                       $title = DI::l10n()->t('Maybe attended by: %s', $actors);
+                                       $icon  = ['fa' => 'fa-question', 'icon' => 'icon-question'];
+                                       break;
+
+                               case Activity::ATTENDNO:
+                                       $title = DI::l10n()->t('Not attended by: %s', $actors);
+                                       $icon  = ['fa' => 'fa-times', 'icon' => 'icon-remove'];
+                                       break;
+
+                               default:
+                                       $title = DI::l10n()->t('Reacted with %s by: %s', $element['emoji'], $actors);
+                                       $icon  = [];
+                                       break;
+                               break;
+                       }
+                       $emojis[$index] = ['emoji' => $element['emoji'], 'total' => $element['total'], 'title' => $title, 'icon' => $icon];
+               }
+               ksort($emojis);
+
+               return $emojis;
        }
 
        /**
@@ -618,33 +684,32 @@ class Post
        }
 
        /**
-        * Add a child item
+        * Add a child post
         *
-        * @param Post $item The child item to add
+        * @param Post $item The child post to add
         *
-        * @return mixed
+        * @return Post|bool Last Post object or bool on any error
         * @throws \Exception
         */
        public function addChild(Post $item)
        {
-               $item_id = $item->getId();
-               if (!$item_id) {
-                       Logger::info('[ERROR] Post::addChild : Item has no ID!!');
+               if (!$item->getId()) {
+                       Logger::error('Post object has no id', ['post' => $item]);
                        return false;
                } elseif ($this->getChild($item->getId())) {
-                       Logger::info('[WARN] Post::addChild : Item already exists (' . $item->getId() . ').');
+                       Logger::warning('Post object already exists', ['post' => $item]);
                        return false;
                }
 
-               $activity = DI::activity();
-
                /*
                 * Only add what will be displayed
                 */
                if ($item->getDataValue('network') === Protocol::MAIL && DI::userSession()->getLocalUserId() != $item->getDataValue('uid')) {
+                       Logger::warning('Post object does not belong to local user', ['post' => $item, 'local_user' => DI::userSession()->getLocalUserId()]);
                        return false;
-               } elseif ($activity->match($item->getDataValue('verb'), Activity::LIKE) ||
-                         $activity->match($item->getDataValue('verb'), Activity::DISLIKE)) {
+               } elseif (DI::activity()->match($item->getDataValue('verb'), Activity::LIKE) ||
+                         DI::activity()->match($item->getDataValue('verb'), Activity::DISLIKE)) {
+                       Logger::warning('Post objects is a like/dislike', ['post' => $item]);
                        return false;
                }
 
@@ -658,7 +723,7 @@ class Post
         * Get a child by its ID
         *
         * @param integer $id The child id
-        * @return mixed
+        * @return Thread|null Thread or NULL if not found
         */
        public function getChild(int $id)
        {
@@ -747,6 +812,7 @@ class Post
         * Set conversation thread
         *
         * @param Thread|null $thread
+        *
         * @return void
         */
        public function setThread(Thread $thread = null)
@@ -785,6 +851,7 @@ class Post
         * Get a data value
         *
         * @param string $name key
+        *
         * @return mixed value on success, false on failure
         */
        public function getDataValue(string $name)
@@ -798,13 +865,14 @@ class Post
        }
 
        /**
-        * Set template
+        * Set template by name
         *
         * @param string $name Template name
-        * @return bool If template was set
+        *
+        * @return void
         * @throws InvalidArgumentException
         */
-       private function setTemplate(string $name): bool
+       private function setTemplate(string $name)
        {
                if (empty($this->available_templates[$name])) {
                        // Throw exception
@@ -812,8 +880,6 @@ class Post
                }
 
                $this->template = $this->available_templates[$name];
-
-               return true;
        }
 
        /**
@@ -939,6 +1005,7 @@ class Post
         * Get the comment box
         *
         * @param string $indent Indent value
+        *
         * @return mixed The comment box string (empty if no comment box), false on failure
         * @throws \Exception
         * @todo return false is nowhere in this method?
@@ -1049,10 +1116,10 @@ class Post
                                                $this->wall_to_wall = true;
 
                                                $owner = [
-                                                       'uid' => 0,
-                                                       'id' => $this->getDataValue('owner-id'),
+                                                       'uid'     => 0,
+                                                       'id'      => $this->getDataValue('owner-id'),
                                                        'network' => $this->getDataValue('owner-network'),
-                                                       'url' => $this->getDataValue('owner-link'),
+                                                       'url'     => $this->getDataValue('owner-link'),
                                                ];
                                                $this->owner_url = Contact::magicLinkByContact($owner);
                                        }