user()->can(\App\Enums\Auth\Permissions::FILE_UPLOAD->value)) {
throw new AuthorizationException();
}
// Validate the incoming request with appropriate rules for file uploads
$request->validate([
'files.*' => 'required|file',
'gamepath.*' => 'required|string',
]);
//dd($request);
$duplicateFiles = [];
$overwrittenFiles = [];
$uploadedFiles = [];
// Handle file upload logic
if ($request->hasFile('files')) {
for($i = 0; $i < count($request->file('files')); $i++) {
$file = $request->file('files')[$i];
$filename = $file->getClientOriginalName();
$filehash = str(hash_file('sha256', $file->getRealPath()))->upper();
$gameFile = GameFile::where('name', $filename)->first() ?? new GameFile;
if ($gameFile->hash == $filehash) {
$duplicateFiles[] = $gameFile->name;
continue;
}
if (isset($gameFile->id)) {
$overwrittenFiles[] = $gameFile->name;
}
$gameFile->name = $filename;
$gameFile->hash = $filehash;
$file->storeAs('', $gameFile->name, ['disk' => 'dg_public']);
$uploadedFiles[] = $gameFile->name;
$gameFile->game_path = $request->game_path[$i];
$gameFile->save();
}
}
if (count($uploadedFiles) === 0) {
Session::flash('alert-error', 'No files were uploaded');
}
// Optionally, you can return a response
if (count($overwrittenFiles) > 0) {
Session::flash('alert-warning', 'Files uploaded successfully. The following files was overwritten:
' . implode('
', $overwrittenFiles));
//return response()->json(['message' => 'Only some files was uploaded successfully. The following files already exist: ' . implode(', ', $overwrittenFiles)]);
}
if (count($duplicateFiles) > 0) {
Session::flash('alert-warning', 'The following files already exist:
' . implode('
', $duplicateFiles));
//return response()->json(['message' => 'Only some files was uploaded successfully. The following files already exist: ' . implode(', ', $duplicateFiles)]);
}
if (count($uploadedFiles) > 0) {
Session::flash('alert-success', 'Files uploaded successfully
' . implode('
', $uploadedFiles));
//return response()->json(['message' => 'Files uploaded successfully']);
}
return redirect()->back();
//return response()->json(['message' => 'Files uploaded successfully']);
}
public function index() : View {
if (!auth()->user()->can(\App\Enums\Auth\Permissions::FILE_UPLOAD->value)) {
throw new AuthorizationException();
}
return view('file-manager', ['files' => GameFile::latest()->get()]);
}
}