feat: use xpier media library for uploads and markdown embeds
Store media:ID in article bodies instead of CDN URLs, and keep sablog attach tokens as a fallback. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -13,6 +13,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Xpier\FilamentMediaLibrary\Models\MediaLibrary;
|
||||
|
||||
class Article extends Model
|
||||
{
|
||||
@@ -40,6 +41,7 @@ class Article extends Model
|
||||
'cover_path',
|
||||
'cover_source',
|
||||
'cover_status',
|
||||
'cover_media_id',
|
||||
'cover_generated_at',
|
||||
];
|
||||
|
||||
@@ -60,11 +62,20 @@ class Article extends Model
|
||||
|
||||
public function hasCover(): bool
|
||||
{
|
||||
if ($this->cover_media_id) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return $this->cover_status === 'ready' && filled($this->cover_path);
|
||||
}
|
||||
|
||||
public function coverUrl(): ?string
|
||||
{
|
||||
$libraryUrl = $this->coverMedia?->url;
|
||||
if (filled($libraryUrl)) {
|
||||
return (string) $libraryUrl;
|
||||
}
|
||||
|
||||
return app(ArticleCoverService::class)->publicUrl($this);
|
||||
}
|
||||
|
||||
@@ -123,6 +134,11 @@ class Article extends Model
|
||||
return $this->hasMany(Attachment::class);
|
||||
}
|
||||
|
||||
public function coverMedia(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(MediaLibrary::class, 'cover_media_id');
|
||||
}
|
||||
|
||||
public function scopeVisible(Builder $query): Builder
|
||||
{
|
||||
return $query->where('visible', true);
|
||||
|
||||
Reference in New Issue
Block a user