createdBy = new NullAccount(); $this->createdAt = new \DateTimeImmutable('now'); $this->publish = new \DateTime('now'); } /** * Get id * * @return int * * @since 1.0.0 */ public function getId() : int { return $this->id; } /** * Get news language * * @return string * * @since 1.0.0 */ public function getLanguage() : string { return $this->language; } /** * Set language * * @param string $language News article language * * @return void * * @since 1.0.0 */ public function setLanguage(string $language) : void { if (!ISO639x1Enum::isValidValue($language)) { throw new InvalidEnumValue($language); } $this->language = $language; } /** * Get news article type * * @return int * * @since 1.0.0 */ public function getType() : int { return $this->type; } /** * Set news article type * * @param int $type News article type * * @return void * * @since 1.0.0 */ public function setType(int $type) : void { if (!NewsType::isValidValue($type)) { throw new InvalidEnumValue((string) $type); } $this->type = $type; } /** * Get news article status * * @return int * * @since 1.0.0 */ public function getStatus() : int { return $this->status; } /** * @param int $status News status * * @return void * * @throws InvalidEnumValue * * @since 1.0.0 */ public function setStatus(int $status) : void { if (!NewsStatus::isValidValue($status)) { throw new InvalidEnumValue((string) $status); } $this->status = $status; } /** * Adding new tag. * * @param Tag $tag Tag * * @return int * * @since 1.0.0 */ public function addTag(Tag $tag) : int { $this->tags[] = $tag; \end($this->tags); $key = (int) \key($this->tags); \reset($this->tags); return $key; } /** * Remove Tag from list. * * @param int $id Tag * * @return bool * * @since 1.0.0 */ public function removeTag($id) : bool { if (isset($this->tags[$id])) { unset($this->tags[$id]); return true; } return false; } /** * Get task elements. * * @param int $id Element id * * @return Tag * * @since 1.0.0 */ public function getTag(int $id) : Tag { return $this->tags[$id] ?? new NullTag(); } /** * Get task elements. * * @return Tag[] * * @since 1.0.0 */ public function getTags() : array { return $this->tags; } /** * Get all media * * @return Media[] * * @since 1.0.0 */ public function getMedia() : array { return $this->media; } /** * Add media * * @param Media $media Media to add * * @return void * * @since 1.0.0 */ public function addMedia(Media $media) : void { $this->media[] = $media; } /** * {@inheritdoc} */ public function toArray() : array { return [ 'id' => $this->id, 'title' => $this->title, 'plain' => $this->plain, 'content' => $this->content, 'type' => $this->type, 'status' => $this->status, 'isFeatured' => $this->isFeatured, 'publish' => $this->publish, 'createdAt' => $this->createdAt, 'createdBy' => $this->createdBy, ]; } /** * {@inheritdoc} */ public function jsonSerialize() : mixed { return $this->toArray(); } }