diff --git a/src/main/java/org/olat/core/commons/modules/bc/FileUploadController.java b/src/main/java/org/olat/core/commons/modules/bc/FileUploadController.java index b82d90a28ae0eb643133b9e9d60da4f05c3cd86a..b88f84bdb586c6d6ceca4f970aa4b92dda13e62a 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/FileUploadController.java +++ b/src/main/java/org/olat/core/commons/modules/bc/FileUploadController.java @@ -310,7 +310,9 @@ public class FileUploadController extends FormBasicController { fileEl.clearError(); } else if(metaDataCtr != null) { String filename = fileEl.getUploadFileName(); - if(!FileUtils.validateFilename(filename)) { + if(filename == null) { + metaDataCtr.getFilenameEl().setExampleKey("mf.filename.warning", null); + } else if(!FileUtils.validateFilename(filename)) { String suffix = FileUtils.getFileSuffix(filename); if(suffix != null && suffix.length() > 0) { filename = filename.substring(0, filename.length() - suffix.length() - 1); diff --git a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java index a67e1a5e219a9088e0a44e6a73798f2592118ced..bba5000030c01bb284bddbb616a09adaba03c344 100644 --- a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java +++ b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java @@ -495,6 +495,8 @@ public class GTAManagerImpl implements GTAManager, DeletableGroupData { @Override public List<BusinessGroup> filterBusinessGroups(List<BusinessGroup> groups, GTACourseNode cNode) { + if(groups == null || groups.isEmpty()) return new ArrayList<>(1); + List<BusinessGroup> filteredGroups = new ArrayList<>(); ModuleConfiguration config = cNode.getModuleConfiguration(); diff --git a/src/main/java/org/olat/ims/qti21/questionimport/CSVToAssessmentItemConverter.java b/src/main/java/org/olat/ims/qti21/questionimport/CSVToAssessmentItemConverter.java index 959dd90652d3d7af58294dd5607ca3d5aae07580..34ef25e428ac5dacc2e04481b2b10be813db6450 100644 --- a/src/main/java/org/olat/ims/qti21/questionimport/CSVToAssessmentItemConverter.java +++ b/src/main/java/org/olat/ims/qti21/questionimport/CSVToAssessmentItemConverter.java @@ -334,12 +334,17 @@ public class CSVToAssessmentItemConverter { private void build() { if(currentItem != null) { - String question = currentItem.getItemBuilder().getQuestion(); - if(!StringHelper.isHtml(question)) { - question = "<p>" + question + "</p>"; + try { + String question = currentItem.getItemBuilder().getQuestion(); + if(!StringHelper.isHtml(question)) { + question = "<p>" + question + "</p>"; + } + currentItem.getItemBuilder().setQuestion(question); + currentItem.getItemBuilder().build(); + } catch (Exception e) { + log.error("", e); + currentItem.setHasError(true); } - currentItem.getItemBuilder().setQuestion(question); - currentItem.getItemBuilder().build(); } } diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java index efad27cece58dc2e0a36d1416683f8f0e0decacc..1c862478460845f07cf5b7b6b85f5790fa932984 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java @@ -713,12 +713,17 @@ public class AssessmentTestComposerController extends MainLayoutBasicController TreeNode sectionNode = getNearestSection(selectedNode); String firstItemId = null; + boolean errorOnImport = false; Map<AssessmentItemRef,AssessmentItem> flyingObjects = new HashMap<>(); try { AssessmentSection section = (AssessmentSection)sectionNode.getUserObject(); - List<AssessmentItemAndMetadata> itemsAndMetadata = importPackage.getItems(); for(AssessmentItemAndMetadata itemAndMetadata:itemsAndMetadata) { + if(itemAndMetadata.isHasError()) { + errorOnImport = true; + continue; + } + AssessmentItemBuilder itemBuilder = itemAndMetadata.getItemBuilder(); AssessmentItem assessmentItem = itemBuilder.getAssessmentItem(); AssessmentItemRef itemRef = doInsert(section, assessmentItem); @@ -731,19 +736,24 @@ public class AssessmentTestComposerController extends MainLayoutBasicController flyingObjects.put(itemRef, assessmentItem); } } catch (URISyntaxException e) { - showError("error.import.question"); + errorOnImport = true; logError("", e); } + if(errorOnImport) { + showError("error.import.question"); + } - //persist metadata - doSaveAssessmentTest(flyingObjects); - doSaveManifest(); - updateTreeModel(false); + if(firstItemId != null) { + //persist metadata + doSaveAssessmentTest(flyingObjects); + doSaveManifest(); + updateTreeModel(false); - TreeNode newItemNode = menuTree.getTreeModel().getNodeById(firstItemId); - menuTree.setSelectedNode(newItemNode); - menuTree.open(newItemNode); - partEditorFactory(ureq, newItemNode); + TreeNode newItemNode = menuTree.getTreeModel().getNodeById(firstItemId); + menuTree.setSelectedNode(newItemNode); + menuTree.open(newItemNode); + partEditorFactory(ureq, newItemNode); + } } private AssessmentItemRef doInsert(AssessmentSection section, AssessmentItem assessmentItem)