🆙 More fixes 🆙

This commit is contained in:
Remco
2026-01-19 21:12:30 +01:00
parent c63995a6d5
commit 92a604f988
2 changed files with 51 additions and 18 deletions
+20 -1
View File
@@ -13,6 +13,25 @@ if (! function_exists('setting')) {
} }
} }
if (! function_exists('isDarkColor')) {
function isDarkColor(?string $hex): bool
{
if (! is_string($hex)) {
return false;
}
$hex = trim($hex);
if (! preg_match('/^#?[0-9a-fA-F]{6}$/', $hex)) {
return false;
}
$hex = ltrim($hex, '#');
$r = hexdec(substr($hex, 0, 2));
$g = hexdec(substr($hex, 2, 2));
$b = hexdec(substr($hex, 4, 2));
$luminance = (0.2126 * $r + 0.7152 * $g + 0.0722 * $b) / 255;
return $luminance < 0.5;
}
}
if (! function_exists('hasPermission')) { if (! function_exists('hasPermission')) {
function hasPermission(string $permission): string function hasPermission(string $permission): string
{ {
@@ -94,4 +113,4 @@ if (! function_exists('dropForeignKeyIfExists')) {
} }
} }
} }
} }
+31 -17
View File
@@ -6,12 +6,15 @@ use App\Models\Articles\WebsiteArticleComment as ArticleComment;
use App\Models\Articles\WebsiteArticleReaction as ArticleReaction; use App\Models\Articles\WebsiteArticleReaction as ArticleReaction;
use App\Models\Articles\Tag; use App\Models\Articles\Tag;
use App\Models\Compositions\HasNotificationUrl; use App\Models\Compositions\HasNotificationUrl;
use App\Models\User;
use Auth; use Auth;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphToMany;
use Str; use Str;
class Article extends Model class Article extends Model
@@ -31,25 +34,21 @@ class Article extends Model
static::creating(function (Article $article): void { static::creating(function (Article $article): void {
$article->user_id = Auth::id(); $article->user_id = Auth::id();
$article->slug = Str::slug($article->title); $article->slug = Str::slug($article->title);
$article->predominant_color = getPredominantImageColor($article->image);
}); });
static::updating(function (Article $article): void { static::updating(function (Article $article): void {
$article->slug = Str::slug($article->title); $article->slug = Str::slug($article->title);
if ($article->isDirty('image')) {
$article->predominant_color = getPredominantImageColor($article->image);
}
}); });
} }
public function syncPaginatedComments(): void public function syncPaginatedComments(): void
{ {
$this->setRelation('comments', $this->setRelation('comments', $this->comments()->paginate(10)->fragment('comments'));
$this->comments()->defaultRelationships()->paginate(10)->fragment('comments'),
);
} }
/**
* @return Builder<Article>
*/
public static function fromIdAndSlug(string $id, string $slug, bool $withDefaultRelationships = true): Builder public static function fromIdAndSlug(string $id, string $slug, bool $withDefaultRelationships = true): Builder
{ {
return Article::valid() return Article::valid()
@@ -74,6 +73,9 @@ class Article extends Model
return $article; return $article;
} }
/**
* @return Builder<Article>
*/
public static function forIndex(int $limit): Builder public static function forIndex(int $limit): Builder
{ {
return Article::valid() return Article::valid()
@@ -84,38 +86,50 @@ class Article extends Model
} }
#[\Illuminate\Database\Eloquent\Attributes\Scope] #[\Illuminate\Database\Eloquent\Attributes\Scope]
protected function valid(Builder $query): void protected function valid(Builder $query): Builder
{ {
$query->whereVisible(true); return $query->whereVisible(true);
} }
#[\Illuminate\Database\Eloquent\Attributes\Scope] #[\Illuminate\Database\Eloquent\Attributes\Scope]
protected function defaultRelationships(Builder $query): void protected function defaultRelationships(Builder $query): Builder
{ {
$query->with([ return $query->with([
'user:id,username,look,gender', 'user:id,username,look,gender',
'tags', 'tags',
'reactions' => fn ($query) => $query->defaultRelationships(), 'reactions',
'user.followers', 'user.followers',
]); ]);
} }
/**
* @return HasMany<ArticleComment, $this>
*/
public function comments(): HasMany public function comments(): HasMany
{ {
return $this->hasMany(ArticleComment::class)->defaultBehavior(); return $this->hasMany(ArticleComment::class);
} }
/**
* @return HasMany<ArticleReaction, $this>
*/
public function reactions(): HasMany public function reactions(): HasMany
{ {
return $this->hasMany(ArticleReaction::class)->defaultBehavior(); return $this->hasMany(ArticleReaction::class);
} }
public function user() /**
* @return BelongsTo<User, $this>
*/
public function user(): BelongsTo
{ {
return $this->belongsTo(User::class); return $this->belongsTo(User::class);
} }
public function tags(): \Illuminate\Database\Eloquent\Relations\MorphToMany /**
* @return MorphToMany<Tag, $this>
*/
public function tags(): MorphToMany
{ {
return $this->morphToMany(Tag::class, 'taggable'); return $this->morphToMany(Tag::class, 'taggable');
} }