* @since 1.0.0 */ private array $badges = []; /** * Answers. * * @var array * @since 1.0.0 */ private array $answers = []; /** * Constructor. * * @since 1.0.0 */ public function __construct() { $this->createdAt = new \DateTime('now'); $this->createdBy = new NullAccount(); } /** * Get id. * * @return int Model id * * @since 1.0.0 */ public function getId() : int { return $this->id; } /** * Does the question have a accepted answer? * * @return bool * * @since 1.0.0 */ public function hasAccepted() : bool { foreach ($this->answers as $answer) { if ($answer->isAccepted()) { return true; } } return false; } /** * Get the language * * @return string * * @since 1.0.0 */ public function getLanguage() : string { return $this->language; } /** * Set the language * * @param string $language Language * * @return void * * @since 1.0.0 */ public function setLanguage(string $language) : void { $this->language = $language; } /** * Is the question answered? * * @return bool * * @since 1.0.0 */ public function isAnswered() : bool { foreach ($this->answers as $answer) { if ($answer->isAccepted()) { return true; } } return false; } /** * Get title. * * @return string * * @since 1.0.0 */ public function getName() : string { return $this->name; } /** * Set name. * * @param string $name Name * * @return void * * @since 1.0.0 */ public function setName(string $name) : void { $this->name = $name; } /** * Get the question. * * @return string * * @since 1.0.0 */ public function getQuestion() : string { return $this->question; } /** * Set the question * * @param string $question Question * * @return void * * @since 1.0.0 */ public function setQuestion(string $question) : void { $this->question = $question; } /** * Get the status * * @return int * * @since 1.0.0 */ public function getStatus() : int { return $this->status; } /** * Set the status * * @param int $status Status * * @return void * * @since 1.0.0 */ public function setStatus(int $status) : void { $this->status = $status; } /** * Get the category * * @return mixed * * @since 1.0.0 */ public function getCategory() : QACategory { return $this->category ?? new NullQACategory(); } /** * Set the category * * @param null|QACategory $category Category * * @return void * * @since 1.0.0 */ public function setCategory(?QACategory $category) : void { $this->category = $category; } /** * Get created by * * @return Account * * @since 1.0.0 */ public function getCreatedBy() : Account { return $this->createdBy; } /** * Set created by * * @param Account $account Created by * * @return void * * @since 1.0.0 */ public function setCreatedBy(Account $account) : void { $this->createdBy = $account; } /** * Get created at date time * * @return \DateTime * * @since 1.0.0 */ public function getCreatedAt() : \DateTime { return $this->createdAt; } /** * Get badges * * @return array * * @since 1.0.0 */ public function getBadges() : array { return $this->badges; } /** * Add badge to question * * @param int|Tag $badge Badge */ public function addBadge($badge) : void { $this->badges[] = $badge; } /** * Set badges to question * * @param array $badges Badges */ public function setBadges(array $badges) : void { $this->badges = $badges; } /** * Get answers * * @return array * * @since 1.0.0 */ public function getAnswers() : array { return $this->answers; } /** * Add answer to question * * @param int|QAAnswer $answer Answer to the question * * @return void * * @since 1.0.0 */ public function addAnswer($answer) : void { $this->answers[] = $answer; } /** * {@inheritdoc} */ public function jsonSerialize() : array { return []; } }