*/ protected $casts = [ 'id' => 'string', 'uri' => 'string', 'actor_id' => 'integer', 'in_reply_to_id' => '?string', 'reblog_of_id' => '?string', 'message' => 'string', 'message_html' => 'string', 'favourites_count' => 'integer', 'reblogs_count' => 'integer', 'replies_count' => 'integer', ]; /** * Returns the note's actor */ public function getActor(): Actor { if ($this->actor_id === null) { throw new RuntimeException('Note must have an actor_id before getting actor.',); } if ($this->actor === null) { $this->actor = model('ActorModel') ->getActorById($this->actor_id); } return $this->actor; } public function getPreviewCard(): ?PreviewCard { if ($this->id === null) { throw new RuntimeException('Note must be created before getting preview_card.',); } if ($this->preview_card === null) { $this->preview_card = model('PreviewCardModel') ->getNotePreviewCard($this->id,); } return $this->preview_card; } public function getHasPreviewCard(): bool { return $this->getPreviewCard() !== null; } public function getIsReply(): bool { $this->is_reply = $this->in_reply_to_id !== null; return $this->is_reply; } /** * @return Note[] */ public function getReplies(): array { if ($this->id === null) { throw new RuntimeException('Note must be created before getting replies.',); } if ($this->replies === null) { $this->replies = (array) model('NoteModel') ->getNoteReplies($this->id,); } return $this->replies; } public function getHasReplies(): bool { return $this->getReplies() !== null; } public function getReplyToNote(): self { if ($this->in_reply_to_id === null) { throw new RuntimeException('Note is not a reply.'); } if ($this->reply_to_note === null) { $this->reply_to_note = model('NoteModel') ->getNoteById($this->in_reply_to_id,); } return $this->reply_to_note; } /** * @return Note[] */ public function getReblogs(): array { if ($this->id === null) { throw new RuntimeException('Note must be created before getting reblogs.',); } if ($this->reblogs === null) { $this->reblogs = (array) model('NoteModel') ->getNoteReblogs($this->id,); } return $this->reblogs; } public function getIsReblog(): bool { return $this->reblog_of_id !== null; } public function getReblogOfNote(): self { if ($this->reblog_of_id === null) { throw new RuntimeException('Note is not a reblog.'); } if ($this->reblog_of_note === null) { $this->reblog_of_note = model('NoteModel') ->getNoteById($this->reblog_of_id,); } return $this->reblog_of_note; } public function setMessage(string $message): static { helper('activitypub'); $messageWithoutTags = strip_tags($message); $this->attributes['message'] = $messageWithoutTags; $this->attributes['message_html'] = str_replace("\n", '
', linkify($messageWithoutTags),); return $this; } }