Преглед изворни кода

Update AP CreateNote Transformer

Daniel Supernault пре 6 година
родитељ
комит
86faa0f297
1 измењених фајлова са 58 додато и 53 уклоњено
  1. 58 53
      app/Transformer/ActivityPub/Verb/CreateNote.php

+ 58 - 53
app/Transformer/ActivityPub/Verb/CreateNote.php

@@ -7,59 +7,64 @@ use League\Fractal;
 
 class CreateNote extends Fractal\TransformerAbstract
 {
-    public function transform(Status $status)
-    {
-        return [
-          '@context' => [
-            'https://www.w3.org/ns/activitystreams',
-            'https://w3id.org/security/v1',
-            [
-              'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers',
-              'featured'                  => [
-                'https://pixelfed.org/ns#featured' => ['@type' => '@id'],
-              ],
-            ],
-          ],
-          'id' => $status->permalink(),
-          'type' => 'Create',
-          'actor' => $status->profile->permalink(),
-          'published' => $status->created_at->toAtomString(),
-          'to' => $status->scopeToAudience('to'),
-          'cc' => $status->scopeToAudience('cc'),
-          'object' => [
-	          'id' => $status->url(),
+	public function transform(Status $status)
+	{
 
-	          // TODO: handle other types
-	          'type' => 'Note',
+		$mentions = $status->mentions->map(function ($mention) {
+			return [
+				'type' => 'Mention',
+				'href' => $mention->permalink(),
+				'name' => $mention->emailUrl()
+			];
+		})->toArray();
+		$hashtags = $status->hashtags->map(function ($hashtag) {
+			return [
+				'type' => 'Hashtag',
+				'href' => $hashtag->url(),
+				'name' => "#{$hashtag->name}",
+			];
+		})->toArray();
+		$tags = array_merge($mentions, $hashtags);
 
-	          // XXX: CW Title
-	          'summary'   => null,
-	          'content'   => $status->rendered ?? $status->caption,
-	          'inReplyTo' => $status->in_reply_to_id ? $status->parent()->url() : null,
-
-	          // TODO: fix date format
-	          'published'    => $status->created_at->toAtomString(),
-	          'url'          => $status->url(),
-	          'attributedTo' => $status->profile->permalink(),
-	          'to'           => [
-	            // TODO: handle proper scope
-	            'https://www.w3.org/ns/activitystreams#Public',
-	          ],
-	          'cc' => [
-	            // TODO: add cc's
-	            $status->profile->permalink('/followers'),
-	          ],
-	          'sensitive'        => (bool) $status->is_nsfw,
-	          'attachment'       => $status->media->map(function ($media) {
-	              return [
-	              'type'      => 'Document',
-	              'mediaType' => $media->mime,
-	              'url'       => $media->url(),
-	              'name'      => null,
-	            ];
-	          })->toArray(),
-	          'tag' => [],
-	      ]
-      ];
-    }
+		return [
+			'@context' => [
+				'https://www.w3.org/ns/activitystreams',
+				'https://w3id.org/security/v1',
+				[
+					'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers',
+					'featured'                  => [
+						'https://pixelfed.org/ns#featured' => ['@type' => '@id'],
+					],
+				],
+			],
+			'id' 					=> $status->permalink(),
+			'type' 					=> 'Create',
+			'actor' 				=> $status->profile->permalink(),
+			'published' 			=> $status->created_at->toAtomString(),
+			'to' 					=> $status->scopeToAudience('to'),
+			'cc' 					=> $status->scopeToAudience('cc'),
+			'object' => [
+				'id' 				=> $status->url(),
+				'type' 				=> 'Note',
+				'summary'   		=> null,
+				'content'   		=> $status->rendered ?? $status->caption,
+				'inReplyTo' 		=> $status->in_reply_to_id ? $status->parent()->url() : null,
+				'published'    		=> $status->created_at->toAtomString(),
+				'url'          		=> $status->url(),
+				'attributedTo' 		=> $status->profile->permalink(),
+				'to'           		=> $status->scopeToAudience('to'),
+				'cc' 				=> $status->scopeToAudience('cc'),
+				'sensitive'       	=> (bool) $status->is_nsfw,
+				'attachment'      	=> $status->media->map(function ($media) {
+					return [
+						'type'      => 'Document',
+						'mediaType' => $media->mime,
+						'url'       => $media->url(),
+						'name'      => null,
+					];
+				})->toArray(),
+				'tag' 				=> $tags,
+			]
+		];
+	}
 }