fix doc
This commit is contained in:
@@ -201,7 +201,7 @@ class DocumentoController extends Controller
|
||||
$tipologieValidi = TipologiaDocumento::opzioni();
|
||||
$tipologieRule = 'in:' . implode(',', $tipologieValidi);
|
||||
|
||||
$data = $request->validate([
|
||||
$rules = [
|
||||
'nome_file' => 'required|string|max:255',
|
||||
'tipologia' => 'required|' . $tipologieRule,
|
||||
'contesto_tipo' => 'nullable|in:individuo,gruppo,evento,mailing',
|
||||
@@ -209,7 +209,13 @@ class DocumentoController extends Controller
|
||||
'note' => 'nullable|string',
|
||||
'tags' => 'nullable|array',
|
||||
'tags.*' => 'exists:tags,id',
|
||||
]);
|
||||
];
|
||||
|
||||
if ($documento->isLink()) {
|
||||
$rules['url'] = 'nullable|url|max:2048';
|
||||
}
|
||||
|
||||
$data = $request->validate($rules);
|
||||
|
||||
$contestoTipo = $data['contesto_tipo'] ?? null;
|
||||
$data['visibilita'] = $contestoTipo ?: 'pubblico';
|
||||
@@ -228,6 +234,10 @@ class DocumentoController extends Controller
|
||||
$data['visibilita_target_type'] = null;
|
||||
}
|
||||
|
||||
if ($documento->isLink()) {
|
||||
$data['url'] = $data['url'] ?? $documento->url;
|
||||
}
|
||||
|
||||
$documento->update($data);
|
||||
|
||||
if ($request->has('tags')) {
|
||||
@@ -246,10 +256,11 @@ class DocumentoController extends Controller
|
||||
$tipologieValidi = TipologiaDocumento::opzioni();
|
||||
$tipologieRule = 'in:' . implode(',', $tipologieValidi);
|
||||
|
||||
$data = $request->validate([
|
||||
$isLink = $request->input('tipo_caricamento') === 'link';
|
||||
|
||||
$rules = [
|
||||
'nome_file' => 'required|string|max:255',
|
||||
'tipologia' => 'required|' . $tipologieRule,
|
||||
'file' => 'required|file|max:10240',
|
||||
'visibilita' => 'required|in:pubblico,individuo,gruppo',
|
||||
'visibilita_target_id' => 'nullable|integer',
|
||||
'visibilita_target_type' => 'nullable|string',
|
||||
@@ -257,7 +268,47 @@ class DocumentoController extends Controller
|
||||
'repository_id' => 'nullable|integer|exists:storage_repositories,id',
|
||||
'tags' => 'nullable|array',
|
||||
'tags.*' => 'exists:tags,id',
|
||||
]);
|
||||
'tipo_caricamento' => 'required|in:file,link',
|
||||
'url' => 'required_if:tipo_caricamento,link|nullable|url|max:2048',
|
||||
];
|
||||
|
||||
if (!$isLink) {
|
||||
$rules['file'] = 'required|file|max:10240';
|
||||
}
|
||||
|
||||
$data = $request->validate($rules);
|
||||
|
||||
if ($isLink) {
|
||||
$linkVisibilitaTargetType = null;
|
||||
if ($data['visibilita'] === 'individuo' && $data['visibilita_target_id']) {
|
||||
$linkVisibilitaTargetType = Individuo::class;
|
||||
} elseif ($data['visibilita'] === 'gruppo' && $data['visibilita_target_id']) {
|
||||
$linkVisibilitaTargetType = Gruppo::class;
|
||||
}
|
||||
|
||||
$doc = Documento::create([
|
||||
'nome_file' => $data['nome_file'],
|
||||
'url' => $data['url'],
|
||||
'tipo' => 'link',
|
||||
'tipologia' => $data['tipologia'],
|
||||
'visibilita' => $data['visibilita'],
|
||||
'visibilita_target_id' => $data['visibilita_target_id'] ?? null,
|
||||
'visibilita_target_type' => $linkVisibilitaTargetType,
|
||||
'user_id' => auth()->id(),
|
||||
'cartella_id' => $data['cartella_id'] ?? null,
|
||||
'repository_id' => null,
|
||||
]);
|
||||
|
||||
if ($doc && $request->has('tags')) {
|
||||
$doc->tags()->sync($request->tags);
|
||||
}
|
||||
|
||||
$redirect = $request->_redirect ?? url()->previous();
|
||||
if ($request->filled('folder_id')) {
|
||||
$redirect = '/documenti?folder_id=' . $request->input('folder_id');
|
||||
}
|
||||
return redirect($redirect)->with('success', 'Documento (link) creato.');
|
||||
}
|
||||
|
||||
$repositoryId = $data['repository_id'] ?? null;
|
||||
|
||||
@@ -321,6 +372,10 @@ class DocumentoController extends Controller
|
||||
$this->authorizeRead('documenti');
|
||||
$documento = Documento::findOrFail($documento);
|
||||
|
||||
if ($documento->isLink()) {
|
||||
return redirect()->away($documento->url);
|
||||
}
|
||||
|
||||
$extension = pathinfo($documento->file_path, PATHINFO_EXTENSION);
|
||||
$filename = $extension ? $documento->nome_file . '.' . $extension : $documento->nome_file;
|
||||
|
||||
@@ -366,6 +421,12 @@ class DocumentoController extends Controller
|
||||
$this->authorizeRead('documenti');
|
||||
$documento = Documento::findOrFail($documento);
|
||||
|
||||
if ($documento->isLink()) {
|
||||
return response()->view('documenti.preview-fallback', [
|
||||
'documento' => $documento,
|
||||
])->header('X-Preview-Fallback', 'true');
|
||||
}
|
||||
|
||||
$previewableMimeTypes = [
|
||||
'image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml',
|
||||
'application/pdf',
|
||||
@@ -416,7 +477,8 @@ class DocumentoController extends Controller
|
||||
$this->authorizeDelete('documenti');
|
||||
$documento = Documento::findOrFail($documento);
|
||||
|
||||
if ($documento->repository_id) {
|
||||
if (!$documento->isLink()) {
|
||||
if ($documento->repository_id) {
|
||||
$repo = StorageRepository::find($documento->repository_id);
|
||||
if ($repo) {
|
||||
$filesystem = $this->repoService->buildFilesystem($repo);
|
||||
@@ -424,10 +486,11 @@ class DocumentoController extends Controller
|
||||
$filesystem->delete($documento->file_path);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$disk = $this->resolveStorageDisk($documento);
|
||||
if (Storage::disk($disk)->exists($documento->file_path)) {
|
||||
Storage::disk($disk)->delete($documento->file_path);
|
||||
} else {
|
||||
$disk = $this->resolveStorageDisk($documento);
|
||||
if (Storage::disk($disk)->exists($documento->file_path)) {
|
||||
Storage::disk($disk)->delete($documento->file_path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -604,8 +667,14 @@ class DocumentoController extends Controller
|
||||
return back()->with('error', 'Impossibile creare l\'archivio ZIP.');
|
||||
}
|
||||
|
||||
$skippedLinks = 0;
|
||||
$addedCount = 0;
|
||||
foreach ($documenti as $documento) {
|
||||
if ($documento->isLink()) {
|
||||
$skippedLinks++;
|
||||
continue;
|
||||
}
|
||||
|
||||
$extension = pathinfo($documento->file_path, PATHINFO_EXTENSION);
|
||||
$filename = $extension ? $documento->nome_file . '.' . $extension : $documento->nome_file;
|
||||
|
||||
@@ -638,11 +707,23 @@ class DocumentoController extends Controller
|
||||
$zip->close();
|
||||
|
||||
if ($addedCount === 0) {
|
||||
unlink($zipPath);
|
||||
return back()->with('error', 'Nessun file disponibile per il download.');
|
||||
if (file_exists($zipPath)) {
|
||||
@unlink($zipPath);
|
||||
}
|
||||
$message = 'Nessun file disponibile per il download.';
|
||||
if ($skippedLinks > 0) {
|
||||
$message .= " ({$skippedLinks} link esterni saltati)";
|
||||
}
|
||||
return back()->with('error', $message);
|
||||
}
|
||||
|
||||
return response()->download($zipPath, 'documenti.zip')->deleteFileAfterSend(true);
|
||||
$message = $addedCount . ' file scaricati.';
|
||||
if ($skippedLinks > 0) {
|
||||
$message .= " {$skippedLinks} link esterni saltati.";
|
||||
}
|
||||
|
||||
return response()->download($zipPath, 'documenti.zip')->deleteFileAfterSend(true)
|
||||
->with('success', $message);
|
||||
}
|
||||
|
||||
public function massDestroy(Request $request)
|
||||
@@ -659,18 +740,20 @@ class DocumentoController extends Controller
|
||||
$documenti = Documento::whereIn('id', $ids)->get();
|
||||
|
||||
foreach ($documenti as $documento) {
|
||||
if ($documento->repository_id) {
|
||||
$repo = StorageRepository::find($documento->repository_id);
|
||||
if ($repo) {
|
||||
$filesystem = $this->repoService->buildFilesystem($repo);
|
||||
if ($filesystem && $filesystem->fileExists($documento->file_path)) {
|
||||
$filesystem->delete($documento->file_path);
|
||||
if (!$documento->isLink()) {
|
||||
if ($documento->repository_id) {
|
||||
$repo = StorageRepository::find($documento->repository_id);
|
||||
if ($repo) {
|
||||
$filesystem = $this->repoService->buildFilesystem($repo);
|
||||
if ($filesystem && $filesystem->fileExists($documento->file_path)) {
|
||||
$filesystem->delete($documento->file_path);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$disk = $this->resolveStorageDisk($documento);
|
||||
if (Storage::disk($disk)->exists($documento->file_path)) {
|
||||
Storage::disk($disk)->delete($documento->file_path);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$disk = $this->resolveStorageDisk($documento);
|
||||
if (Storage::disk($disk)->exists($documento->file_path)) {
|
||||
Storage::disk($disk)->delete($documento->file_path);
|
||||
}
|
||||
}
|
||||
$documento->delete();
|
||||
|
||||
Reference in New Issue
Block a user