🔥 Remove redundant PRD.md file, update media models with stricter MIME type validation, and refine media conversion settings.

This commit is contained in:
HolgerHatGarKeineNode
2026-01-25 23:54:44 +01:00
parent 2f4113a3f3
commit 32e327cd9c
11 changed files with 142 additions and 583 deletions

View File

@@ -43,22 +43,23 @@ class BitcoinEvent extends Model implements HasMedia
});
}
public function registerMediaConversions(Media $media = null): void
public function registerMediaConversions(?Media $media = null): void
{
$this
->addMediaConversion('preview')
->fit(Manipulations::FIT_CROP, 300, 300)
->nonQueued();
$this->addMediaConversion('thumb')
->fit(Manipulations::FIT_CROP, 130, 130)
->width(130)
->height(130);
->fit(Manipulations::FIT_CROP, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('logo')
->useFallbackUrl(asset('img/einundzwanzig.png'));
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/gif', 'image/webp'])
->useFallbackUrl(asset('img/einundzwanzig.png'));
}
public function createdBy(): BelongsTo

View File

@@ -14,32 +14,34 @@ use Spatie\MediaLibrary\MediaCollections\Models\Media;
class BookCase extends Model implements HasMedia
{
use Geoly;
use HasFactory;
use InteractsWithMedia;
use Geoly;
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
'lat' => 'double',
'lon' => 'array',
'digital' => 'boolean',
'id' => 'integer',
'lat' => 'double',
'lon' => 'array',
'digital' => 'boolean',
'deactivated' => 'boolean',
];
protected static function booted()
{
static::creating(function ($model) {
if (!$model->created_by) {
if (! $model->created_by) {
$model->created_by = auth()->id();
}
});
@@ -50,25 +52,26 @@ class BookCase extends Model implements HasMedia
return $query->where('deactivated', false);
}
public function registerMediaConversions(Media $media = null): void
public function registerMediaConversions(?Media $media = null): void
{
$this
->addMediaConversion('preview')
->fit(Manipulations::FIT_CROP, 300, 300)
->nonQueued();
$this->addMediaConversion('seo')
->fit(Manipulations::FIT_CROP, 1200, 630)
->width(1200)
->height(630);
->fit(Manipulations::FIT_CROP, 1200, 630)
->width(1200)
->height(630);
$this->addMediaConversion('thumb')
->fit(Manipulations::FIT_CROP, 130, 130)
->width(130)
->height(130);
->fit(Manipulations::FIT_CROP, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('images');
$this->addMediaCollection('images')
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/gif', 'image/webp']);
}
public function createdBy(): BelongsTo

View File

@@ -16,8 +16,8 @@ use Spatie\Tags\HasTags;
class Course extends Model implements HasMedia
{
use HasFactory;
use InteractsWithMedia;
use HasTags;
use InteractsWithMedia;
/**
* The attributes that aren't mass assignable.
@@ -45,25 +45,27 @@ class Course extends Model implements HasMedia
});
}
public function registerMediaConversions(Media $media = null): void
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);
->fit(Fit::Crop, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('logo')
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/gif', 'image/webp'])
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
$this->addMediaCollection('images')
->useFallbackUrl(asset('img/einundzwanzig.png'));
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/gif', 'image/webp'])
->useFallbackUrl(asset('img/einundzwanzig.png'));
}
public function createdBy(): BelongsTo

View File

@@ -23,47 +23,51 @@ class Lecturer extends Model implements HasMedia
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
'active' => 'boolean',
'id' => 'integer',
'active' => 'boolean',
];
protected static function booted()
{
static::creating(function ($model) {
if (!$model->created_by) {
if (! $model->created_by) {
$model->created_by = auth()->id();
}
});
}
public function registerMediaConversions(Media $media = null): void
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);
->fit(Fit::Crop, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('avatar')
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/gif', 'image/webp'])
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
$this->addMediaCollection('images')
->useFallbackUrl(asset('img/einundzwanzig.png'));
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/gif', 'image/webp'])
->useFallbackUrl(asset('img/einundzwanzig.png'));
}
/**
@@ -72,9 +76,9 @@ class Lecturer extends Model implements HasMedia
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom(['name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
->generateSlugsFrom(['name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function createdBy(): BelongsTo

View File

@@ -19,47 +19,49 @@ use Spatie\Sluggable\HasSlug;
use Spatie\Sluggable\SlugOptions;
use Spatie\Tags\HasTags;
class LibraryItem extends Model implements HasMedia, Sortable, Feedable
class LibraryItem extends Model implements Feedable, HasMedia, Sortable
{
use InteractsWithMedia;
use HasTags;
use SortableTrait;
use HasStatuses;
use HasSlug;
use HasStatuses;
use HasTags;
use InteractsWithMedia;
use SortableTrait;
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
'id' => 'integer',
'lecturer_id' => 'integer',
'library_id' => 'integer',
'library_id' => 'integer',
];
public static function getFeedItems()
{
return self::query()
->with([
'media',
'lecturer',
])
->where('news', true)
->where('approved', true)
->orderByDesc('created_at')
->get();
->with([
'media',
'lecturer',
])
->where('news', true)
->where('approved', true)
->orderByDesc('created_at')
->get();
}
protected static function booted()
{
static::creating(function ($model) {
if (!$model->created_by) {
if (! $model->created_by) {
$model->created_by = auth()->id();
}
});
@@ -68,39 +70,41 @@ class LibraryItem extends Model implements HasMedia, Sortable, Feedable
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom(['name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
->generateSlugsFrom(['name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function registerMediaConversions(Media $media = null): void
public function registerMediaConversions(?Media $media = null): void
{
$this
->addMediaConversion('preview')
->fit(Manipulations::FIT_CROP, 300, 300)
->nonQueued();
$this->addMediaConversion('seo')
->fit(Manipulations::FIT_CROP, 1200, 630)
->nonQueued();
->fit(Manipulations::FIT_CROP, 1200, 630)
->nonQueued();
$this->addMediaConversion('thumb')
->fit(Manipulations::FIT_CROP, 130, 130)
->width(130)
->height(130);
->fit(Manipulations::FIT_CROP, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('main')
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/gif', 'image/webp'])
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
$this->addMediaCollection('single_file')
->acceptsMimeTypes([
'application/pdf', 'application/zip', 'application/octet-stream', 'application/x-zip-compressed',
'multipart/x-zip',
])
->singleFile();
->acceptsMimeTypes([
'application/pdf', 'application/zip', 'application/octet-stream', 'application/x-zip-compressed',
'multipart/x-zip',
])
->singleFile();
$this->addMediaCollection('images')
->useFallbackUrl(asset('img/einundzwanzig.png'));
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/gif', 'image/webp'])
->useFallbackUrl(asset('img/einundzwanzig.png'));
}
public function createdBy(): BelongsTo
@@ -131,17 +135,17 @@ class LibraryItem extends Model implements HasMedia, Sortable, Feedable
public function toFeedItem(): CustomFeedItem
{
return CustomFeedItem::create()
->id('news/'.$this->slug)
->title($this->name)
->content($this->value)
->enclosure($this->getFirstMediaUrl('main'))
->enclosureLength($this->getFirstMedia('main')->size)
->enclosureType($this->getFirstMedia('main')->mime_type)
->summary($this->excerpt)
->updated($this->updated_at)
->image($this->getFirstMediaUrl('main'))
->link(url()->route('article.view', ['libraryItem' => $this]))
->authorName($this->lecturer->name);
->id('news/'.$this->slug)
->title($this->name)
->content($this->value)
->enclosure($this->getFirstMediaUrl('main'))
->enclosureLength($this->getFirstMedia('main')->size)
->enclosureType($this->getFirstMedia('main')->mime_type)
->summary($this->excerpt)
->updated($this->updated_at)
->image($this->getFirstMediaUrl('main'))
->link(url()->route('article.view', ['libraryItem' => $this]))
->authorName($this->lecturer->name);
}
public static function searchLibraryItems($type, $value = null)

View File

@@ -19,8 +19,8 @@ use Spatie\Sluggable\SlugOptions;
class Meetup extends Model implements HasMedia
{
use HasFactory;
use InteractsWithMedia;
use HasSlug;
use InteractsWithMedia;
/**
* The attributes that aren't mass assignable.
@@ -44,7 +44,7 @@ class Meetup extends Model implements HasMedia
protected static function booted()
{
static::creating(function ($model) {
if (!$model->created_by) {
if (! $model->created_by) {
$model->created_by = auth()->id();
}
});
@@ -58,7 +58,7 @@ class Meetup extends Model implements HasMedia
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function registerMediaConversions(Media $media = null): void
public function registerMediaConversions(?Media $media = null): void
{
$this
->addMediaConversion('preview')
@@ -75,6 +75,7 @@ class Meetup extends Model implements HasMedia
{
$this
->addMediaCollection('logo')
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/gif', 'image/webp'])
->singleFile()
->useFallbackUrl(get_domain_attributes()['image']);
}
@@ -104,8 +105,7 @@ class Meetup extends Model implements HasMedia
}
return Attribute::make(
get: fn()
=> url()->route('img',
get: fn () => url()->route('img',
[
'path' => $path,
'w' => 900,
@@ -121,8 +121,7 @@ class Meetup extends Model implements HasMedia
$nextEvent = $this->meetupEvents()->where('start', '>=', now())->orderBy('start')->first();
return Attribute::make(
get: fn()
=> $nextEvent ? [
get: fn () => $nextEvent ? [
'id' => $nextEvent->id,
'start' => $nextEvent->start,
'portalLink' => url()->route('meetups.landingpage-event',
@@ -140,7 +139,7 @@ class Meetup extends Model implements HasMedia
protected function belongsToMe(): Attribute
{
return Attribute::make(
get: fn() => DB::table('meetup_user')->where('meetup_id', $this->id)->where('user_id',
get: fn () => DB::table('meetup_user')->where('meetup_id', $this->id)->where('user_id',
auth()->id())->exists(),
);
}

View File

@@ -45,21 +45,22 @@ class OrangePill extends Model implements HasMedia
});
}
public function registerMediaConversions(Media $media = null): void
public function registerMediaConversions(?Media $media = null): void
{
$this
->addMediaConversion('preview')
->fit(Manipulations::FIT_CROP, 300, 300)
->nonQueued();
$this->addMediaConversion('thumb')
->fit(Manipulations::FIT_CROP, 130, 130)
->width(130)
->height(130);
->fit(Manipulations::FIT_CROP, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('images');
$this->addMediaCollection('images')
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/gif', 'image/webp']);
}
public function user(): BelongsTo

View File

@@ -16,29 +16,31 @@ use Spatie\Sluggable\SlugOptions;
class ProjectProposal extends Model implements HasMedia
{
use InteractsWithMedia;
use HasFactory;
use HasSlug;
use InteractsWithMedia;
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
'id' => 'integer',
'user_id' => 'integer',
];
protected static function booted()
{
static::creating(function ($model) {
if (!$model->created_by) {
if (! $model->created_by) {
$model->created_by = auth()->id();
}
});
@@ -47,28 +49,29 @@ class ProjectProposal extends Model implements HasMedia
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom(['name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
->generateSlugsFrom(['name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function registerMediaConversions(Media $media = null): void
public function registerMediaConversions(?Media $media = null): void
{
$this
->addMediaConversion('preview')
->fit(Manipulations::FIT_CROP, 300, 300)
->nonQueued();
$this->addMediaConversion('thumb')
->fit(Manipulations::FIT_CROP, 130, 130)
->width(130)
->height(130);
->fit(Manipulations::FIT_CROP, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('main')
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/gif', 'image/webp'])
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
}
public function user(): BelongsTo

View File

@@ -18,9 +18,9 @@ use Spatie\Tags\HasTags;
class SelfHostedService extends Model implements HasMedia
{
use HasFactory;
use InteractsWithMedia;
use HasSlug;
use HasTags;
use InteractsWithMedia;
protected $guarded = [];
@@ -35,7 +35,7 @@ class SelfHostedService extends Model implements HasMedia
{
static::creating(function ($model): void {
// Only set created_by if user is authenticated and not explicitly set as anonymous
if (auth()->check() && !isset($model->created_by)) {
if (auth()->check() && ! isset($model->created_by)) {
$model->created_by = auth()->id();
}
});
@@ -49,7 +49,7 @@ class SelfHostedService extends Model implements HasMedia
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function registerMediaConversions(Media $media = null): void
public function registerMediaConversions(?Media $media = null): void
{
$this
->addMediaConversion('preview')
@@ -66,6 +66,7 @@ class SelfHostedService extends Model implements HasMedia
{
$this
->addMediaCollection('logo')
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/gif', 'image/webp'])
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
}

View File

@@ -18,8 +18,8 @@ use Staudenmeir\EloquentHasManyDeep\HasRelationships;
class Venue extends Model implements HasMedia
{
use HasFactory;
use HasSlug;
use HasRelationships;
use HasSlug;
use InteractsWithMedia;
/**
@@ -48,22 +48,23 @@ class Venue extends Model implements HasMedia
});
}
public function registerMediaConversions(Media $media = null): void
public function registerMediaConversions(?Media $media = null): void
{
$this
->addMediaConversion('preview')
->fit(Manipulations::FIT_CROP, 300, 300)
->nonQueued();
$this->addMediaConversion('thumb')
->fit(Manipulations::FIT_CROP, 130, 130)
->width(130)
->height(130);
->fit(Manipulations::FIT_CROP, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('images')
->useFallbackUrl(asset('img/einundzwanzig.png'));
->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/gif', 'image/webp'])
->useFallbackUrl(asset('img/einundzwanzig.png'));
}
/**
@@ -72,9 +73,9 @@ class Venue extends Model implements HasMedia
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom(['city.slug', 'name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
->generateSlugsFrom(['city.slug', 'name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function createdBy(): BelongsTo
@@ -89,12 +90,12 @@ class Venue extends Model implements HasMedia
public function lecturers()
{
return $this->hasManyDeepFromRelations($this->courses(), (new Course())->lecturer());
return $this->hasManyDeepFromRelations($this->courses(), (new Course)->lecturer());
}
public function courses()
{
return $this->hasManyDeepFromRelations($this->events(), (new CourseEvent())->course());
return $this->hasManyDeepFromRelations($this->events(), (new CourseEvent)->course());
}
public function courseEvents(): HasMany