]> BookStack Code Mirror - bookstack/blobdiff - app/Exports/Controllers/ImportController.php
Merge pull request #5731 from BookStackApp/lexical_jul25
[bookstack] / app / Exports / Controllers / ImportController.php
index 582fff975d2880a4928e3f884fd320d18071e74d..b938dac8e29191b045eab9e8022afcf1018da678 100644 (file)
@@ -4,7 +4,7 @@ declare(strict_types=1);
 
 namespace BookStack\Exports\Controllers;
 
-use BookStack\Activity\ActivityType;
+use BookStack\Exceptions\ZipImportException;
 use BookStack\Exceptions\ZipValidationException;
 use BookStack\Exports\ImportRepo;
 use BookStack\Http\Controller;
@@ -23,9 +23,8 @@ class ImportController extends Controller
      * Show the view to start a new import, and also list out the existing
      * in progress imports that are visible to the user.
      */
-    public function start(Request $request)
+    public function start()
     {
-        // TODO - Test visibility access for listed items
         $imports = $this->imports->getVisibleImports();
 
         $this->setPageTitle(trans('entities.import'));
@@ -49,12 +48,9 @@ class ImportController extends Controller
         try {
             $import = $this->imports->storeFromUpload($file);
         } catch (ZipValidationException $exception) {
-            session()->flash('validation_errors', $exception->errors);
-            return redirect('/import');
+            return redirect('/import')->with('validation_errors', $exception->errors);
         }
 
-        $this->logActivity(ActivityType::IMPORT_CREATE, $import);
-
         return redirect($import->getUrl());
     }
 
@@ -64,27 +60,51 @@ class ImportController extends Controller
      */
     public function show(int $id)
     {
-        // TODO - Test visibility access
         $import = $this->imports->findVisible($id);
 
         $this->setPageTitle(trans('entities.import_continue'));
 
         return view('exports.import-show', [
             'import' => $import,
+            'data' => $import->decodeMetadata(),
         ]);
     }
 
+    /**
+     * Run the import process against an uploaded import ZIP.
+     */
+    public function run(int $id, Request $request)
+    {
+        $import = $this->imports->findVisible($id);
+        $parent = null;
+
+        if ($import->type === 'page' || $import->type === 'chapter') {
+            session()->setPreviousUrl($import->getUrl());
+            $data = $this->validate($request, [
+                'parent' => ['required', 'string'],
+            ]);
+            $parent = $data['parent'];
+        }
+
+        try {
+            $entity = $this->imports->runImport($import, $parent);
+        } catch (ZipImportException $exception) {
+            session()->flush();
+            $this->showErrorNotification(trans('errors.import_zip_failed_notification'));
+            return redirect($import->getUrl())->with('import_errors', $exception->errors);
+        }
+
+        return redirect($entity->getUrl());
+    }
+
     /**
      * Delete an active pending import from the filesystem and database.
      */
     public function delete(int $id)
     {
-        // TODO - Test visibility access
         $import = $this->imports->findVisible($id);
         $this->imports->deleteImport($import);
 
-        $this->logActivity(ActivityType::IMPORT_DELETE, $import);
-
         return redirect('/import');
     }
 }