Files
einundzwanzig-verein/app/Models/ProjectProposal.php
vk 0c64fe55d7 Kleine Bilder anzeigen (vibe-kanban 9bcfc693)
Die Ladezeiten der Bilder ist zu hoch, weil die Original geladen werden.
Bei /association/project-support lade in der Übersicht und in der Einzel-Ansicht /association/project-support/badgebox-for-nostr-manage-your-badges nur die Conversions der Bilder, also die kleinere Versionen.
2026-02-12 22:53:56 +01:00

107 lines
2.8 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\Cookie;
use Spatie\Image\Enums\Fit;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\Sluggable\HasSlug;
use Spatie\Sluggable\SlugOptions;
class ProjectProposal extends Model implements HasMedia
{
use HasFactory;
use HasSlug;
use InteractsWithMedia;
/** @var list<string> */
protected $fillable = [
'name',
'description',
'support_in_sats',
'website',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
'einundzwanzig_pleb_id' => 'integer',
'accepted' => 'boolean',
'sats_paid' => 'integer',
];
protected static function booted() {}
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom(['name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function registerMediaConversions(?Media $media = null): void
{
$this
->addMediaConversion('preview')
->fit(Fit::Crop, 300, 300)
->nonQueued();
$this
->addMediaConversion('thumb')
->fit(Fit::Crop, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this
->addMediaCollection('main')
->singleFile()
->acceptsMimeTypes([
'image/jpeg',
'image/png',
'image/gif',
'image/webp',
])
->useDisk('private')
->useFallbackUrl(asset('einundzwanzig-alpha.jpg'));
}
public function getSignedMediaUrl(string $collection = 'main', int $expireMinutes = 60, ?string $conversion = null): string
{
$media = $this->getFirstMedia($collection);
if (! $media) {
return asset('einundzwanzig-alpha.jpg');
}
$parameters = ['media' => $media];
if ($conversion && $media->hasGeneratedConversion($conversion)) {
$parameters['conversion'] = $conversion;
}
return url()->temporarySignedRoute('media.signed', now()->addMinutes($expireMinutes), $parameters);
}
public function einundzwanzigPleb(): BelongsTo
{
return $this->belongsTo(EinundzwanzigPleb::class);
}
public function votes(): HasMany
{
return $this->hasMany(Vote::class);
}
}