diff --git a/app/Util/ActivityPub/Writer/BaseWriter.php b/app/Util/ActivityPub/Writer/BaseWriter.php new file mode 100644 index 000000000..639c0e3f3 --- /dev/null +++ b/app/Util/ActivityPub/Writer/BaseWriter.php @@ -0,0 +1,136 @@ +context = $context; + return $this; + } + + public function setActor($profile) + { + $this->actor = $profile; + return $this; + } + + public function setActorActivity($activity) + { + $this->activity = $activity; + $this->setPublishedAt($activity->created_at->format('Y-m-d\Th:i:s\Z')); + return $this; + } + + public function setTo($audience) + { + $this->to = $audience; + return $this; + } + + public function setCc($audience) + { + $this->cc = $audience; + return $this; + } + + public function setBcc($audience) + { + $this->bcc = $audience; + return $this; + } + + public function setPublishedAt($timestamp) + { + $this->publishedAt = $timestamp; + return $this; + } + + public function audience($audience) + { + $this->setAudience($audience); + $this->buildAudience(); + return $this; + } + + public function setAudience($audience) + { + if(in_array($audience, $this->audience)) { + $this->audience = $audience; + } + return $this; + } + + public function buildAudience() + { + switch ($this->audience) { + case 'public': + $this->to = [ + $this->context . '#Public' + ]; + $this->cc = [ + $this->actor->permalink('/followers') + ]; + break; + + case 'unlisted': + $this->to = [ + $this->actor->permalink('/followers') + ]; + $this->cc = [ + $this->context . '#Public' + ]; + break; + + case 'private': + $this->to = [ + $this->actor->permalink('/followers') + ]; + break; + + default: + # code... + break; + } + return $this; + } + + public function get() + { + return $this->getJson(); + } + + public function getJson() + { + return json_encode($this->response); + } + + public function getArray() + { + return $this->response; + } +} \ No newline at end of file