getString(0), categoryId: $result->getString(1), userId: $result->getStringOrNull(2), commentsSectionId: $result->getStringOrNull(3), featured: $result->getBoolean(4), title: $result->getString(5), body: $result->getString(6), scheduled: $result->getInteger(7), created: $result->getInteger(8), updated: $result->getInteger(9), deleted: $result->getIntegerOrNull(10), ); } public function getId(): string { return $this->id; } public function getCategoryId(): string { return $this->categoryId; } public function hasUserId(): bool { return $this->userId !== null; } public function getUserId(): ?string { return $this->userId; } public function hasCommentsCategoryId(): bool { return $this->commentsSectionId !== null; } public function getCommentsCategoryId(): string { return $this->commentsSectionId; } public function getCommentsCategoryName(): string { return sprintf('news-%s', $this->id); } public function isFeatured(): bool { return $this->featured; } public function getTitle(): string { return $this->title; } public function getBody(): string { return $this->body; } public function getFirstParagraph(): string { $index = mb_strpos($this->body, "\n"); return $index === false ? $this->body : mb_substr($this->body, 0, $index); } public function getScheduledTime(): int { return $this->scheduled; } public function getScheduledAt(): DateTime { return DateTime::fromUnixTimeSeconds($this->scheduled); } public function isPublished(): bool { return $this->scheduled <= time(); } public function getCreatedTime(): int { return $this->created; } public function getCreatedAt(): DateTime { return DateTime::fromUnixTimeSeconds($this->created); } public function getUpdatedTime(): int { return $this->updated; } public function getUpdatedAt(): DateTime { return DateTime::fromUnixTimeSeconds($this->updated); } public function isEdited(): bool { return $this->updated > $this->created; } public function isDeleted(): bool { return $this->deleted !== null; } public function getDeletedTime(): ?int { return $this->deleted; } public function getDeletedAt(): ?DateTime { return $this->deleted === null ? null : DateTime::fromUnixTimeSeconds($this->deleted); } }