authorize('settings.manage'); $this->agganciaOperazioneCorrente(); } /** * Backup e ripristino si raccontano da qui; l'azzeramento e' della zona * pericolosa. Vedi SegueOperazioneBackup::tipiSeguiti(). */ protected function tipiSeguiti(): array { return [BackupOperationState::TIPO_BACKUP, BackupOperationState::TIPO_RESTORE]; } public function avviaBackup(): void { $this->authorize('settings.manage'); if (! $this->postoLibero()) { return; } $this->operationId = $this->nuovaOperazione(BackupOperationState::TIPO_BACKUP); CreateBackupArchive::dispatch($this->operationId, false); $this->aggiorna(); $this->avvisaZonaPericolosa(); } /** * Aggancia un'operazione avviata fuori da Livewire: il ripristino parte da un * upload XHR e restituisce il proprio id in JSON. */ public function seguiOperazione(string $operationId): void { $this->authorize('settings.manage'); $this->operationId = $operationId; $this->logSpediti = 0; $this->aggiorna(); $this->avvisaZonaPericolosa(); } /** * Il posto e' uno solo: la zona pericolosa deve sapere che e' occupato, * altrimenti continuerebbe a offrire il proprio pulsante durante un backup o * un ripristino. * * L'evento e' indirizzato, non gridato: senza ->to() tornerebbe anche a * questo componente, che si riaggancerebbe a un'operazione appena * agganciata — una richiesta in piu' a ogni avvio, per niente. */ private function avvisaZonaPericolosa(): void { $this->dispatch('operazione-avviata')->to(ZonaPericolosa::class); } /** * L'azzeramento avviato dalla zona pericolosa non passa da qui, ma occupa lo * stesso posto: senza riagganciarsi, questa sezione resterebbe convinta che * sia libero e offrirebbe il pulsante "Crea backup" durante una * cancellazione. */ #[\Livewire\Attributes\On('operazione-avviata')] public function agganciaAltrove(): void { $this->agganciaOperazioneCorrente(); } /** Vero quando l'archivio di questa operazione e' scaricabile. */ public function getArchivioProntoProperty(): bool { return ($this->operazione['result']['file'] ?? null) !== null; } public function render() { return view('livewire.settings.backup-manager'); } }