3 namespace BookStack\Exports\Controllers;
5 use BookStack\Exports\Import;
6 use BookStack\Exports\ZipExports\ZipExportReader;
7 use BookStack\Exports\ZipExports\ZipExportValidator;
8 use BookStack\Http\Controller;
9 use Illuminate\Http\Request;
11 class ImportController extends Controller
13 public function __construct()
15 $this->middleware('can:content-import');
18 public function start(Request $request)
20 // TODO - Show existing imports for user (or for all users if admin-level user)
22 return view('exports.import', [
23 'zipErrors' => session()->pull('validation_errors') ?? [],
27 public function upload(Request $request)
29 $this->validate($request, [
30 'file' => ['required', 'file']
33 $file = $request->file('file');
34 $zipPath = $file->getRealPath();
36 $errors = (new ZipExportValidator($zipPath))->validate();
38 session()->flash('validation_errors', $errors);
39 return redirect('/import');
42 $zipEntityInfo = (new ZipExportReader($zipPath))->getEntityInfo();
43 $import = new Import();
44 $import->name = $zipEntityInfo['name'];
45 $import->book_count = $zipEntityInfo['book_count'];
46 $import->chapter_count = $zipEntityInfo['chapter_count'];
47 $import->page_count = $zipEntityInfo['page_count'];
48 $import->created_by = user()->id;
49 $import->size = filesize($zipPath);
53 // TODO - Split out attachment service to separate out core filesystem/disk stuff
54 // To reuse for import handling
57 // TODO - Upload to storage
58 // TODO - Store info/results for display:
59 // TODO - Send user to next import stage