forge/app/Livewire/Mod/ModerationActionButton.php

111 lines
2.5 KiB
PHP
Raw Normal View History

2024-12-02 16:20:16 -05:00
<?php
namespace App\Livewire\Mod;
use App\Models\Mod;
use App\Models\ModVersion;
2025-02-06 10:00:24 -05:00
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View as ContractView;
use Illuminate\Foundation\Application;
use Illuminate\Support\Facades\Log;
2025-02-06 10:00:24 -05:00
use Illuminate\View\View;
2024-12-03 10:17:41 -05:00
use Livewire\Attributes\On;
2024-12-02 16:20:16 -05:00
use Livewire\Component;
class ModerationActionButton extends Component
{
public ?string $moderatedObjectId = null;
2024-12-02 16:20:16 -05:00
2024-12-03 10:17:41 -05:00
public string $guid = '';
2024-12-02 16:20:16 -05:00
public string $actionType;
public string $targetType = '';
2024-12-02 16:20:16 -05:00
public bool $allowActions = false;
public bool $isRunning = false;
2025-02-06 10:00:24 -05:00
/**
* @var array<string, string>
*/
2024-12-02 16:20:16 -05:00
protected $listeners = ['refreshComponent' => '$refresh'];
2024-12-03 10:17:41 -05:00
public function mount(): void
{
$this->guid = uniqid('', true);
}
2025-02-06 10:00:24 -05:00
public function render(): Application|Factory|ContractView|View
2024-12-02 16:20:16 -05:00
{
$this->allowActions = ! $this->isRunning;
return view('livewire.mod.moderation-action-button');
}
public function runActionEvent(): void
{
$this->isRunning = true;
2024-12-03 10:17:41 -05:00
$this->dispatch("startAction.{$this->guid}");
2024-12-02 16:20:16 -05:00
}
2024-12-03 10:17:41 -05:00
#[On('startAction.{guid}')]
2024-12-02 16:20:16 -05:00
public function invokeAction(): void
{
2025-02-06 10:00:24 -05:00
if (empty($this->moderatedObjectId)) {
Log::info('Failed: no ID specified.');
return;
}
Log::info("Object ID: $this->moderatedObjectId");
if ($this->targetType !== 'mod' && $this->targetType !== 'modVersion') {
Log::info('Failed: invalid target type.');
return;
}
switch ($this->targetType) {
case 'mod':
2025-02-06 10:00:24 -05:00
$moderatedObject = Mod::query()->where('id', '=', $this->moderatedObjectId)->first();
break;
case 'modVersion':
2025-02-06 10:00:24 -05:00
$moderatedObject = ModVersion::query()->where('id', '=', $this->moderatedObjectId)->first();
break;
default:
Log::info('Failed: invalid target type.');
return;
}
2025-02-06 10:00:24 -05:00
if ($moderatedObject === null) {
Log::info('Failed: moderated object is null');
return;
}
2024-12-02 16:20:16 -05:00
switch ($this->actionType) {
case 'delete':
$moderatedObject->delete();
2024-12-02 20:16:47 -05:00
break;
2024-12-02 16:20:16 -05:00
case 'enable':
case 'disable':
$moderatedObject->toggleDisabled();
2024-12-02 20:16:47 -05:00
break;
default:
Log::info('Failed: invalid action type.');
return;
2024-12-02 16:20:16 -05:00
}
2024-12-02 20:16:47 -05:00
$this->js('window.location.reload()');
2024-12-02 16:20:16 -05:00
}
}