diff --git a/src/main/java/org/olat/modules/forms/ui/DisclaimerController.java b/src/main/java/org/olat/modules/forms/ui/DisclaimerController.java index 8722ec126e3f920b31507eed3d347149025b5ff9..f5d44d5fbd126d30032d2cb622dcbee9a82c95da 100644 --- a/src/main/java/org/olat/modules/forms/ui/DisclaimerController.java +++ b/src/main/java/org/olat/modules/forms/ui/DisclaimerController.java @@ -124,14 +124,14 @@ public class DisclaimerController extends FormBasicController implements Evaluat } @Override - public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) { + public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses) { response = responses.getResponse(session, disclaimer.getId()); boolean accepted = response != null && ACCEPTED_DB_KEY.equals(response.getStringuifiedResponse()); agreementEl.select(ACCEPTED_KEY, accepted); } @Override - public void saveResponse(EvaluationFormSession session) { + public void saveResponse(UserRequest ureq, EvaluationFormSession session) { boolean accepted = agreementEl.isAtLeastSelected(1); if (accepted && response == null) { response = evaluationFormManager.createStringResponse(disclaimer.getId(), session, ACCEPTED_DB_KEY); diff --git a/src/main/java/org/olat/modules/forms/ui/FileUploadController.java b/src/main/java/org/olat/modules/forms/ui/FileUploadController.java index 378c9218a51394749f3e847ec44780911322bb48..65d2159cbdf5ee5df1b3b7d5d53e07afcd849274 100644 --- a/src/main/java/org/olat/modules/forms/ui/FileUploadController.java +++ b/src/main/java/org/olat/modules/forms/ui/FileUploadController.java @@ -23,6 +23,8 @@ import java.io.File; import java.io.IOException; import java.util.Set; +import org.apache.logging.log4j.Logger; +import org.olat.core.commons.services.vfs.VFSRepositoryService; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; @@ -33,9 +35,12 @@ import org.olat.core.gui.components.form.flexible.impl.FormEvent; import org.olat.core.gui.components.form.flexible.impl.elements.FileElementEvent; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; -import org.apache.logging.log4j.Logger; +import org.olat.core.gui.util.CSSHelper; import org.olat.core.logging.Tracing; import org.olat.core.util.CodeHelper; +import org.olat.core.util.Formatter; +import org.olat.core.util.vfs.VFSLeaf; +import org.olat.core.util.vfs.VFSMediaMapper; import org.olat.modules.forms.EvaluationFormManager; import org.olat.modules.forms.EvaluationFormResponse; import org.olat.modules.forms.EvaluationFormSession; @@ -63,23 +68,26 @@ public class FileUploadController extends FormBasicController implements Evaluat @Autowired private EvaluationFormManager evaluationFormManager; - + @Autowired + private VFSRepositoryService vfsRepositoryService; public FileUploadController(UserRequest ureq, WindowControl wControl, FileUpload fileUpload) { - super(ureq, wControl, LAYOUT_VERTICAL); + super(ureq, wControl, "file_upload"); this.fileUpload = fileUpload; initForm(ureq); } public FileUploadController(UserRequest ureq, WindowControl wControl, FileUpload fileUpload, Form rootForm) { - super(ureq, wControl, LAYOUT_VERTICAL, null, rootForm); + super(ureq, wControl, LAYOUT_CUSTOM, "file_upload", rootForm); this.fileUpload = fileUpload; initForm(ureq); } @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { - fileEl = uifactory.addFileElement(getWindowControl(), "file_upload_" + CodeHelper.getRAMUniqueID(), "", formLayout); + String fileElId = "file_upload_" + CodeHelper.getRAMUniqueID(); + flc.contextPut("fileUpload", fileElId); + fileEl = uifactory.addFileElement(getWindowControl(), fileElId, "", formLayout); fileEl.setPreview(ureq.getUserSession(), true); fileEl.setButtonsEnabled(false); fileEl.setDeleteEnabled(true); @@ -95,6 +103,33 @@ public class FileUploadController extends FormBasicController implements Evaluat Set<String> mimeTypes = MimeTypeSetFactory.getMimeTypes(fileUpload.getMimeTypeSetKey()); fileEl.limitToMimeType(mimeTypes, null, null); } + + public void updateReadOnlyUI(UserRequest ureq, EvaluationFormResponse response) { + if (response != null) { + String filename = response.getStringuifiedResponse(); + String filesize = null; + String mapperUri = null; + String iconCss = null; + String thumbUri = null; + VFSLeaf leaf = evaluationFormManager.loadResponseLeaf(response); + if (leaf != null) { + filename = leaf.getName(); + flc.contextPut("filename", filename); + filesize = Formatter.formatBytes((leaf).getSize()); + flc.contextPut("filesize", filesize); + mapperUri = registerCacheableMapper(ureq, "file-upload-" + CodeHelper.getRAMUniqueID() + "-" + leaf.getLastModified(), new VFSMediaMapper(leaf)); + flc.contextPut("mapperUri", mapperUri); + iconCss = CSSHelper.createFiletypeIconCssClassFor(leaf.getName()); + flc.contextPut("iconCss", iconCss); + + VFSLeaf thumb = vfsRepositoryService.getThumbnail(leaf, 200, 200, false); + if (thumb != null) { + thumbUri = registerCacheableMapper(ureq, "file-upload-thumb" + CodeHelper.getRAMUniqueID() + "-" + leaf.getLastModified(), new VFSMediaMapper(thumb)); + flc.contextPut("thumbUri", thumbUri); + } + } + } + } @Override protected void formOK(UserRequest ureq) { @@ -127,7 +162,7 @@ public class FileUploadController extends FormBasicController implements Evaluat @Override public void setReadOnly(boolean readOnly) { - fileEl.setEnabled(!readOnly); + flc.contextPut("readonly", Boolean.valueOf(readOnly)); } @Override @@ -136,17 +171,19 @@ public class FileUploadController extends FormBasicController implements Evaluat } @Override - public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) { + public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses) { response = responses.getResponse(session, fileUpload.getId()); File responseFile = evaluationFormManager.loadResponseFile(response); if (responseFile != null) { fileEl.setInitialFile(responseFile); } fileEl.setButtonsEnabled(true); + + updateReadOnlyUI(ureq, response); } @Override - public void saveResponse(EvaluationFormSession session) { + public void saveResponse(UserRequest ureq, EvaluationFormSession session) { if (fileEl.isUploadSuccess()) { if (newFileUploaded) { File file = fileEl.getUploadFile(); @@ -168,6 +205,7 @@ public class FileUploadController extends FormBasicController implements Evaluat evaluationFormManager.deleteResponse(response); response = null; } + updateReadOnlyUI(ureq, response); } } diff --git a/src/main/java/org/olat/modules/forms/ui/MultipleChoiceController.java b/src/main/java/org/olat/modules/forms/ui/MultipleChoiceController.java index c7990d4b292a8adddb86ee94f08d2977f9d59222..d455efb48dfdd901685168c88285b43f9bb1ab1a 100644 --- a/src/main/java/org/olat/modules/forms/ui/MultipleChoiceController.java +++ b/src/main/java/org/olat/modules/forms/ui/MultipleChoiceController.java @@ -145,7 +145,7 @@ public class MultipleChoiceController extends FormBasicController implements Eva } @Override - public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) { + public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses) { multipleChoiceResponses = responses.getResponses(session, multipleChoice.getId()); for (EvaluationFormResponse response: multipleChoiceResponses) { String key = response.getStringuifiedResponse(); @@ -160,7 +160,7 @@ public class MultipleChoiceController extends FormBasicController implements Eva } @Override - public void saveResponse(EvaluationFormSession session) { + public void saveResponse(UserRequest ureq, EvaluationFormSession session) { evaluationFormManager.deleteResponses(multipleChoiceResponses); Collection<String> selectedChoises = new ArrayList<>(multipleChoiceEl.getSelectedKeys()); diff --git a/src/main/java/org/olat/modules/forms/ui/RubricController.java b/src/main/java/org/olat/modules/forms/ui/RubricController.java index 6be0984f005f37778d69dfb11edbcf5aeba871ba..3f24602fbe15fa4660b22cb9a01595cc96cf8edd 100644 --- a/src/main/java/org/olat/modules/forms/ui/RubricController.java +++ b/src/main/java/org/olat/modules/forms/ui/RubricController.java @@ -252,7 +252,7 @@ public class RubricController extends FormBasicController implements EvaluationF } @Override - public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) { + public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses) { for (SliderWrapper sliderWrapper: sliderWrappers) { EvaluationFormResponse response = responses.getResponse(session, sliderWrapper.getId()); if (response != null) { @@ -309,7 +309,7 @@ public class RubricController extends FormBasicController implements EvaluationF } @Override - public void saveResponse(EvaluationFormSession session) { + public void saveResponse(UserRequest ureq, EvaluationFormSession session) { for (SliderWrapper sliderWrapper: sliderWrappers) { boolean noResponseSelected = sliderWrapper.getNoResponseEl() != null && sliderWrapper.getNoResponseEl().isOneSelected(); if (noResponseSelected) { diff --git a/src/main/java/org/olat/modules/forms/ui/SessionInformationsController.java b/src/main/java/org/olat/modules/forms/ui/SessionInformationsController.java index 23cfda6feda0bcabc8b7a450fd627cc046844f1b..6386f1bd4a5a49fabd9cf04f98305c8f22184cea 100644 --- a/src/main/java/org/olat/modules/forms/ui/SessionInformationsController.java +++ b/src/main/java/org/olat/modules/forms/ui/SessionInformationsController.java @@ -190,7 +190,7 @@ public class SessionInformationsController extends FormBasicController implement } @Override - public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) { + public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses) { for (SessionInformationWrapper wrapper: sessionInformationWrappers) { String value = SessionInformationsUIFactory.getValue(wrapper.getInformationType(), session); if (StringHelper.containsNonWhitespace(value)) { @@ -200,7 +200,7 @@ public class SessionInformationsController extends FormBasicController implement } @Override - public void saveResponse(EvaluationFormSession session) { + public void saveResponse(UserRequest ureq, EvaluationFormSession session) { EvaluationFormSession reloadedSession = evaluationFormManager.loadSessionByKey(session); if (reloadedSession != null) { SessionInformationWrapper emailWrapper = getWrapper(InformationType.USER_EMAIL); diff --git a/src/main/java/org/olat/modules/forms/ui/SingleChoiceController.java b/src/main/java/org/olat/modules/forms/ui/SingleChoiceController.java index 01131058b12169039520ac50ddfade18dccfdd97..ef5b88ef884c9968029930ed60c864e6438d33fa 100644 --- a/src/main/java/org/olat/modules/forms/ui/SingleChoiceController.java +++ b/src/main/java/org/olat/modules/forms/ui/SingleChoiceController.java @@ -120,7 +120,7 @@ public class SingleChoiceController extends FormBasicController implements Evalu } @Override - public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) { + public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses) { response = responses.getResponse(session, singleChoice.getId()); if (response != null) { for (Choice choice: singleChoice.getChoices().asList()) { @@ -132,7 +132,7 @@ public class SingleChoiceController extends FormBasicController implements Evalu } @Override - public void saveResponse(EvaluationFormSession session) { + public void saveResponse(UserRequest ureq, EvaluationFormSession session) { if (singleChoiceEl.isOneSelected()) { String stringValue = singleChoiceEl.getSelectedKey(); if (response == null) { diff --git a/src/main/java/org/olat/modules/forms/ui/TextInputController.java b/src/main/java/org/olat/modules/forms/ui/TextInputController.java index 83b9c4ed19d12b6507c225c5cd73f113023d7f8c..a96a1bdea2fca1cebae249e6de3828640b1bebf8 100644 --- a/src/main/java/org/olat/modules/forms/ui/TextInputController.java +++ b/src/main/java/org/olat/modules/forms/ui/TextInputController.java @@ -134,7 +134,7 @@ public class TextInputController extends FormBasicController implements Evaluati } @Override - public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) { + public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses) { response = responses.getResponse(session, textInput.getId()); if (response != null) { if (singleRow) { @@ -146,7 +146,7 @@ public class TextInputController extends FormBasicController implements Evaluati } @Override - public void saveResponse(EvaluationFormSession session) { + public void saveResponse(UserRequest ureq, EvaluationFormSession session) { String valueToSave = getValueToSave(); if (StringHelper.containsNonWhitespace(valueToSave)) { if (textInput.isNumeric()) { diff --git a/src/main/java/org/olat/modules/forms/ui/_content/file_upload.html b/src/main/java/org/olat/modules/forms/ui/_content/file_upload.html new file mode 100644 index 0000000000000000000000000000000000000000..f002ed23e0a849f9a0e5bfab3b29537bf3832b31 --- /dev/null +++ b/src/main/java/org/olat/modules/forms/ui/_content/file_upload.html @@ -0,0 +1,19 @@ +#if($readonly) + #if($r.isNotNull($filename)) + <div class="o_clearfix o_evaluation_fileupload"> + #if($r.isNotNull($thumbUri)) + <div class="o_evaluation_thumb"> + <img src="$thumbUri/$filename"/> + </div> + #end + <div class="o_evaluation_filename"> + <a href="$mapperUri/$filename" target="_blank"> + <i class="o_icon $iconCss"></i> $filename + </a> + <span class="o_size">($filesize)</span> + </div> + </div> + #end +#else + $r.render("$fileUpload") +#end \ No newline at end of file diff --git a/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseController.java b/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseController.java index 7fedf985544a429780d7ca7799885599ae3d4a2d..effa21fa081caaf05df3be5c96bd58127dde63c5 100644 --- a/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseController.java +++ b/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseController.java @@ -19,6 +19,7 @@ */ package org.olat.modules.forms.ui.model; +import org.olat.core.gui.UserRequest; import org.olat.modules.forms.EvaluationFormSession; import org.olat.modules.forms.model.jpa.EvaluationFormResponses; import org.olat.resource.accesscontrol.ui.FormController; @@ -35,8 +36,8 @@ public interface EvaluationFormResponseController extends FormController { public boolean hasResponse(); - public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses); + public void initResponse(UserRequest ureq, EvaluationFormSession session, EvaluationFormResponses responses); - public void saveResponse(EvaluationFormSession session); + public void saveResponse(UserRequest ureq, EvaluationFormSession session); } diff --git a/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseControllerElement.java b/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseControllerElement.java index 1b5abd170a31905a0e0b1941124b5124b83a70b1..d7cf6ccc69daa4e2a9ef8ccdbc43fe1091d297e9 100644 --- a/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseControllerElement.java +++ b/src/main/java/org/olat/modules/forms/ui/model/EvaluationFormResponseControllerElement.java @@ -78,12 +78,12 @@ public class EvaluationFormResponseControllerElement implements EvaluationFormEx @Override public void initResponse(EvaluationFormSession session, EvaluationFormResponses responses) { - controller.initResponse(session, responses);; + controller.initResponse(null, session, responses);; } @Override public void saveResponse(EvaluationFormSession session) { - controller.saveResponse(session); + controller.saveResponse(null, session); } @Override