Browse Source

Add ProfileOutbox Transformer

Daniel Supernault 7 năm trước cách đây
mục cha
commit
5559bcdb8f
1 tập tin đã thay đổi với 79 bổ sung0 xóa
  1. 79 0
      app/Transformer/ActivityPub/ProfileOutbox.php

+ 79 - 0
app/Transformer/ActivityPub/ProfileOutbox.php

@@ -0,0 +1,79 @@
+<?php
+
+namespace App\Transformer\ActivityPub;
+
+use App\Profile;
+use League\Fractal;
+
+class ProfileOutbox extends Fractal\TransformerAbstract
+{
+
+  public function transform(Profile $profile)
+  {
+      $count = $profile->statuses()->count();
+      $statuses = $profile->statuses()->has('media')->orderBy('id','desc')->take(20)->get()->map(function($i, $k) {
+        $item = [
+          'id'  => $i->url(),
+          // TODO: handle other types
+          'type' => 'Create',
+          'actor' => $i->profile->url(),
+          'published' => $i->created_at->toISO8601String(),
+          'to' => [
+            'https://www.w3.org/ns/activitystreams#Public'
+          ],
+          'cc' => [
+            $i->profile->permalink('/followers'),
+          ],
+          'object' => [
+            'id' => $i->url(),
+
+            // TODO: handle other types
+            'type' => 'Note',
+
+            // XXX: CW Title
+            'summary' => null,
+            'content' => $i->rendered ?? $i->caption,
+            'inReplyTo' => null,
+
+            // TODO: fix date format
+            'published' => $i->created_at->toAtomString(),
+            'url' => $i->url(),
+            'attributedTo' => $i->profile->permalink(),
+            'to' => [
+              // TODO: handle proper scope
+              'https://www.w3.org/ns/activitystreams#Public'
+            ],
+            'cc' => [
+              // TODO: add cc's
+              //"{$notice->getProfile()->getUrl()}/subscribers",
+            ],
+            'sensitive' => null,
+            'atomUri' => $i->url(),
+            'inReplyToAtomUri' => null,
+            'conversation' => $i->url(),
+            'attachment' => [
+
+              // TODO: support more than 1 attachment
+              [
+                'type' => 'Document',
+                'mediaType' => $i->firstMedia()->mime,
+                'url' => $i->firstMedia()->url(),
+                'name' => null
+              ]
+            ],
+            'tag' => []
+          ]
+        ];
+          return $item;
+      });
+
+      return [
+          '@context' => 'https://www.w3.org/ns/activitystreams',
+          'id' => $profile->permalink('/outbox'),
+          'type' => 'OrderedCollection',
+          'totalItems' => $count,
+          'orderedItems' => $statuses
+      ];
+  }
+
+}