]> git.mxchange.org Git - friendica.git/commitdiff
Fix Diaspora outgoing implicit mention
authorHypolite Petovan <hypolite@mrpetovan.com>
Sat, 23 Feb 2019 04:38:59 +0000 (23:38 -0500)
committerHypolite Petovan <hypolite@mrpetovan.com>
Sat, 23 Feb 2019 22:32:12 +0000 (17:32 -0500)
- Use name instead of nick for implicit mention
- Rename $parent to $toplevel_item in Diaspora::constructComment
- Use thread parent to retrieve the expected mention instead of the top level item

src/Protocol/Diaspora.php

index 3687fb9d4b537e75e4ef0dc30c1d8f00c2c3c141..ca66aa0a67d73e820999fe21f5809952f2043304 100644 (file)
@@ -3675,7 +3675,7 @@ class Diaspora
                        && !strstr($body, $profile['addr'])
                        && !strstr($body, $profile_url)
                ) {
-                       $body = '@[url=' . $profile_url . ']' . $profile['nick'] . '[/url] ' . $body;
+                       $body = '@[url=' . $profile_url . ']' . $profile['name'] . '[/url] ' . $body;
                }
 
                return $body;
@@ -3776,7 +3776,7 @@ class Diaspora
         * @param array $item  The item that will be exported
         * @param array $owner the array of the item owner
         *
-        * @return array The data for a comment
+        * @return array|false The data for a comment
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        private static function constructComment(array $item, array $owner)
@@ -3788,30 +3788,40 @@ class Diaspora
                        return $result;
                }
 
-               $parent = Item::selectFirst(['guid', 'author-link'], ['id' => $item["parent"], 'parent' => $item["parent"]]);
-               if (!DBA::isResult($parent)) {
+               $toplevel_item = Item::selectFirst(['guid', 'author-link'], ['id' => $item["parent"], 'parent' => $item["parent"]]);
+               if (!DBA::isResult($toplevel_item)) {
+                       Logger::error('Missing parent conversation item', ['parent' => $item["parent"]]);
                        return false;
                }
 
+               $thread_parent_item = $toplevel_item;
+               if ($item['thr-parent'] != $item['parent-uri']) {
+                       $thread_parent_item = Item::selectFirst(['guid', 'author-link'], ['uri' => $item['thr-parent'], 'uid' => $item['uid']]);
+               }
+
                $body = $item["body"];
 
-               if (empty($item['uid']) || !Feature::isEnabled($item['uid'], 'explicit_mentions')) {
-                       $body = self::prependParentAuthorMention($body, $parent['author-link']);
+               if ((empty($item['uid']) || !Feature::isEnabled($item['uid'], 'explicit_mentions'))
+                       && !Config::get('system', 'disable_implicit_mentions')
+               ) {
+                       $body = self::prependParentAuthorMention($body, $thread_parent_item['author-link']);
                }
 
                $text = html_entity_decode(BBCode::toMarkdown($body));
                $created = DateTimeFormat::utc($item["created"], DateTimeFormat::ATOM);
 
-               $comment = ["author" => self::myHandle($owner),
-                               "guid" => $item["guid"],
-                               "created_at" => $created,
-                               "parent_guid" => $parent["guid"],
-                               "text" => $text,
-                               "author_signature" => ""];
+               $comment = [
+                       "author"      => self::myHandle($owner),
+                       "guid"        => $item["guid"],
+                       "created_at"  => $created,
+                       "parent_guid" => $toplevel_item["guid"],
+                       "text"        => $text,
+                       "author_signature" => ""
+               ];
 
                // Send the thread parent guid only if it is a threaded comment
                if ($item['thr-parent'] != $item['parent-uri']) {
-                       $comment['thread_parent_guid'] = self::getGuidFromUri($item['thr-parent'], $item['uid']);
+                       $comment['thread_parent_guid'] = $thread_parent_item['guid'];
                }
 
                Cache::set($cachekey, $comment, Cache::QUARTER_HOUR);