mergeCasts([ 'status' => 'string', 'publish_at' => 'datetime', 'unpublish_at' => 'datetime', ]); $this->mergeFillable([ 'status', 'publish_at', 'unpublish_at', ]); } /** * Adjusts model status using current status and publish dates * * @return void */ public function makeStatusSense(): void { /** @var \Carbon\Carbon|null */ $publish_at = $this->publish_at; /** @var \Carbon\Carbon|null */ $unpublish_at = $this->unpublish_at; $wantedStatus = $this->status; if ($publish_at or $unpublish_at) { $this->status = $this->planificated_status; } if ($wantedStatus !== $this->status) { $previousMessage = session()->get('bo.info', ''); session()->flash('bo.info', \trans( 'La publication est modifiée en concordance avec les dates enregistrées donc pour modifier l\'état de publication, veuillez modifier ou enlever les dates correspondantes.' ) . " \n{$previousMessage}"); } } /** * Getter the current status following planification dates planificated_status * * @return boolean */ public function getPlanificatedStatusAttribute(): bool { /** @var \Carbon\Carbon */ $publish_at = $this->publish_at; /** @var \Carbon\Carbon|null */ $unpublish_at = $this->unpublish_at; if ($unpublish_at) { return $publish_at->lessThan(now()) && $unpublish_at->greaterThanOrEqualTo(now()); } return $publish_at->lessThan(now()); } // * GETTERS / SETTERS (for PHPStan) /** * Get status attribute. * * @return boolean */ public function getStatus(): bool { return $this->status; } /** * Set status attribute. * * @param boolean $status * @return void */ public function setStatus(bool $status): void { $this->status = $status; } /** * Get publish_at attribute. * * @return \Carbon\Carbon|null */ public function getPublishAt(): Carbon|null { return $this->publish_at; } /** * Set publish_at attribute. * * @param \Carbon\Carbon|null $date * @return void */ public function setPublishAt(Carbon|null $date): void { $this->publish_at = $date; } /** * Get unpublish_at attribute. * * @return \Carbon\Carbon|null */ public function getUnpublishAt(): Carbon|null { return $this->unpublish_at; } /** * Set unpublish_at attribute. * * @param \Carbon\Carbon|null $date * @return void */ public function setUnpublishAt(Carbon|null $date): void { $this->unpublish_at = $date; } }