]> git.mxchange.org Git - friendica.git/commitdiff
Implementation of FEP-e232 for quoted posts
authorMichael <heluecht@pirati.ca>
Sun, 24 Mar 2024 06:05:37 +0000 (06:05 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 24 Mar 2024 06:05:37 +0000 (06:05 +0000)
src/Content/Item.php
src/Protocol/ActivityPub/Receiver.php
src/Protocol/ActivityPub/Transmitter.php

index bfc3979c5a6b8c8643460c7056fb613f2dd9c345..6c3f661476975cde098fe3b3fa6bfe7b0879f3f6 100644 (file)
@@ -800,14 +800,14 @@ class Item
         */
        public function addShareLink(string $body, int $quote_uri_id): string
        {
-               $post = Post::selectFirstPost(['uri', 'plink'], ['uri-id' => $quote_uri_id]);
+               $post = Post::selectFirstPost(['uri'], ['uri-id' => $quote_uri_id]);
                if (empty($post)) {
                        return $body;
                }
 
                $body = BBCode::removeSharedData($body);
 
-               $body .= "\n♲ " . ($post['plink'] ?: $post['uri']);
+               $body .= "\nRE: " . $post['uri'];
 
                return $body;
        }
index fd5e05fb6208f704405cfba8866c938df16dbe63..2dd6a7691340a9d30426749d9d792f996327e4c3 100644 (file)
@@ -1577,7 +1577,8 @@ class Receiver
                        $element = [
                                'type' => str_replace('as:', '', JsonLD::fetchElement($tag, '@type') ?? ''),
                                'href' => JsonLD::fetchElement($tag, 'as:href', '@id'),
-                               'name' => JsonLD::fetchElement($tag, 'as:name', '@value')
+                               'name' => JsonLD::fetchElement($tag, 'as:name', '@value'),
+                               'mediaType' => JsonLD::fetchElement($tag, 'as:mediaType', '@value')
                        ];
 
                        if (empty($element['type'])) {
@@ -2094,12 +2095,18 @@ class Receiver
                }
 
                // Support for quoted posts (Pleroma, Fedibird and Misskey)
-               $object_data['quote-url'] = JsonLD::fetchElement($object, 'as:quoteUrl', '@value');
+               $object_data['quote-url'] = JsonLD::fetchElement($object, 'as:quoteUrl', '@id');
                if (empty($object_data['quote-url'])) {
-                       $object_data['quote-url'] = JsonLD::fetchElement($object, 'fedibird:quoteUri', '@value');
+                       $object_data['quote-url'] = JsonLD::fetchElement($object, 'fedibird:quoteUri', '@id');
                }
                if (empty($object_data['quote-url'])) {
-                       $object_data['quote-url'] = JsonLD::fetchElement($object, 'misskey:_misskey_quote', '@value');
+                       $object_data['quote-url'] = JsonLD::fetchElement($object, 'misskey:_misskey_quote', '@id');
+               }
+
+               foreach ($object_data['tags'] as $tag) {
+                       if (HTTPSignature::isValidContentType($tag['mediaType'] ?? '', $tag['href'])) {
+                               $object_data['quote-url'] = $tag['href'];
+                       }
                }
 
                // Misskey adds some data to the standard "content" value for quoted posts for backwards compatibility.
index f322278574cfabce0a89cb794d152f50d29b17af..1ba98b2f887df4a2828be09bc2aae52dfd808b39 100644 (file)
@@ -1589,15 +1589,14 @@ class Transmitter
                        $tags[] = ['type' => 'Mention', 'href' => $announce['actor']['url'], 'name' => '@' . $announce['actor']['addr']];
                }
 
-               // @see https://codeberg.org/fediverse/fep/src/branch/main/feps/fep-e232.md
+               // @see https://codeberg.org/fediverse/fep/src/branch/main/fep/e232/fep-e232.md
                if (!empty($quote_url)) {
-                       // Currently deactivated because of compatibility issues with Pleroma
-                       //$tags[] = [
-                       //      'type'      => 'Link',
-                       //      'mediaType' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"',
-                       //      'href'      => $quote_url,
-                       //      'name'      => '♲ ' . BBCode::convertForUriId($item['uri-id'], $quote_url, BBCode::ACTIVITYPUB)
-                       //];
+                       $tags[] = [
+                               'type'      => 'Link',
+                               'mediaType' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"',
+                               'href'      => $quote_url,
+                               'name'      => 'RE: ' . $quote_url,
+                       ];
                }
 
                return $tags;
@@ -1862,6 +1861,7 @@ class Transmitter
                        if (!empty($item['quote-uri-id']) && ($item['quote-uri-id'] != $item['uri-id'])) {
                                if (Post::exists(['uri-id' => $item['quote-uri-id'], 'network' => [Protocol::ACTIVITYPUB, Protocol::DFRN]])) {
                                        $real_quote = true;
+                                       $data['_misskey_content'] = BBCode::removeSharedData($body);
                                        $data['quoteUrl'] = $item['quote-uri'];
                                        $body = DI::contentItem()->addShareLink($body, $item['quote-uri-id']);
                                } else {