update models and allow disabling modVersions

This commit is contained in:
IsWaffle 2024-11-28 21:02:30 -05:00
parent ffa00e34d0
commit d4136bfb92
6 changed files with 47 additions and 14 deletions

View File

@ -2,28 +2,27 @@
namespace App\Livewire\Mod;
use App\Models\Mod;
use App\Models\ModeratedModel;
use Livewire\Component;
class ModerationOptions extends Component
{
public Mod $mod;
public ModeratedModel $moderatedObject;
public function render()
{
return view('livewire.mod.moderation-options');
}
public function deleteMod(): void
public function delete(): void
{
$this->mod->delete();
$this->moderatedObject->delete();
$this->js('window.location.reload()');
}
public function toggleDisabled(): void
{
$this->mod->disabled = ! $this->mod->disabled;
$this->mod->save();
$this->moderatedObject->toggleDisabled();
$this->js('window.location.reload()');
}
}

View File

@ -18,7 +18,7 @@ use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Laravel\Scout\Searchable;
class Mod extends Model
class Mod extends ModeratedModel
{
use HasFactory;
use Searchable;
@ -257,4 +257,9 @@ class Mod extends Model
set: fn (string $value) => Str::slug($value),
);
}
public function getFriendlyName(): string
{
return $this->name;
}
}

View File

@ -13,7 +13,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOneThrough;
use Illuminate\Database\Eloquent\SoftDeletes;
class ModVersion extends Model
class ModVersion extends ModeratedModel
{
use HasFactory;
use SoftDeletes;
@ -168,4 +168,9 @@ class ModVersion extends Model
'published_at' => 'datetime',
];
}
public function getFriendlyName(): string
{
return $this->version;
}
}

View File

@ -0,0 +1,16 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
abstract class ModeratedModel extends Model
{
abstract public function getFriendlyName(): string;
public function toggleDisabled(): void
{
$this->disabled = ! $this->disabled;
$this->save();
}
}

View File

@ -2,7 +2,7 @@
<x-dropdown alignment="right" contentClasses="py-1 rounded-full bg-gray-200 dark:bg-gray-800">
<x-slot name="trigger">
{{-- wire:click.prevent here to stop from following mod card links --}}
<button class="relative text-blue-400 dark:text-blue-500 hover:text-blue-600 dark:hover:text-blue-700" wire:click.prevent="">
<button class="relative text-blue-400 dark:text-blue-500 hover:text-blue-600 dark:hover:text-blue-700">
{{-- Icon (shield with keyhole) --}}
<svg width="24" height="24" fill="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M3 5.75V11c0 5.001 2.958 8.676 8.725 10.948a.75.75 0 0 0 .55 0C18.042 19.676 21 16 21 11V5.75a.75.75 0 0 0-.75-.75c-2.663 0-5.258-.943-7.8-2.85a.75.75 0 0 0-.9 0C9.008 4.057 6.413 5 3.75 5a.75.75 0 0 0-.75.75ZM13.995 11a2 2 0 0 1-1.245 1.852v2.398a.75.75 0 0 1-1.5 0v-2.394A2 2 0 1 1 13.995 11Z"/>
@ -12,10 +12,10 @@
<x-slot name="content">
<div>
<button wire:click.prevent="toggleDisabled" wire:confirm="{{$this->mod->disabled ? __('Enable') : __('Disable') }} the mod '{{$this->mod->name}}'?" class="p-2 h-full w-full text-blue-500 dark:text-blue-500 bg-gray-200 dark:bg-gray-800 hover:text-blue-400 dark:hover:text-blue-400">
<button wire:click.prevent="toggleDisabled" wire:confirm="{{$this->moderatedObject->disabled ? __('Enable') : __('Disable') }} '{{$this->moderatedObject->getFriendlyName()}}'?" class="p-2 h-full w-full text-blue-500 dark:text-blue-500 bg-gray-200 dark:bg-gray-800 hover:text-blue-400 dark:hover:text-blue-400">
<div class="flex">
<span class="pr-2">
@if ($this->mod->disabled)
@if ($this->moderatedObject->disabled)
{{-- Icon (circle with checkmark) --}}
<svg width="24" height="24" fill="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2c5.523 0 10 4.477 10 10s-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2Zm3.22 6.97-4.47 4.47-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5a.75.75 0 1 0-1.06-1.06Z" />
@ -27,13 +27,13 @@
</svg>
@endif
</span>
{{$this->mod->disabled ? __('Enable') : __('Disable') }}
{{$this->moderatedObject->disabled ? __('Enable') : __('Disable') }}
</div>
</button>
</div>
@if(auth()->user()->isAdmin())
<div>
<button wire:click.prevent="deleteMod" wire:confirm="Delete the mod '{{$this->mod->name}}'?" class="p-2 h-full w-full text-red-500 dark:text-red-500 bg-gray-200 dark:bg-gray-800 hover:text-red-400 dark:hover:text-red-400">
<button wire:click.prevent="delete" wire:confirm="Delete '{{$this->moderatedObject->getFriendlyName()}}'?" class="p-2 h-full w-full text-red-500 dark:text-red-500 bg-gray-200 dark:bg-gray-800 hover:text-red-400 dark:hover:text-red-400">
<div class="flex">
<span class="pr-2">
{{-- Icon (trash can) --}}

View File

@ -13,7 +13,7 @@
<div class="relative p-4 sm:p-6 text-center sm:text-left bg-white dark:bg-gray-950 rounded-xl shadow-md dark:shadow-gray-950 drop-shadow-2xl">
@if (auth()->check() && auth()->user()->isModOrAdmin())
<div class="absolute top-0 right-0 z-50 m-2">
<livewire:mod.moderation-options :mod="$mod" />
<livewire:mod.moderation-options :moderatedObject="$mod" lazy />
</div>
@endif
@if ($mod->featured && !$mod->disabled)
@ -106,7 +106,15 @@
<div x-show="selectedTab === 'versions'">
@foreach ($mod->versions as $version)
<div class="p-4 mb-4 sm:p-6 bg-white dark:bg-gray-950 rounded-xl shadow-md dark:shadow-gray-950 drop-shadow-2xl">
@if($version->disabled)
<div class="ribbon-red z-10">{{ __('Disabled') }}</div>
@endif
<div class="pb-6 border-b-2 border-gray-200 dark:border-gray-800">
@if (auth()->check() && auth()->user()->isModOrAdmin())
<div class="absolute top-0 right-0 z-50 m-2">
<livewire:mod.moderation-options :moderatedObject="$version" lazy />
</div>
@endif
<div class="flex items-center justify-between">
<a class="text-2xl font-extrabold" href="{{ $version->downloadUrl() }}">
{{ __('Version') }} {{ $version->version }}