From 94316f2aec7bb18e04416f27e5936ac992eca564 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Sat, 23 Feb 2019 16:24:56 +0100 Subject: [PATCH] OO-3906: ensure uploaded filenames are unique --- .../model/xml/AssessmentItemBuilder.java | 19 +++++++++++++++++++ .../interactions/DrawingEditorController.java | 3 +++ .../interactions/HotspotEditorController.java | 3 +++ 3 files changed, 25 insertions(+) diff --git a/src/main/java/org/olat/ims/qti21/model/xml/AssessmentItemBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/AssessmentItemBuilder.java index f38682ddddf..5b8d8b0585a 100644 --- a/src/main/java/org/olat/ims/qti21/model/xml/AssessmentItemBuilder.java +++ b/src/main/java/org/olat/ims/qti21/model/xml/AssessmentItemBuilder.java @@ -22,6 +22,7 @@ package org.olat.ims.qti21.model.xml; import static org.olat.ims.qti21.QTI21Constants.MAXSCORE_IDENTIFIER; import static org.olat.ims.qti21.QTI21Constants.MINSCORE_IDENTIFIER; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -30,6 +31,7 @@ import javax.xml.transform.stream.StreamResult; import org.olat.core.gui.render.StringOutput; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; +import org.olat.core.util.FileUtils; import org.olat.ims.qti21.QTI21Constants; import org.olat.ims.qti21.model.QTI21QuestionType; import org.olat.ims.qti21.model.xml.ModalFeedbackBuilder.ModalFeedbackType; @@ -343,6 +345,23 @@ public abstract class AssessmentItemBuilder { return interactionNames; } + /** + * + * @param uploadedFilename The uploaded filename + * @param currentFilename The current filename + * @param directory The directory where the file will be saved + * @return A proposition of unique filename + */ + public String checkFilename(String uploadedFilename, String currentFilename, File directory) { + if(uploadedFilename == null) return null; + + if(!uploadedFilename.equals(currentFilename)) { + File file = new File(directory, uploadedFilename); + uploadedFilename = FileUtils.rename(file); + } + return uploadedFilename; + } + protected final void serializeJqtiObject(QtiNode block, StringOutput sb) { final XsltSerializationOptions xsltSerializationOptions = new XsltSerializationOptions(); xsltSerializationOptions.setIndenting(false); diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/DrawingEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/DrawingEditorController.java index 2edf5f4f3c0..337753345f3 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/DrawingEditorController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/DrawingEditorController.java @@ -217,6 +217,9 @@ public class DrawingEditorController extends FormBasicController { backgroundEl.validate(status); if(status.isEmpty()) { flc.setDirty(true); + String uniqueFilename = itemBuilder + .checkFilename(backgroundEl.getUploadFileName(), itemBuilder.getBackground(), itemFile.getParentFile()); + backgroundEl.setUploadFileName(uniqueFilename); backgroundImage = backgroundEl.moveUploadFileTo(itemFile.getParentFile()); backgroundEl.setInitialFile(backgroundImage); } diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java index 7db80fd6ccc..446c02193be 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java @@ -362,6 +362,9 @@ public class HotspotEditorController extends FormBasicController { backgroundEl.validate(status); if(status.isEmpty()) { flc.setDirty(true); + String uniqueFilename = itemBuilder + .checkFilename(backgroundEl.getUploadFileName(), itemBuilder.getBackground(), itemFile.getParentFile()); + backgroundEl.setUploadFileName(uniqueFilename); backgroundImage = backgroundEl.moveUploadFileTo(itemFile.getParentFile()); Size size = imageService.getSize(new LocalFileImpl(backgroundImage), null); optimizeResizeEl(size, true); -- GitLab