فهرست منبع

Update Status model

Daniel Supernault 6 سال پیش
والد
کامیت
5695cfaab5
1فایلهای تغییر یافته به همراه67 افزوده شده و 0 حذف شده
  1. 67 0
      app/Status.php

+ 67 - 0
app/Status.php

@@ -218,4 +218,71 @@ class Status extends Model
     {
         return $this->comments()->orderBy('created_at', 'desc')->take(3);
     }
+
+    public function toActivityPubObject()
+    {
+        if($this->local == false) {
+            return;
+        }
+        $profile = $this->profile;
+        $to = $this->scopeToAudience('to');
+        $cc = $this->scopeToAudience('cc');
+        return [
+            '@context' => 'https://www.w3.org/ns/activitystreams',
+            'id'    => $this->permalink(),
+            'type'  => 'Create',
+            'actor' => $profile->permalink(),
+            'published' => $this->created_at->format('c'),
+            'to' => $to,
+            'cc' => $cc,
+            'object' => [
+                'id' => $this->url(),
+                'type' => 'Note',
+                'summary' => null,
+                'inReplyTo' => null,
+                'published' => $this->created_at->format('c'),
+                'url' => $this->url(),
+                'attributedTo' => $this->profile->url(),
+                'to' => $to,
+                'cc' => $cc,
+                'sensitive' => (bool) $this->is_nsfw,
+                'content' => $this->rendered,
+                'attachment' => $this->media->map(function($media) {
+                    return [
+                        'type' => 'Document',
+                        'mediaType' => $media->mime,
+                        'url' => $media->url(),
+                        'name' => null
+                    ];
+                })
+            ]
+        ];
+    }
+
+    public function scopeToAudience($audience)
+    {
+        if(!in_array($audience, ['to', 'cc']) || $this->local == false) { 
+            return;
+        }
+        $res = [];
+        $res['to'] = [];
+        $res['cc'] = [];
+        $scope = $this->scope;
+        switch ($scope) {
+            case 'public':
+                $res['to'] = [
+                    "https://www.w3.org/ns/activitystreams#Public"
+                ];
+                $res['cc'] = [
+                    $this->profile->permalink('/followers')
+                ];
+                break;
+            
+            default:
+                # code...
+                break;
+        }
+        return $res[$audience];
+    }
+
 }