]> BookStack Code Mirror - bookstack/blobdiff - app/Exports/Controllers/ImportController.php
ZIP Import: Added model+migration, and reader class
[bookstack] / app / Exports / Controllers / ImportController.php
index 9eefb0974389bd4a6a3b9014f54ce74626ec8518..bbf0ff57d8ca0c52983683551b7780ade16b70cc 100644 (file)
@@ -2,6 +2,9 @@
 
 namespace BookStack\Exports\Controllers;
 
+use BookStack\Exports\Import;
+use BookStack\Exports\ZipExports\ZipExportReader;
+use BookStack\Exports\ZipExports\ZipExportValidator;
 use BookStack\Http\Controller;
 use Illuminate\Http\Request;
 
@@ -16,15 +19,43 @@ 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
+        $this->validate($request, [
+            'file' => ['required', 'file']
+        ]);
+
+        $file = $request->file('file');
+        $zipPath = $file->getRealPath();
+
+        $errors = (new ZipExportValidator($zipPath))->validate();
+        if ($errors) {
+            session()->flash('validation_errors', $errors);
+            return redirect('/import');
+        }
+
+        $zipEntityInfo = (new ZipExportReader($zipPath))->getEntityInfo();
+        $import = new Import();
+        $import->name = $zipEntityInfo['name'];
+        $import->book_count = $zipEntityInfo['book_count'];
+        $import->chapter_count = $zipEntityInfo['chapter_count'];
+        $import->page_count = $zipEntityInfo['page_count'];
+        $import->created_by = user()->id;
+        $import->size = filesize($zipPath);
+        // TODO - Set path
+        // TODO - Save
+
+        // TODO - Split out attachment service to separate out core filesystem/disk stuff
+        //        To reuse for import handling
+
+        dd('passed');
         // TODO - Upload to storage
-        // TODO - Store info/results from validator
+        // TODO - Store info/results for display:
         // TODO - Send user to next import stage
     }
 }