CluPilotCloud/app/Livewire/Admin/ConfirmPinRelease.php

52 lines
1.7 KiB
PHP

<?php
namespace App\Livewire\Admin;
use LivewireUI\Modal\ModalComponent;
/**
* Rückfrage vor dem Festnageln (R23).
*
* Das Modal mutiert nichts: es löst `pin-release-confirmed` aus, und
* App\Livewire\Admin\Settings führt die Handlung mit ihrer eigenen
* Berechtigungsprüfung aus. Damit bleibt die Prüfung an der einen Stelle, an
* der sie schon stand, statt hier verdoppelt zu werden.
*
* Die Version kommt als Argument aus dem Auswahlfeld der Seite (R20: kein
* Modal fürs Auswahlfeld selbst, nur für die Bestätigung der Handlung). Ein
* Modal ist ohne die Route-Middleware der Seite erreichbar, deshalb prüft
* auch `mount()` die Berechtigung selbst statt sich auf die aufrufende Seite
* zu verlassen.
*/
class ConfirmPinRelease extends ModalComponent
{
public string $version = '';
public function mount(string $version = ''): void
{
$this->authorize('site.manage');
$this->version = $version;
}
public function confirm(): void
{
$this->authorize('site.manage');
// Die Version geht als Event-Nutzlast mit, nicht nur als das, was
// dieses Modal auf dem Bildschirm zeigt — genau wie
// ConfirmSaveSecret::confirm() den Schlüssel mitschickt. Sonst
// bestätigt der Klick nur, DASS etwas festgenagelt wird, nicht WAS:
// die Seite las bisher ihr eigenes `ceilingChoice` erneut, und eine
// leere Auswahl dort landete unbestätigt in setCeiling(null) — der
// Gegenhandlung, nicht dem Festnageln.
$this->dispatch('pin-release-confirmed', version: $this->version);
$this->closeModal();
}
public function render()
{
return view('livewire.admin.confirm-pin-release');
}
}