]> BookStack Code Mirror - bookstack/blobdiff - app/Exports/Controllers/ImportController.php
ZIP Import: Added upload handling
[bookstack] / app / Exports / Controllers / ImportController.php
index 9eefb0974389bd4a6a3b9014f54ce74626ec8518..640b4c1089147bf1dac2d31d25de4acc6c67ca89 100644 (file)
@@ -2,13 +2,17 @@
 
 namespace BookStack\Exports\Controllers;
 
+use BookStack\Exceptions\ZipValidationException;
+use BookStack\Exports\ImportRepo;
 use BookStack\Http\Controller;
+use BookStack\Uploads\AttachmentService;
 use Illuminate\Http\Request;
 
 class ImportController extends Controller
 {
-    public function __construct()
-    {
+    public function __construct(
+        protected ImportRepo $imports,
+    ) {
         $this->middleware('can:content-import');
     }
 
@@ -16,15 +20,25 @@ class ImportController extends Controller
     {
         // TODO - Show existing imports for user (or for all users if admin-level user)
 
-        return view('exports.import');
+        return view('exports.import', [
+            'zipErrors' => session()->pull('validation_errors') ?? [],
+        ]);
     }
 
     public function upload(Request $request)
     {
-        // TODO - Read existing ZIP upload and send through validator
-            // TODO - If invalid, return user with errors
-        // TODO - Upload to storage
-        // TODO - Store info/results from validator
-        // TODO - Send user to next import stage
+        $this->validate($request, [
+            'file' => ['required', ...AttachmentService::getFileValidationRules()]
+        ]);
+
+        $file = $request->file('file');
+        try {
+            $import = $this->imports->storeFromUpload($file);
+        } catch (ZipValidationException $exception) {
+            session()->flash('validation_errors', $exception->errors);
+            return redirect('/import');
+        }
+
+        return redirect("imports/{$import->id}");
     }
 }