From 83fc7ce5aac7b0824f19508c73f7688ff7cee91c Mon Sep 17 00:00:00 2001
From: Ron Lucke <lucke@elan-ev.de>
Date: Wed, 10 May 2023 13:51:24 +0000
Subject: [PATCH] fix #2619

Closes #2619

Merge request studip/studip!1770
---
 .../CoursewareShelfDialogImport.vue           |  4 +++-
 ...oursewareStructuralElementDialogImport.vue |  4 +++-
 resources/vue/mixins/courseware/import.js     | 22 +++++++++++--------
 3 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/resources/vue/components/courseware/CoursewareShelfDialogImport.vue b/resources/vue/components/courseware/CoursewareShelfDialogImport.vue
index 171f34dfc48..cc8e1001f28 100644
--- a/resources/vue/components/courseware/CoursewareShelfDialogImport.vue
+++ b/resources/vue/components/courseware/CoursewareShelfDialogImport.vue
@@ -115,7 +115,9 @@
                             {{ importStructuresState }}
                         </div>
                     </fieldset>
-                    <fieldset v-show="importErrors.length > 0">
+                </form>
+                <form v-if="importErrors.length > 0" class="default" @submit.prevent="">
+                    <fieldset>
                         <legend>{{$gettext('Fehlermeldungen')}}</legend>
                         <ul>
                             <li v-for="(error, index) in importErrors" :key="index"> {{error}} </li>
diff --git a/resources/vue/components/courseware/CoursewareStructuralElementDialogImport.vue b/resources/vue/components/courseware/CoursewareStructuralElementDialogImport.vue
index 4ce202eb0b6..3c3974dbe5c 100644
--- a/resources/vue/components/courseware/CoursewareStructuralElementDialogImport.vue
+++ b/resources/vue/components/courseware/CoursewareStructuralElementDialogImport.vue
@@ -61,7 +61,9 @@
                         {{ importStructuresState }}
                     </div>
                 </fieldset>
-                <fieldset v-show="importErrors.length > 0">
+            </form>
+            <form v-if="importErrors.length > 0" class="default" @submit.prevent="">
+                <fieldset>
                     <legend>{{$gettext('Fehlermeldungen')}}</legend>
                     <ul>
                         <li v-for="(error, index) in importErrors" :key="index"> {{error}} </li>
diff --git a/resources/vue/mixins/courseware/import.js b/resources/vue/mixins/courseware/import.js
index 4b46ab89dae..a7c94201dff 100644
--- a/resources/vue/mixins/courseware/import.js
+++ b/resources/vue/mixins/courseware/import.js
@@ -168,22 +168,24 @@ export default {
             if (element.length) {
                 for (var i = 0; i < element.length; i++) {
                     this.setImportStructuresState(this.$gettext('Lege Seite an:') + ' ' + element[i].attributes.title);
+                    let new_element = null;
                     try {
                         await this.createStructuralElement({
                             attributes: element[i].attributes,
                             parentId: parent_id,
                             currentId: parent_id,
                         });
+                        new_element = this.lastCreatedElements;
                     } catch(error) {
                         this.currentImportErrors.push(this.$gettext('Seite konnte nicht erstellt werden') + ': '
                         + element.attributes.title);
-
-                        continue;
                     }
 
                     this.importElementCounter++;
-
-                    let new_element = this.lastCreatedElements;
+                    if (new_element === null) {
+                        continue;
+                    }
+                    
 
                     if (element[i].imageId) {
                         await this.setStructuralElementImage(new_element, element[i].imageId, files);
@@ -221,30 +223,32 @@ export default {
 
         async importContainer(container, structuralElement, files) {
             this.setImportStructuresState(this.$gettext('Lege Abschnitt an:') + ' ' + container.attributes.title);
+            let new_container = null;
             try {
                 await this.createContainer({
                     attributes: container.attributes,
                     structuralElementId: structuralElement.id,
                 });
-
+                new_container = this.lastCreatedContainers;
             } catch(error) {
                 this.currentImportErrors.push(this.$gettext('Abschnitt konnte nicht erstellt werden') + ': '
                 + structuralElement.attributes.title + '→'
                 + container.attributes.title);
-
-                return null;
             }
 
             this.importElementCounter++;
-            let new_container = this.lastCreatedContainers;
+            if (new_container === null) {
+                return null;
+            }
+            
             await this.unlockObject({ id: new_container.id, type: 'courseware-containers' });
 
             if (container.blocks?.length) {
                 let new_block = null;
                 for (var k = 0; k < container.blocks.length; k++) {
                     new_block = await this.importBlock(container.blocks[k], new_container, files, structuralElement);
+                    this.importElementCounter++;
                     if (new_block !== null) {
-                        this.importElementCounter++;
                         try {
                             await this.updateContainerPayload(new_container, structuralElement.id, container.blocks[k].id, new_block.id);
                         } catch(error) {
-- 
GitLab