Files
trf_certest/vendor/vanguardapp/announcements/src/Announcement.php
T
2025-03-28 08:52:46 +01:00

64 lines
1.6 KiB
PHP

<?php
namespace Vanguard\Announcements;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Carbon;
use Illuminate\Support\HtmlString;
use League\CommonMark\CommonMarkConverter;
use League\CommonMark\Environment\Environment;
use League\CommonMark\Extension\Table\TableExtension;
use Vanguard\Announcements\Database\Factories\AnnouncementFactory;
use Vanguard\User;
/**
* @property int $id
* @property string $title
* @property string $body
* @property Carbon $created_at
* @property Carbon $deleted_at
*/
class Announcement extends Model
{
use HasFactory;
protected $table = 'announcements';
protected $guarded = [];
public function creator(): \Illuminate\Database\Eloquent\Relations\BelongsTo
{
return $this->belongsTo(User::class, 'user_id');
}
public function wasReadBy(User $user): bool
{
return $user->announcements_last_read_at < $this->created_at;
}
public function getParsedBodyAttribute(): HtmlString
{
$environment = Environment::createCommonMarkEnvironment();
$environment->addExtension(new TableExtension);
$converter = new CommonMarkConverter([
'html_input' => 'escape',
'allow_unsafe_links' => false,
], $environment);
return new HtmlString(
$converter->convertToHtml($this->attributes['body'])
);
}
/**
* {@inheritDoc}
*/
protected static function newFactory(): AnnouncementFactory
{
return new AnnouncementFactory;
}
}