Skip to content
Snippets Groups Projects
Commit 72c274e4 authored by Ron Lucke's avatar Ron Lucke Committed by Elmar Ludwig
Browse files

fix #885 and add some error messages and exception handling

parent 687a1317
No related branches found
No related tags found
No related merge requests found
...@@ -91,8 +91,11 @@ ...@@ -91,8 +91,11 @@
<courseware-tab :name="$gettext('Kopieren')" :index="2"> <courseware-tab :name="$gettext('Kopieren')" :index="2">
<courseware-manager-copy-selector @loadSelf="reloadElements" @reloadElement="reloadElements" /> <courseware-manager-copy-selector @loadSelf="reloadElements" @reloadElement="reloadElements" />
</courseware-tab> </courseware-tab>
<courseware-tab :name="$gettext('Importieren')" :index="3">
<courseware-companion-box v-show="!importRunning && importDone" :msgCompanion="$gettext('Import erfolgreich!')" mood="special"/> <courseware-tab :name="$gettext('Importieren')" :index="3">
<courseware-companion-box v-show="!importRunning && importDone && importErrors.length === 0" :msgCompanion="$gettext('Import erfolgreich!')" mood="special"/>
<courseware-companion-box v-show="!importRunning && importDone && importErrors.length > 0" :msgCompanion="$gettext('Import abgeschlossen. Es sind Fehler aufgetreten!')" mood="unsure"/>
<courseware-companion-box v-show="!importRunning && !importDone && importErrors.length > 0" :msgCompanion="$gettext('Import fehlgeschlagen. Es sind Fehler aufgetreten!')" mood="sad"/>
<courseware-companion-box v-show="importRunning" :msgCompanion="$gettext('Import läuft. Bitte verlassen Sie die Seite nicht bis der Import abgeschlossen wurde.')" mood="pointing"/> <courseware-companion-box v-show="importRunning" :msgCompanion="$gettext('Import läuft. Bitte verlassen Sie die Seite nicht bis der Import abgeschlossen wurde.')" mood="pointing"/>
<button <button
v-show="!importRunning" v-show="!importRunning"
...@@ -130,11 +133,12 @@ ...@@ -130,11 +133,12 @@
> >
<translate>Alles importieren</translate> <translate>Alles importieren</translate>
</button> </button>
<div v-if="importErrors.length > 0">
<ul v-if="importErrors.length > 0"> <h3><translate>Fehlermeldungen:</translate></h3>
<li v-for="error in importErrors"> {{error}} </li> <ul>
</ul> <li v-for="(error, index) in importErrors" :key="index"> {{error}} </li>
</ul>
</div>
<input ref="importFile" type="file" accept=".zip" @change="setImport" style="visibility: hidden" /> <input ref="importFile" type="file" accept=".zip" @change="setImport" style="visibility: hidden" />
</courseware-tab> </courseware-tab>
</courseware-tabs> </courseware-tabs>
...@@ -231,6 +235,7 @@ export default { ...@@ -231,6 +235,7 @@ export default {
companionInfo: 'companionInfo', companionInfo: 'companionInfo',
setImportFilesProgress: 'setImportFilesProgress', setImportFilesProgress: 'setImportFilesProgress',
setImportStructuresProgress: 'setImportStructuresProgress', setImportStructuresProgress: 'setImportStructuresProgress',
setImportErrors: 'setImportErrors',
}), }),
async reloadElements() { async reloadElements() {
await this.setCurrentId(this.currentId); await this.setCurrentId(this.currentId);
...@@ -272,6 +277,7 @@ export default { ...@@ -272,6 +277,7 @@ export default {
setImport(event) { setImport(event) {
this.importZip = event.target.files[0]; this.importZip = event.target.files[0];
this.setImportErrors([]);
}, },
async doImportCourseware() { async doImportCourseware() {
...@@ -286,11 +292,47 @@ export default { ...@@ -286,11 +292,47 @@ export default {
view.zip = new JSZip(); view.zip = new JSZip();
await view.zip.loadAsync(this.importZip).then(async function () { await view.zip.loadAsync(this.importZip).then(async function () {
let data = await view.zip.file('courseware.json').async('string'); let errors = [];
let courseware = JSON.parse(data); let missingFiles = false;
if (view.zip.file('courseware.json') === null) {
errors.push(view.$gettext('Das Archiv enthält keine courseware.json Datei.'));
missingFiles = true;
}
if (view.zip.file('files.json') === null) {
errors.push(view.$gettext('Das Archiv enthält keine files.json Datei.'));
missingFiles = true;
}
if (view.zip.file('data.xml') !== null) {
errors.push(view.$gettext('Das Archiv enthält eine data.xml Datei. Möglicherweise handelt es sich um einen Export aus dem Courseware-Plugin. Diese Archive sind nicht kompatibel mit dieser Courseware.'));
}
if (missingFiles) {
view.setImportErrors(errors);
return;
}
let data = await view.zip.file('courseware.json').async('string');
let courseware = null;
let data_files = await view.zip.file('files.json').async('string'); let data_files = await view.zip.file('files.json').async('string');
let files = JSON.parse(data_files); let files = null;
let jsonErrors = false;
try {
courseware = JSON.parse(data);
} catch (error) {
jsonErrors = true;
errors.push(view.$gettext('Die Beschreibung der Courseware-Inhalte ist nicht valide.'));
errors.push(error);
}
try {
files = JSON.parse(data_files);
} catch (error) {
jsonErrors = true;
errors.push(view.$gettext('Die Beschreibung der Dateien ist nicht valide.'));
errors.push(error);
}
if (jsonErrors) {
view.setImportErrors(errors);
return;
}
await view.loadCoursewareStructure(); await view.loadCoursewareStructure();
let parent_id = view.courseware.relationships.root.data.id; let parent_id = view.courseware.relationships.root.data.id;
...@@ -313,7 +355,7 @@ export default { ...@@ -313,7 +355,7 @@ export default {
} else { } else {
return (size / 1048576).toFixed(2) + ' MB'; return (size / 1048576).toFixed(2) + ' MB';
} }
} },
}, },
watch: { watch: {
courseware(newValue, oldValue) { courseware(newValue, oldValue) {
...@@ -322,5 +364,12 @@ export default { ...@@ -322,5 +364,12 @@ export default {
this.setSelfId(currentId); this.setSelfId(currentId);
}, },
}, },
mounted() {
let view = this;
window.onbeforeunload = function() {
return view.importRunning ? true : null
}
}
}; };
</script> </script>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment