140 lines
3.2 KiB
PHP
140 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace App\Traits\Models;
|
|
|
|
use Carbon\Carbon;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
trait IsPublishable
|
|
{
|
|
/**
|
|
* Initialize the Trait (Laravel magic method)
|
|
*
|
|
* @return void
|
|
*/
|
|
public function initializeIsPublishable(): void
|
|
{
|
|
/** @var \Illuminate\Database\Eloquent\Model $this */
|
|
|
|
$this->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;
|
|
}
|
|
}
|