]> git.mxchange.org Git - friendica.git/blobdiff - src/Content/Conversation.php
Remove DI dependency in Object\Api\Mastodon\Instance
[friendica.git] / src / Content / Conversation.php
index 34f3b923c2914a7b4dc8f37c36e316c58465e09a..517a364b6e71840b8de299ab004df5275f406e17 100644 (file)
@@ -251,19 +251,21 @@ class Conversation
        /**
         * Format the activity text for an item/photo/video
         *
-        * @param array  $links = array of pre-linked names of actors
-        * @param string $verb  = one of 'like, 'dislike', 'attendyes', 'attendno', 'attendmaybe'
-        * @param int    $id    = item id
+        * @param array  $links    array of pre-linked names of actors
+        * @param string $verb     one of 'like, 'dislike', 'attendyes', 'attendno', 'attendmaybe'
+        * @param int    $id       item id
+        * @param string $activity Activity URI
+        * @param array  $emojis   Array with emoji reactions
         * @return string formatted text
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
-       public function formatActivity(array $links, string $verb, int $id): string
+       public function formatActivity(array $links, string $verb, int $id, string $activity, array $emojis): string
        {
                $this->profiler->startRecording('rendering');
                $expanded = '';
 
                $phrase = $this->getLikerPhrase($verb, $links);
-               $total  = count($links);
+               $total  = max(count($links), $emojis[$activity]['total'] ?? 0);
 
                if ($total > 1) {
                        $spanatts  = "class=\"btn btn-link fakelink\" onclick=\"openClose('{$verb}list-$id');\"";
@@ -495,6 +497,7 @@ class Conversation
                                        . (!empty($_GET['cmin'])      ? '&cmin='      . rawurlencode($_GET['cmin'])      : '')
                                        . (!empty($_GET['cmax'])      ? '&cmax='      . rawurlencode($_GET['cmax'])      : '')
                                        . (!empty($_GET['file'])      ? '&file='      . rawurlencode($_GET['file'])      : '')
+                                       . (!empty($_GET['channel'])   ? '&channel='   . rawurlencode($_GET['channel'])   : '')
                                        . (!empty($_GET['no_sharer']) ? '&no_sharer=' . rawurlencode($_GET['no_sharer']) : '')
                                        . (!empty($_GET['accounttype']) ? '&accounttype=' . rawurlencode($_GET['accounttype']) : '')
                                        . "'; </script>\r\n";
@@ -566,7 +569,7 @@ class Conversation
                        $live_update_div = '<div id="live-search"></div>' . "\r\n";
                }
 
-               $page_dropping = $this->session->getLocalUserId() && $this->session->getLocalUserId() == $uid && $mode != self::MODE_SEARCH;
+               $page_dropping = $this->session->getLocalUserId() && $this->pConfig->get($this->session->getLocalUserId(), 'system', 'show_page_drop', true) && ($this->session->getLocalUserId() == $uid && $mode != self::MODE_SEARCH);
 
                if (!$update) {
                        $_SESSION['return_path'] = $this->args->getQueryString();
@@ -888,8 +891,10 @@ class Conversation
                        $condition['author-hidden'] = false;
                }
 
-               if ($this->config->get('system', 'emoji_activities')) {
-                       $emojis = $this->getEmojis($uriids);
+               $emojis      = $this->getEmojis($uriids);
+               $quoteshares = $this->getQuoteShares($uriids);
+
+               if (!$this->config->get('system', 'legacy_activities')) {
                        $condition = DBA::mergeConditions($condition, ["(`gravity` != ? OR `origin`)", ItemModel::GRAVITY_ACTIVITY]);
                }
 
@@ -1011,7 +1016,8 @@ class Conversation
                }
 
                foreach ($items as $key => $row) {
-                       $items[$key]['emojis'] = $emojis[$key] ?? [];
+                       $items[$key]['emojis']      = $emojis[$key] ?? [];
+                       $items[$key]['quoteshares'] = $quoteshares[$key] ?? [];
 
                        $always_display = in_array($mode, [self::MODE_CONTACTS, self::MODE_CONTACT_POSTS]);
 
@@ -1055,19 +1061,24 @@ class Conversation
                ];
 
                $index_list = array_values($activity_emoji);
-               $verbs      = array_merge(array_keys($activity_emoji), [Activity::EMOJIREACT]);
+               $verbs      = array_merge(array_keys($activity_emoji), [Activity::EMOJIREACT, Activity::POST]);
 
-               $condition = DBA::mergeConditions(['parent-uri-id' => $uriids, 'gravity' => ItemModel::GRAVITY_ACTIVITY, 'verb' => $verbs], ["NOT `deleted`"]);
+               $condition = DBA::mergeConditions(['parent-uri-id' => $uriids, 'gravity' => [ItemModel::GRAVITY_ACTIVITY, ItemModel::GRAVITY_COMMENT], 'verb' => $verbs], ["NOT `deleted`"]);
                $separator = chr(255) . chr(255) . chr(255);
 
-               $sql = "SELECT `thr-parent-id`, `body`, `verb`, COUNT(*) AS `total`, GROUP_CONCAT(REPLACE(`author-name`, '" . $separator . "', ' ') SEPARATOR '" . $separator . "' LIMIT 50) AS `title` FROM `post-view` WHERE " . array_shift($condition) . " GROUP BY `thr-parent-id`, `verb`, `body`";
+               $sql = "SELECT `thr-parent-id`, `body`, `verb`, `gravity`, COUNT(*) AS `total`, GROUP_CONCAT(REPLACE(`author-name`, '" . $separator . "', ' ') SEPARATOR '" . $separator . "' LIMIT 50) AS `title` FROM `post-view` WHERE " . array_shift($condition) . " GROUP BY `thr-parent-id`, `verb`, `body`, `gravity`";
 
                $emojis = [];
 
                $rows = DBA::p($sql, $condition);
                while ($row = DBA::fetch($rows)) {
-                       $row['verb'] = $row['body'] ? Activity::EMOJIREACT : $row['verb'];
-                       $emoji       = $row['body'] ?: $activity_emoji[$row['verb']];
+                       if ($row['gravity'] == ItemModel::GRAVITY_ACTIVITY) {
+                               $row['verb'] = $row['body'] ? Activity::EMOJIREACT : $row['verb'];
+                               $emoji       = $row['body'] ?: $activity_emoji[$row['verb']];
+                       } else {
+                               $emoji = '';
+                       }
+
                        if (!isset($index_list[$emoji])) {
                                $index_list[] = $emoji;
                        }
@@ -1083,6 +1094,31 @@ class Conversation
                return $emojis;
        }
 
+       /**
+        * Fetch quote shares from the conversation
+        *
+        * @param array $uriids
+        * @return array
+        */
+       private function getQuoteShares(array $uriids): array
+       {
+               $condition = DBA::mergeConditions(['quote-uri-id' => $uriids], ["NOT `quote-uri-id` IS NULL"]);
+               $separator = chr(255) . chr(255) . chr(255);
+
+               $sql = "SELECT `quote-uri-id`, COUNT(*) AS `total`, GROUP_CONCAT(REPLACE(`name`, '" . $separator . "', ' ') SEPARATOR '" . $separator . "' LIMIT 50) AS `title` FROM `post-content` INNER JOIN `post` ON `post`.`uri-id` = `post-content`.`uri-id` INNER JOIN `contact` ON `post`.`author-id` = `contact`.`id` WHERE " . array_shift($condition) . " GROUP BY `quote-uri-id`";
+
+               $quotes = [];
+
+               $rows = DBA::p($sql, $condition);
+               while ($row = DBA::fetch($rows)) {
+                       $quotes[$row['quote-uri-id']]['total'] = $row['total'];
+                       $quotes[$row['quote-uri-id']]['title'] = array_unique(explode($separator, $row['title']));
+               }
+               DBA::close($rows);
+
+               return $quotes;
+       }
+
        /**
         * Plucks the children of the given parent from a given item list.
         *