64 lines
2.2 KiB
PHP
64 lines
2.2 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Http\Controllers;
|
||
|
|
|
||
|
|
use App\Models\Evento;
|
||
|
|
use App\Models\Documento;
|
||
|
|
use Illuminate\Http\Request;
|
||
|
|
|
||
|
|
class EventoDocumentoController extends Controller
|
||
|
|
{
|
||
|
|
public function store(Request $request, $evento)
|
||
|
|
{
|
||
|
|
$this->authorizeWrite('documenti');
|
||
|
|
$this->authorizeWrite('eventi');
|
||
|
|
$evento = Evento::findOrFail($evento);
|
||
|
|
|
||
|
|
$request->validate([
|
||
|
|
'nome_file' => 'required|string|max:255',
|
||
|
|
'tipologia' => 'required|in:documento,programma,locandina,altro',
|
||
|
|
'file' => 'required|file|max:10240',
|
||
|
|
]);
|
||
|
|
|
||
|
|
$file = $request->file('file');
|
||
|
|
$path = $file->store('documenti/eventi', 'public');
|
||
|
|
|
||
|
|
$documento = Documento::create([
|
||
|
|
'nome_file' => $request->nome_file,
|
||
|
|
'tipologia' => $request->tipologia,
|
||
|
|
'file_path' => $path,
|
||
|
|
'mime_type' => $file->getMimeType(),
|
||
|
|
'dimensione' => $file->getSize(),
|
||
|
|
'visibilita' => 'evento',
|
||
|
|
'visibilita_target_id' => $evento->id,
|
||
|
|
'visibilita_target_type' => Evento::class,
|
||
|
|
]);
|
||
|
|
|
||
|
|
$evento->documenti()->attach($documento->id);
|
||
|
|
|
||
|
|
return redirect()->back()->with('success', 'Documento caricato con successo.');
|
||
|
|
}
|
||
|
|
|
||
|
|
public function destroy($evento, $documento)
|
||
|
|
{
|
||
|
|
$this->authorizeDelete('documenti');
|
||
|
|
$this->authorizeWrite('eventi');
|
||
|
|
$evento = Evento::findOrFail($evento);
|
||
|
|
$documento = Documento::findOrFail($documento);
|
||
|
|
|
||
|
|
if ($evento->documenti()->where('documenti.id', $documento->id)->exists()) {
|
||
|
|
$evento->documenti()->detach($documento->id);
|
||
|
|
}
|
||
|
|
|
||
|
|
if ($documento->visibilita === 'evento' && $documento->visibilita_target_id == $evento->id) {
|
||
|
|
if ($documento->eventi()->count() === 0 && $documento->gruppi()->count() === 0 && $documento->individui()->count() === 0) {
|
||
|
|
if ($documento->file_path && \Storage::disk('public')->exists($documento->file_path)) {
|
||
|
|
\Storage::disk('public')->delete($documento->file_path);
|
||
|
|
}
|
||
|
|
$documento->delete();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return redirect()->back()->with('success', 'Documento rimosso.');
|
||
|
|
}
|
||
|
|
}
|