You've already forked Epicnabbo-Catalogus-Updated-Daily
69 lines
2.3 KiB
PHP
69 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Services\SettingsService;
|
|
use Exception;
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class WebsiteAd extends Model
|
|
{
|
|
use HasFactory;
|
|
|
|
protected $fillable = [
|
|
'image',
|
|
];
|
|
|
|
protected function imageUrl(): \Illuminate\Database\Eloquent\Casts\Attribute
|
|
{
|
|
return \Illuminate\Database\Eloquent\Casts\Attribute::make(get: function () {
|
|
$settingsService = app(SettingsService::class);
|
|
$adsPicturePath = Cache::remember('ads_picture_path', 3600, fn () => $settingsService->getOrDefault('ads_picture_path'));
|
|
if (! str_starts_with((string) $adsPicturePath, 'http')) {
|
|
$adsPicturePath = rtrim((string) config('app.url'), '/') . '/' . ltrim((string) $adsPicturePath, '/');
|
|
}
|
|
|
|
return rtrim((string) $adsPicturePath, '/') . '/' . $this->image;
|
|
});
|
|
}
|
|
|
|
#[\Override]
|
|
protected static function booted()
|
|
{
|
|
static::deleting(function ($websiteAd): void {
|
|
try {
|
|
$websiteAd->configureAdsDisk();
|
|
|
|
logger()->info('Attempting to delete image file:', ['file' => $websiteAd->image]);
|
|
|
|
if ($websiteAd->image && Storage::disk('ads')->exists($websiteAd->image)) {
|
|
Storage::disk('ads')->delete($websiteAd->image);
|
|
logger()->info('Image file deleted:', ['file' => $websiteAd->image]);
|
|
} else {
|
|
logger()->warning('Image file not found:', ['file' => $websiteAd->image]);
|
|
}
|
|
} catch (Exception $e) {
|
|
logger()->error('Failed to delete image file:', [
|
|
'file' => $websiteAd->image,
|
|
'error' => $e->getMessage(),
|
|
]);
|
|
}
|
|
});
|
|
}
|
|
|
|
protected function configureAdsDisk(): void
|
|
{
|
|
$settingsService = app(SettingsService::class);
|
|
|
|
$adsPath = Cache::remember('ads_path_filesystem', 3600, fn () => $settingsService->getOrDefault('ads_path_filesystem'));
|
|
|
|
config(['filesystems.disks.ads' => [
|
|
'driver' => 'local',
|
|
'root' => $adsPath,
|
|
]]);
|
|
}
|
|
}
|