diff --git a/src/main/java/org/olat/ims/qti/QTI12EditorController.java b/src/main/java/org/olat/ims/qti/QTI12EditorController.java index 77d5850802ea54a433f56792f868f85ad658f35a..79c74fef617ae94a066d0807a11ccbeef6a243c6 100644 --- a/src/main/java/org/olat/ims/qti/QTI12EditorController.java +++ b/src/main/java/org/olat/ims/qti/QTI12EditorController.java @@ -57,6 +57,8 @@ public class QTI12EditorController extends BasicController implements QPoolItemE private final QuestionItem qitem; + @Autowired + private QTIModule qtiModule; @Autowired private QPoolService qpoolService; private Item item; @@ -78,7 +80,8 @@ public class QTI12EditorController extends BasicController implements QPoolItemE String mapperUrl = registerMapper(ureq, new VFSContainerMapper(directory)); QTIDocument doc = new QTIDocument(); QTIEditorPackage qtiPackage = new QTI12ItemEditorPackage(item, doc, mapperUrl, leaf, directory, this); - editorsCtrl = new ItemNodeTabbedFormController(item, qtiPackage, ureq, getWindowControl(), false); + editorsCtrl = new ItemNodeTabbedFormController(item, qtiPackage, ureq, getWindowControl(), + false, qtiModule.isEditResourcesEnabled()); editorsCtrl.addTabs(mainPanel); listenTo(editorsCtrl); } diff --git a/src/main/java/org/olat/ims/qti/QTIModule.java b/src/main/java/org/olat/ims/qti/QTIModule.java index 99f7edf75669e47f77515882fdd9ddcf94da9a21..efa248150a9d5dc205df1781e875db7c5469dc21 100644 --- a/src/main/java/org/olat/ims/qti/QTIModule.java +++ b/src/main/java/org/olat/ims/qti/QTIModule.java @@ -26,7 +26,6 @@ package org.olat.ims.qti; import org.olat.core.configuration.AbstractSpringModule; -import org.olat.core.util.StringHelper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.ims.qti.repository.handlers.QTISurveyHandler; import org.olat.ims.qti.repository.handlers.QTITestHandler; @@ -42,14 +41,13 @@ import org.springframework.stereotype.Service; */ @Service public class QTIModule extends AbstractSpringModule { - - private static final String CREATE_RESOURCES_ENABLED = "qti12.create.resources.enabled"; - private static final String CREATE_SURVEY_RESOURCES_ENABLED = "qti12.create.survey.resources.enabled"; @Value("${qti12.create.resources.enabled:false}") private boolean createResourcesEnabled; @Value("${qti12.survey.create.resources.enabled:false}") private boolean createSurveyResourcesEnabled; + @Value("${qti12.edit.resources.enabled:false}") + private boolean createEditResourcesEnabled; @Autowired public QTIModule(CoordinatorManager coordinatorManager) { @@ -65,32 +63,18 @@ public class QTIModule extends AbstractSpringModule { @Override protected void initFromChangedProperties() { - String createResourceEnabledObj = getStringPropertyValue(CREATE_RESOURCES_ENABLED, true); - if(StringHelper.containsNonWhitespace(createResourceEnabledObj)) { - createResourcesEnabled = "true".equals(createResourceEnabledObj); - } - - String createSurveyResourceObj = getStringPropertyValue(CREATE_SURVEY_RESOURCES_ENABLED, true); - if(StringHelper.containsNonWhitespace(createSurveyResourceObj)) { - createSurveyResourcesEnabled = "true".equals(createSurveyResourceObj); - } + // } public boolean isCreateResourcesEnabled() { return createResourcesEnabled; } - - public void setCreateResourcesEnabled(boolean enabled) { - createResourcesEnabled = enabled; - setStringProperty(CREATE_RESOURCES_ENABLED, enabled ? "true" : "false", true); - } public boolean isCreateSurveyResourcesEnabled() { return createSurveyResourcesEnabled; } - - public void setCreateSurveyResourcesEnabled(boolean enabled) { - createSurveyResourcesEnabled = enabled; - setStringProperty(CREATE_SURVEY_RESOURCES_ENABLED, enabled ? "true" : "false", true); + + public boolean isEditResourcesEnabled() { + return createEditResourcesEnabled; } } diff --git a/src/main/java/org/olat/ims/qti/editor/AssessmentController.java b/src/main/java/org/olat/ims/qti/editor/AssessmentController.java index 558688950125e28cd06d51961dd619b3b7de45c4..005e6563b797a7f39b2d6dd1a5a6ae25f986b9cb 100644 --- a/src/main/java/org/olat/ims/qti/editor/AssessmentController.java +++ b/src/main/java/org/olat/ims/qti/editor/AssessmentController.java @@ -52,7 +52,8 @@ public class AssessmentController extends TabbableDefaultController implements C private Assessment assessment; private QTIEditorPackage qtiPackage; private boolean surveyMode = false; - private boolean restrictedEdit; + private final boolean restrictedEdit; + private final boolean blockedEdit; /** * @param assessment @@ -61,10 +62,11 @@ public class AssessmentController extends TabbableDefaultController implements C * @param wControl */ public AssessmentController(Assessment assessment, QTIEditorPackage qtiPackage, UserRequest ureq, WindowControl wControl, - boolean restrictedEdit) { + boolean restrictedEdit, boolean blockedEdit) { super(ureq, wControl); this.restrictedEdit = restrictedEdit; + this.blockedEdit = blockedEdit; this.assessment = assessment; this.qtiPackage = qtiPackage; @@ -90,6 +92,7 @@ public class AssessmentController extends TabbableDefaultController implements C main.contextPut("mediaBaseURL", qtiPackage.getMediaBaseURL()); main.contextPut("control", QTIEditHelper.getControl(assessment)); main.contextPut("isRestrictedEdit", restrictedEdit ? Boolean.TRUE : Boolean.FALSE); + main.contextPut("isBlockedEdit", Boolean.valueOf(blockedEdit)); surveyMode = qtiPackage.getQTIDocument().isSurvey(); main.contextPut("isSurveyMode", surveyMode ? "true" : "false"); @@ -138,7 +141,7 @@ public class AssessmentController extends TabbableDefaultController implements C assessment.setObjectives(newObjectives); } // - if (!surveyMode && !restrictedEdit) { + if (!surveyMode && !restrictedEdit && !blockedEdit) { //ordering assessment.getSelection_ordering().setOrderType(ureq.getParameter("order_type")); assessment.getSelection_ordering().setSelectionNumber(ureq.getParameter("selection_number")); diff --git a/src/main/java/org/olat/ims/qti/editor/ChoiceItemController.java b/src/main/java/org/olat/ims/qti/editor/ChoiceItemController.java index e4eb761f73d5818314229e950d85032db950cc77..683d5f81194b5112bcac2511b7e1089fb6386801 100644 --- a/src/main/java/org/olat/ims/qti/editor/ChoiceItemController.java +++ b/src/main/java/org/olat/ims/qti/editor/ChoiceItemController.java @@ -60,7 +60,8 @@ public class ChoiceItemController extends BasicController implements ControllerE private Item item; private QTIEditorPackage qtiPackage; private DialogBoxController delYesNoCtrl; - private boolean restrictedEdit; + private final boolean restrictedEdit; + private final boolean blockedEdit; private Material editQuestion; private Response editResponse; private CloseableModalController dialogCtr; @@ -73,10 +74,12 @@ public class ChoiceItemController extends BasicController implements ControllerE * @param wControl */ public ChoiceItemController(UserRequest ureq, WindowControl wControl, - Item item, QTIEditorPackage qtiPackage, Translator trnsltr, boolean restrictedEdit) { + Item item, QTIEditorPackage qtiPackage, Translator trnsltr, + boolean restrictedEdit, boolean blockedEdit) { super(ureq, wControl, trnsltr); this.restrictedEdit = restrictedEdit; + this.blockedEdit = blockedEdit; this.item = item; this.qtiPackage = qtiPackage; @@ -90,6 +93,7 @@ public class ChoiceItemController extends BasicController implements ControllerE main.contextPut("question", item.getQuestion()); main.contextPut("isSurveyMode", qtiPackage.getQTIDocument().isSurvey() ? "true" : "false"); main.contextPut("isRestrictedEdit", restrictedEdit ? Boolean.TRUE : Boolean.FALSE); + main.contextPut("isBlockedEdit", Boolean.valueOf(blockedEdit)); String mediaBaseUrl = qtiPackage.getMediaBaseURL(); if(mediaBaseUrl != null && !mediaBaseUrl.startsWith("http")) { @@ -100,10 +104,6 @@ public class ChoiceItemController extends BasicController implements ControllerE putInitialPanel(main); } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.components.Component, org.olat.core.gui.control.Event) - */ @Override public void event(UserRequest ureq, Component source, Event event) { if (source == main) { @@ -129,14 +129,14 @@ public class ChoiceItemController extends BasicController implements ControllerE } } else if (cmd.equals("editq")) { editQuestion = item.getQuestion().getQuestion(); - displayMaterialFormController(ureq, editQuestion, restrictedEdit, + displayMaterialFormController(ureq, editQuestion, translate("fieldset.legend.question")); } else if (cmd.equals("editr")) { List<Response> elements = item.getQuestion().getResponses(); if(posid >= 0 && posid < elements.size()) { editResponse = elements.get(posid); Material responseMat = editResponse.getContent(); - displayMaterialFormController(ureq, responseMat, restrictedEdit, + displayMaterialFormController(ureq, responseMat, translate("fieldset.legend.answers")); } } else if (cmd.equals("addchoice")) { @@ -154,7 +154,7 @@ public class ChoiceItemController extends BasicController implements ControllerE delYesNoCtrl.setUserObject(new Integer(posid)); delYesNoCtrl.activate(); } else if (cmd.equals("ssc")) { // submit sc - if(!restrictedEdit) { + if(!restrictedEdit && !blockedEdit) { ChoiceQuestion question = (ChoiceQuestion) item.getQuestion(); List<Response> q_choices = question.getResponses(); String correctChoice = ureq.getParameter("correctChoice"); @@ -182,7 +182,7 @@ public class ChoiceItemController extends BasicController implements ControllerE question.setSingleCorrectScore(sc); } } else if (cmd.equals("smc")) { // submit mc - if(!restrictedEdit) { + if(!restrictedEdit && !blockedEdit) { ChoiceQuestion question = (ChoiceQuestion) item.getQuestion(); List<Response> choices = question.getResponses(); boolean hasZeroPointChoice = false; @@ -212,7 +212,7 @@ public class ChoiceItemController extends BasicController implements ControllerE } } } else if (cmd.equals("skprim")) { // submit kprim - if(!restrictedEdit) { + if(!restrictedEdit && !blockedEdit) { float maxValue = 0; try { maxValue = Float.parseFloat(ureq.getParameter("max_value")); @@ -238,10 +238,6 @@ public class ChoiceItemController extends BasicController implements ControllerE } } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event) - */ @Override public void event(UserRequest ureq, Controller controller, Event event) { if (controller == matFormCtr) { @@ -300,8 +296,8 @@ public class ChoiceItemController extends BasicController implements ControllerE * @param mat * @param isRestrictedEditMode */ - private void displayMaterialFormController(UserRequest ureq, Material mat, boolean isRestrictedEditMode, String title) { - matFormCtr = new MaterialFormController(ureq, getWindowControl(), mat, qtiPackage, isRestrictedEditMode); + private void displayMaterialFormController(UserRequest ureq, Material mat, String title) { + matFormCtr = new MaterialFormController(ureq, getWindowControl(), mat, qtiPackage, restrictedEdit, blockedEdit); matFormCtr.addControllerListener(this); dialogCtr = new CloseableModalController(getWindowControl(), "close", matFormCtr.getInitialComponent(), true, title); @@ -309,9 +305,6 @@ public class ChoiceItemController extends BasicController implements ControllerE dialogCtr.activate(); } - /** - * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) - */ @Override protected void doDispose() { item = null; diff --git a/src/main/java/org/olat/ims/qti/editor/EssayItemController.java b/src/main/java/org/olat/ims/qti/editor/EssayItemController.java index 5a94d73ecafa32285c62a577898a6685adf523dd..29b4ae0d255c4e71e2cfe6cade8c06d53c221667 100644 --- a/src/main/java/org/olat/ims/qti/editor/EssayItemController.java +++ b/src/main/java/org/olat/ims/qti/editor/EssayItemController.java @@ -53,7 +53,8 @@ public class EssayItemController extends BasicController implements ControllerEv private Item item; private EssayQuestion essayQuestion; private QTIEditorPackage qtiPackage; - private boolean restrictedEdit; + private final boolean restrictedEdit; + private final boolean blockedEdit; private CloseableModalController dialogCtr; private MaterialFormController matFormCtr; @@ -63,11 +64,13 @@ public class EssayItemController extends BasicController implements ControllerEv * @param trnsltr * @param wControl */ - public EssayItemController(UserRequest ureq, WindowControl wControl, Item item, QTIEditorPackage qtiPackage, Translator trnsltr, boolean restrictedEdit) { + public EssayItemController(UserRequest ureq, WindowControl wControl, Item item, QTIEditorPackage qtiPackage, Translator trnsltr, + boolean restrictedEdit, boolean blockedEdit) { super(ureq, wControl); setTranslator(trnsltr); this.restrictedEdit = restrictedEdit; + this.blockedEdit = blockedEdit; this.item = item; this.qtiPackage = qtiPackage; this.trnsltr = trnsltr; @@ -81,21 +84,17 @@ public class EssayItemController extends BasicController implements ControllerEv } main.contextPut("mediaBaseURL", mediaBaseUrl); main.contextPut("isRestrictedEdit", restrictedEdit ? Boolean.TRUE : Boolean.FALSE); + main.contextPut("isBlockedEdit", Boolean.valueOf(blockedEdit)); main.contextPut("isSurveyMode", qtiPackage.getQTIDocument().isSurvey() ? "true" : "false"); putInitialPanel(main); } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.components.Component, org.olat.core.gui.control.Event) - */ @Override public void event(UserRequest ureq, Component source, Event event) { if (source == main) { String cmd = event.getCommand(); if (cmd.equals("editq")) { - displayMaterialFormController(ureq, item.getQuestion().getQuestion(), restrictedEdit); - + displayMaterialFormController(ureq, item.getQuestion().getQuestion()); } else if (cmd.equals("sessay")) { // submit essay main.setDirty(true); @@ -155,10 +154,6 @@ public class EssayItemController extends BasicController implements ControllerEv } } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event) - */ @Override public void event(UserRequest ureq, Controller controller, Event event) { if (controller == matFormCtr) { @@ -199,18 +194,15 @@ public class EssayItemController extends BasicController implements ControllerEv * @param ureq * @param mat */ - private void displayMaterialFormController(UserRequest ureq, Material mat, boolean isRestrictedEditMode) { - matFormCtr = new MaterialFormController(ureq, getWindowControl(), mat, qtiPackage, isRestrictedEditMode); + private void displayMaterialFormController(UserRequest ureq, Material mat) { + matFormCtr = new MaterialFormController(ureq, getWindowControl(), mat, qtiPackage, restrictedEdit, blockedEdit); matFormCtr.addControllerListener(this); dialogCtr = new CloseableModalController(getWindowControl(), "close", matFormCtr.getInitialComponent(), true, trnsltr.translate("fieldset.legend.question")); matFormCtr.addControllerListener(dialogCtr); dialogCtr.activate(); } - - /** - * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) - */ + @Override protected void doDispose() { item = null; diff --git a/src/main/java/org/olat/ims/qti/editor/FIBItemController.java b/src/main/java/org/olat/ims/qti/editor/FIBItemController.java index 7595021d4eebd1b9b52793736040e54249c05daa..9049696e5d4bcc5fc8fc3fef726316bacefc1a55 100644 --- a/src/main/java/org/olat/ims/qti/editor/FIBItemController.java +++ b/src/main/java/org/olat/ims/qti/editor/FIBItemController.java @@ -63,6 +63,7 @@ public class FIBItemController extends BasicController implements ControllerEven private boolean surveyMode = false; private DialogBoxController delYesNoCtrl; private boolean restrictedEdit; + private boolean blockedEdit; private Material editQuestion; private Response editResponse; private CloseableModalController dialogCtr; @@ -75,10 +76,11 @@ public class FIBItemController extends BasicController implements ControllerEven * @param wControl */ public FIBItemController(UserRequest ureq, WindowControl wControl, - Item item, QTIEditorPackage qtiPackage, Translator trnsltr, boolean restrictedEdit) { + Item item, QTIEditorPackage qtiPackage, Translator trnsltr, boolean restrictedEdit, boolean blockedEdit) { super(ureq, wControl, trnsltr); this.restrictedEdit = restrictedEdit; + this.blockedEdit = blockedEdit; this.item = item; this.qtiPackage = qtiPackage; main = createVelocityContainer("fibitem", "tab_fibItem"); @@ -86,6 +88,7 @@ public class FIBItemController extends BasicController implements ControllerEven surveyMode = qtiPackage.getQTIDocument().isSurvey(); main.contextPut("isSurveyMode", surveyMode ? "true" : "false"); main.contextPut("isRestrictedEdit", restrictedEdit ? Boolean.TRUE : Boolean.FALSE); + main.contextPut("isBlockedEdit", Boolean.valueOf(blockedEdit)); String mediaBaseUrl = qtiPackage.getMediaBaseURL(); if(mediaBaseUrl != null && !mediaBaseUrl.startsWith("http")) { @@ -126,14 +129,14 @@ public class FIBItemController extends BasicController implements ControllerEven } } else if (cmd.equals("editq")) { editQuestion = item.getQuestion().getQuestion(); - displayMaterialFormController(ureq, editQuestion, restrictedEdit); + displayMaterialFormController(ureq, editQuestion); } else if (cmd.equals("editr")) { List<Response> elements = item.getQuestion().getResponses(); if (posid >= 0 && posid < elements.size()) { editResponse = elements.get(posid); Material responseMat = elements.get(posid).getContent(); - displayMaterialFormController(ureq, responseMat, restrictedEdit); + displayMaterialFormController(ureq, responseMat); } else { logError("posid doesn't match responses length: " + posid + "/" + elements.size(), null); } @@ -298,18 +301,15 @@ public class FIBItemController extends BasicController implements ControllerEven * @param mat * @param isRestrictedEditMode */ - private void displayMaterialFormController(UserRequest ureq, Material mat, boolean isRestrictedEditMode) { - matFormCtr = new MaterialFormController(ureq, getWindowControl(), mat, qtiPackage, isRestrictedEditMode); + private void displayMaterialFormController(UserRequest ureq, Material mat) { + matFormCtr = new MaterialFormController(ureq, getWindowControl(), mat, qtiPackage, restrictedEdit, blockedEdit); matFormCtr.addControllerListener(this); dialogCtr = new CloseableModalController(getWindowControl(), "close", matFormCtr.getInitialComponent(), true, translate("questionform_answer")); matFormCtr.addControllerListener(dialogCtr); dialogCtr.activate(); } - - /** - * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) - */ + @Override protected void doDispose() { main = null; diff --git a/src/main/java/org/olat/ims/qti/editor/FeedbackFormController.java b/src/main/java/org/olat/ims/qti/editor/FeedbackFormController.java index 53fd079abe654087546c6c1ae6a85cfe099d2c7b..8e468f629080e0e75a1c018db9002729b9128288 100644 --- a/src/main/java/org/olat/ims/qti/editor/FeedbackFormController.java +++ b/src/main/java/org/olat/ims/qti/editor/FeedbackFormController.java @@ -62,20 +62,21 @@ public class FeedbackFormController extends FormBasicController { private final Item item; private final QTIEditorPackage qtiPackage; private final boolean isRestrictedEditMode; + private final boolean isBlockedEditMode; private CloseableModalController dialogCtr; private MaterialFormController materialCtr; private SingleSelection feedbackSwitch; private Control control; - private HashMap<Material, RichTextElement> textElements = new HashMap<Material, RichTextElement>(); - private HashMap<Material, String> identities = new HashMap<Material, String>(); - private HashMap<RichTextElement, Material> materialsByText = new HashMap<RichTextElement, Material>(); - private HashMap<FormLink, Material> materialsByLink = new HashMap<FormLink, Material>(); + private HashMap<Material, RichTextElement> textElements = new HashMap<>(); + private HashMap<Material, String> identities = new HashMap<>(); + private HashMap<RichTextElement, Material> materialsByText = new HashMap<>(); + private HashMap<FormLink, Material> materialsByLink = new HashMap<>(); private FormLayoutContainer overallFeedbackLayout, responseLevelHintsLayout; private String mediaBaseUrl; private Material masteryMat, failureMat; public FeedbackFormController(UserRequest ureq, WindowControl wControl, QTIEditorPackage qtiPackage, Item item, - boolean isRestrictedEditMode) { + boolean isRestrictedEditMode, boolean isBlockedEditMode) { super(ureq, wControl, FormBasicController.LAYOUT_VERTICAL); this.qtiPackage = qtiPackage; this.item = item; @@ -83,20 +84,16 @@ public class FeedbackFormController extends FormBasicController { control = QTIEditHelper.getControl(item); this.isRestrictedEditMode = isRestrictedEditMode; + this.isBlockedEditMode = isBlockedEditMode; initForm(ureq); } - /** - * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#doDispose() - */ + @Override protected void doDispose() { // nothing so far } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event) - */ + @Override protected void event(UserRequest ureq, Controller source, Event event) { if (source == materialCtr) { if (event instanceof QTIObjectBeforeChangeEvent) { @@ -140,23 +137,17 @@ public class FeedbackFormController extends FormBasicController { } } - /** - * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest) - */ + @Override protected void formOK(UserRequest ureq) { // there's no submit button in this form } - /** - * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest, - * org.olat.core.gui.components.form.flexible.FormItem, - * org.olat.core.gui.components.form.flexible.impl.FormEvent) - */ + @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { if (source instanceof RichTextElement) { - displayMaterialFormController(ureq, materialsByText.get(source), isRestrictedEditMode); + displayMaterialFormController(ureq, materialsByText.get(source)); } else if (source instanceof FormLink) { - displayMaterialFormController(ureq, materialsByLink.get(source), isRestrictedEditMode); + displayMaterialFormController(ureq, materialsByLink.get(source)); } else if (source == feedbackSwitch) { // feedbackSwitch takes values in {0 = on/yes, 1 = off/no} // control.feedback takes values in {0 = undef, 1 = on, 2 = off} @@ -200,6 +191,7 @@ public class FeedbackFormController extends FormBasicController { feedbackSwitch = uifactory.addRadiosHorizontal("feedbackswitch", switchLayout, yesNoKeys, yesNoValues); feedbackSwitch.addActionListener(FormEvent.ONCLICK); + feedbackSwitch.setEnabled(!isBlockedEditMode); if (control.isFeedback()) { feedbackSwitch.select(yesNoKeys[0], true); } else { @@ -246,7 +238,7 @@ public class FeedbackFormController extends FormBasicController { registerFeedbackElement(failureMat, failureFeedback, failureLink); // Feedback for each response when single or multiple choice question - List<Material> responses = new ArrayList<Material>(); + List<Material> responses = new ArrayList<>(); boolean hasResponseLevelHints = false; if (item.getQuestion().getType() <= Question.TYPE_MC) { int i = 1; @@ -261,6 +253,7 @@ public class FeedbackFormController extends FormBasicController { getWindowControl()); responseHintText.getEditorConfiguration().setFigCaption(false); FormLink link = uifactory.addFormLink("link_" + i, responseLevelHintsLayout, Link.NONTRANSLATED + Link.LINK_CUSTOM_CSS); + link.setEnabled(!isBlockedEditMode); link.getComponent().setCustomDisplayText(" "); link.getComponent().setIconLeftCSS("o_icon o_icon_edit o_icon-lg"); registerFeedbackElement(responseFeedbackMat, responseHintText, link); @@ -292,6 +285,7 @@ public class FeedbackFormController extends FormBasicController { textElement.getEditorConfiguration().setInvalidElements(RichTextConfiguration.INVALID_ELEMENTS_FORM_FULL_VALUE_UNSAVE_WITH_SCRIPT); textElement.getEditorConfiguration().setExtendedValidElements("script[src,type,defer]"); + link.setVisible(!isBlockedEditMode); materialsByText.put(textElement, mat); materialsByLink.put(link, mat); } @@ -303,8 +297,8 @@ public class FeedbackFormController extends FormBasicController { * @param mat * @param isRestrictedEditMode */ - private void displayMaterialFormController(UserRequest ureq, Material mat, boolean isRestrictedEditMode) { - materialCtr = new MaterialFormController(ureq, getWindowControl(), mat, qtiPackage, isRestrictedEditMode); + private void displayMaterialFormController(UserRequest ureq, Material mat) { + materialCtr = new MaterialFormController(ureq, getWindowControl(), mat, qtiPackage, isRestrictedEditMode, isBlockedEditMode); listenTo(materialCtr); dialogCtr = new CloseableModalController(getWindowControl(), "close", materialCtr.getInitialComponent()); listenTo(dialogCtr); diff --git a/src/main/java/org/olat/ims/qti/editor/ItemMetadataFormController.java b/src/main/java/org/olat/ims/qti/editor/ItemMetadataFormController.java index ccbc306efee3bcf9efdd83d4f675a6f1a38e7ac2..3a12b2feeaa789dd09f0a9039ede6fe73cea6258 100644 --- a/src/main/java/org/olat/ims/qti/editor/ItemMetadataFormController.java +++ b/src/main/java/org/olat/ims/qti/editor/ItemMetadataFormController.java @@ -54,34 +54,31 @@ import org.olat.ims.qti.editor.beecom.objects.Question; public class ItemMetadataFormController extends FormBasicController { private Item item; - private boolean isSurvey, isRestrictedEditMode; + private boolean isSurvey, isRestrictedEditMode, isBlockedEdit; private TextElement title; private RichTextElement desc, hint, solution; private SingleSelection layout, limitAttempts, limitTime, shuffle, showHints, showSolution; private IntegerElement attempts, timeMin, timeSec; private final QTIEditorPackage qti; - public ItemMetadataFormController(UserRequest ureq, WindowControl control, Item item, QTIEditorPackage qti, boolean restrictedEdit) { + public ItemMetadataFormController(UserRequest ureq, WindowControl control, Item item, QTIEditorPackage qti, + boolean restrictedEdit, boolean blockeEdit) { super(ureq, control); this.item = item; this.qti = qti; this.isSurvey = qti.getQTIDocument().isSurvey(); this.isRestrictedEditMode = restrictedEdit; + this.isBlockedEdit = blockeEdit; initForm(ureq); } - /** - * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#doDispose() - */ + @Override protected void doDispose() { // still to come } - /** - * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formInnerEvent(org.olat.core.gui.UserRequest, - * org.olat.core.gui.components.form.flexible.FormItem, - * org.olat.core.gui.components.form.flexible.impl.FormEvent) - */ + + @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { if (source == limitAttempts) { toggle(attempts); @@ -141,7 +138,7 @@ public class ItemMetadataFormController extends FormBasicController { if (layout != null && q instanceof ChoiceQuestion) { ((ChoiceQuestion) q).setFlowLabelClass("h".equals(layout.getSelectedKey()) ? ChoiceQuestion.BLOCK : ChoiceQuestion.LIST); } - if (!isSurvey && !isRestrictedEditMode) { + if (!isSurvey && !isRestrictedEditMode && !isBlockedEdit) { q.setShuffle(shuffle.getSelected() == 0); Control itemControl = item.getItemcontrols().get(0); itemControl.setFeedback(itemControl.getFeedback() == Control.CTRL_UNDEF ? Control.CTRL_NO : itemControl.getFeedback()); @@ -187,6 +184,7 @@ public class ItemMetadataFormController extends FormBasicController { title = uifactory.addTextElement("title", "form.imd.title", -1, item.getTitle(), formLayout); title.setMandatory(true); title.setNotEmptyCheck("form.imd.error.empty.title"); + title.setEnabled(!isBlockedEdit); // Question Type String typeName = getType(); @@ -196,6 +194,7 @@ public class ItemMetadataFormController extends FormBasicController { desc = uifactory.addRichTextElementForStringData("desc", "form.imd.descr", item.getObjectives(), 8, -1, true, null, null, formLayout, ureq.getUserSession(), getWindowControl()); desc.getEditorConfiguration().setFigCaption(false); + desc.setEnabled(!isBlockedEdit); RichTextConfiguration richTextConfig = desc.getEditorConfiguration(); // set upload dir to the media dir richTextConfig.setFileBrowserUploadRelPath("media"); @@ -217,10 +216,10 @@ public class ItemMetadataFormController extends FormBasicController { // Attempts limitAttempts = uifactory.addRadiosHorizontal("form.imd.limittries", formLayout, yesnoKeys, yesnoValues); - limitAttempts.setEnabled(!isRestrictedEditMode); + limitAttempts.setEnabled(!isRestrictedEditMode && !isBlockedEdit); limitAttempts.addActionListener(FormEvent.ONCLICK); // Radios/Checkboxes need onclick because of IE bug OLAT-5753 attempts = uifactory.addIntegerElement("form.imd.tries", 0, formLayout); - attempts.setEnabled(!isRestrictedEditMode); + attempts.setEnabled(!isRestrictedEditMode && !isBlockedEdit); attempts.setDisplaySize(3); if (item.getMaxattempts() > 0) { limitAttempts.select("y", true); @@ -233,12 +232,12 @@ public class ItemMetadataFormController extends FormBasicController { // Time Limit limitTime = uifactory.addRadiosHorizontal("form.imd.limittime", formLayout, yesnoKeys, yesnoValues); limitTime.addActionListener(FormEvent.ONCLICK); // Radios/Checkboxes need onclick because of IE bug OLAT-5753 - limitTime.setEnabled(!isRestrictedEditMode); + limitTime.setEnabled(!isRestrictedEditMode && !isBlockedEdit); timeMin = uifactory.addIntegerElement("form.imd.time.min", 0, formLayout); - timeMin.setEnabled(!isRestrictedEditMode); + timeMin.setEnabled(!isRestrictedEditMode && !isBlockedEdit); timeMin.setDisplaySize(3); timeSec = uifactory.addIntegerElement("form.imd.time.sek", 0, formLayout); - timeSec.setEnabled(!isRestrictedEditMode); + timeSec.setEnabled(!isRestrictedEditMode && !isBlockedEdit); timeSec.setDisplaySize(3); if (item.getDuration() != null && item.getDuration().isSet()) { limitTime.select("y", true); @@ -252,7 +251,7 @@ public class ItemMetadataFormController extends FormBasicController { // Shuffle Answers shuffle = uifactory.addRadiosHorizontal("shuffle", "form.imd.shuffle", formLayout, yesnoKeys, yesnoValues); - shuffle.setEnabled(!isRestrictedEditMode); + shuffle.setEnabled(!isRestrictedEditMode && !isBlockedEdit); shuffle.setVisible(t != Question.TYPE_ESSAY && t != Question.TYPE_FIB); if (item.getQuestion().isShuffle()) { shuffle.select("y", true); @@ -263,13 +262,13 @@ public class ItemMetadataFormController extends FormBasicController { // Hints Control itemControl = item.getItemcontrols().get(0); showHints = uifactory.addRadiosHorizontal("showHints", "form.imd.solutionhints.show", formLayout, yesnoKeys, yesnoValues); - showHints.setEnabled(!isRestrictedEditMode); + showHints.setEnabled(!isRestrictedEditMode && !isBlockedEdit); showHints.addActionListener(FormEvent.ONCLICK); // Radios/Checkboxes need onclick because of IE bug OLAT-5753 showHints.setVisible(t != Question.TYPE_ESSAY); hint = uifactory.addRichTextElementForStringData("hint", "form.imd.solutionhints", item.getQuestion().getHintText(), 8, -1, true, qti.getBaseDir(), null, formLayout, ureq.getUserSession(), getWindowControl()); - hint.setEnabled(!isRestrictedEditMode); + hint.setEnabled(!isRestrictedEditMode && !isBlockedEdit); hint.getEditorConfiguration().setFigCaption(false); // set upload dir to the media dir hint.getEditorConfiguration().setFileBrowserUploadRelPath("media"); @@ -282,14 +281,14 @@ public class ItemMetadataFormController extends FormBasicController { // Solution showSolution = uifactory.addRadiosHorizontal("showSolution", "form.imd.correctsolution.show", formLayout, yesnoKeys, yesnoValues); - showSolution.setEnabled(!isRestrictedEditMode); + showSolution.setEnabled(!isRestrictedEditMode && !isBlockedEdit); showSolution.addActionListener(FormEvent.ONCLICK); // Radios/Checkboxes need onclick because of IE bug OLAT-5753 boolean essay = (q.getType() == Question.TYPE_ESSAY); String solLabel = essay ? "form.imd.correctsolution.word" : "form.imd.correctsolution"; solution = uifactory.addRichTextElementForStringData("solution", solLabel, item.getQuestion().getSolutionText(), 8, -1, true, qti.getBaseDir(), null, formLayout, ureq.getUserSession(), getWindowControl()); - solution.setEnabled(!isRestrictedEditMode); + solution.setEnabled(!isRestrictedEditMode && !isBlockedEdit); solution.getEditorConfiguration().setFigCaption(false); // set upload dir to the media dir solution.getEditorConfiguration().setFileBrowserUploadRelPath("media"); @@ -303,7 +302,9 @@ public class ItemMetadataFormController extends FormBasicController { } } // Submit Button - uifactory.addFormSubmitButton("submit", formLayout); + if(!isBlockedEdit) { + uifactory.addFormSubmitButton("submit", formLayout); + } } /** diff --git a/src/main/java/org/olat/ims/qti/editor/ItemNodeTabbedFormController.java b/src/main/java/org/olat/ims/qti/editor/ItemNodeTabbedFormController.java index 1bc3e26fab5d88e387d9f8afb09fa5441ccfd3d7..f6104ffb9912de4b5e2c91b6c4a6b5da101d4465 100644 --- a/src/main/java/org/olat/ims/qti/editor/ItemNodeTabbedFormController.java +++ b/src/main/java/org/olat/ims/qti/editor/ItemNodeTabbedFormController.java @@ -52,7 +52,8 @@ public class ItemNodeTabbedFormController extends TabbableDefaultController { private FeedbackFormController feedbackCtr; private Panel feedbackPanel = new Panel("feedbackPanel"); - private boolean restrictedEdit; + private final boolean restrictedEdit; + private final boolean blockedEdit; /** * @param item @@ -61,10 +62,11 @@ public class ItemNodeTabbedFormController extends TabbableDefaultController { * @param trnsltr */ public ItemNodeTabbedFormController(Item item, QTIEditorPackage qtiPackage, UserRequest ureq, WindowControl wControl, - boolean restrictedEdit) { + boolean restrictedEdit, boolean blockedEdit) { super(ureq, wControl); + this.blockedEdit = blockedEdit; this.restrictedEdit = restrictedEdit; - metadataCtr = new ItemMetadataFormController(ureq, getWindowControl(), item, qtiPackage, restrictedEdit); + metadataCtr = new ItemMetadataFormController(ureq, getWindowControl(), item, qtiPackage, restrictedEdit, blockedEdit); listenTo(metadataCtr); this.item = item; this.qtiPackage = qtiPackage; @@ -72,19 +74,19 @@ public class ItemNodeTabbedFormController extends TabbableDefaultController { int questionType = item.getQuestion().getType(); switch (questionType) { case Question.TYPE_SC: - itemCtrl = new ChoiceItemController(ureq, getWindowControl(), item, qtiPackage, getTranslator(), restrictedEdit); + itemCtrl = new ChoiceItemController(ureq, getWindowControl(), item, qtiPackage, getTranslator(), restrictedEdit, blockedEdit); break; case Question.TYPE_MC: - itemCtrl = new ChoiceItemController(ureq, getWindowControl(), item, qtiPackage, getTranslator(), restrictedEdit); + itemCtrl = new ChoiceItemController(ureq, getWindowControl(), item, qtiPackage, getTranslator(), restrictedEdit, blockedEdit); break; case Question.TYPE_KPRIM: - itemCtrl = new ChoiceItemController(ureq, getWindowControl(), item, qtiPackage, getTranslator(), restrictedEdit); + itemCtrl = new ChoiceItemController(ureq, getWindowControl(), item, qtiPackage, getTranslator(), restrictedEdit, blockedEdit); break; case Question.TYPE_FIB: - itemCtrl = new FIBItemController(ureq, getWindowControl(), item, qtiPackage, getTranslator(), restrictedEdit); + itemCtrl = new FIBItemController(ureq, getWindowControl(), item, qtiPackage, getTranslator(), restrictedEdit, blockedEdit); break; case Question.TYPE_ESSAY: - itemCtrl = new EssayItemController(ureq, getWindowControl(), item, qtiPackage, getTranslator(), restrictedEdit); + itemCtrl = new EssayItemController(ureq, getWindowControl(), item, qtiPackage, getTranslator(), restrictedEdit, blockedEdit); break; } if(itemCtrl != null) { @@ -92,10 +94,6 @@ public class ItemNodeTabbedFormController extends TabbableDefaultController { } } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event) - */ @Override protected void event(UserRequest ureq, Controller source, Event event) { if (source == metadataCtr && event.equals(Event.DONE_EVENT)) { @@ -107,17 +105,13 @@ public class ItemNodeTabbedFormController extends TabbableDefaultController { } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.components.Component, org.olat.core.gui.control.Event) - */ @Override public void event(UserRequest ureq, Component source, Event event) { if (event instanceof TabbedPaneChangedEvent) { TabbedPaneChangedEvent tabbedPaneEvent = (TabbedPaneChangedEvent) event; if (feedbackPanel.equals(tabbedPaneEvent.getNewComponent())) { if (feedbackCtr != null) removeAsListenerAndDispose(feedbackCtr); - feedbackCtr = new FeedbackFormController(ureq, getWindowControl(), qtiPackage, item, restrictedEdit); + feedbackCtr = new FeedbackFormController(ureq, getWindowControl(), qtiPackage, item, restrictedEdit, blockedEdit); // feedback controller sends out NodeBeforeChangeEvents which must be propagated listenTo(feedbackCtr); feedbackPanel.setContent(feedbackCtr.getInitialComponent()); @@ -125,17 +119,11 @@ public class ItemNodeTabbedFormController extends TabbableDefaultController { } } - /** - * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) - */ @Override protected void doDispose() { // metadataCtr and feedbackCtr are registered as child controllers } - /** - * @see org.olat.core.gui.control.generic.tabbable.TabbableController#addTabs(org.olat.core.gui.components.TabbedPane) - */ @Override public void addTabs(TabbedPane tabbedPane) { // add as listener to get tab activation events diff --git a/src/main/java/org/olat/ims/qti/editor/MaterialFormController.java b/src/main/java/org/olat/ims/qti/editor/MaterialFormController.java index 6f3dd079b77733b4abd3eb7c6042670aab780b00..6cdd1a9990aa7c655ebb8c664e8f4cd963e4d053 100644 --- a/src/main/java/org/olat/ims/qti/editor/MaterialFormController.java +++ b/src/main/java/org/olat/ims/qti/editor/MaterialFormController.java @@ -50,31 +50,26 @@ public class MaterialFormController extends FormBasicController { private QTIEditorPackage qtiPackage; private Material mat; private RichTextElement richText; - private boolean isRestrictedEditMode; + private final boolean isRestrictedEditMode; + private final boolean isBlockedEditMode; private String htmlContent = ""; public MaterialFormController(UserRequest ureq, WindowControl control, Material mat, QTIEditorPackage qtiPackage, - boolean isRestrictedEditMode) { + boolean isRestrictedEditMode, boolean isBlockedEditMode) { super(ureq, control, FormBasicController.LAYOUT_VERTICAL); this.mat = mat; this.qtiPackage = qtiPackage; this.htmlContent = mat.renderAsHtmlForEditor(); - + this.isBlockedEditMode = isBlockedEditMode; this.isRestrictedEditMode = isRestrictedEditMode; initForm(ureq); } - /** - * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#doDispose() - */ @Override protected void doDispose() { // nothing to get rid of } - /** - * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest) - */ @Override protected void formOK(UserRequest ureq) { String newHtml = richText.getRawValue(); // trust authors, don't to XSS filtering @@ -106,23 +101,20 @@ public class MaterialFormController extends FormBasicController { // "lazy migration" to the new rich text style). Mattext textHtml = new Mattext(newHtml); // A single text/html element will be left over. - List<QTIObject> elements = new ArrayList<QTIObject>(1); + List<QTIObject> elements = new ArrayList<>(1); elements.add(textHtml); mat.setElements(elements); fireEvent(ureq, Event.DONE_EVENT); } } - /** - * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#initForm(org.olat.core.gui.components.form.flexible.FormItemContainer, - * org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest) - */ @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { richText = uifactory.addRichTextElementForStringData("mce", null, htmlContent, 14, -1, true, qtiPackage.getBaseDir(), null, formLayout, ureq.getUserSession(), getWindowControl()); richText.getEditorConfiguration().setFigCaption(false); + richText.setEnabled(!isBlockedEditMode); RichTextConfiguration richTextConfig = richText.getEditorConfiguration(); // disable <p> element for enabling vertical layouts @@ -135,7 +127,9 @@ public class MaterialFormController extends FormBasicController { richTextConfig.setInvalidElements(RichTextConfiguration.INVALID_ELEMENTS_FORM_FULL_VALUE_UNSAVE_WITH_SCRIPT); richTextConfig.setExtendedValidElements("script[src|type|defer]"); - uifactory.addFormSubmitButton("submit", formLayout); + if(!isBlockedEditMode) { + uifactory.addFormSubmitButton("submit", formLayout); + } } /** diff --git a/src/main/java/org/olat/ims/qti/editor/QTIEditHelper.java b/src/main/java/org/olat/ims/qti/editor/QTIEditHelper.java index 7393b2c7cdd5371422dbd3fa49fd79a4d38daa01..f55a9abdd774b84410a32ee368c5d352b46fa01e 100644 --- a/src/main/java/org/olat/ims/qti/editor/QTIEditHelper.java +++ b/src/main/java/org/olat/ims/qti/editor/QTIEditHelper.java @@ -251,7 +251,7 @@ public class QTIEditHelper { // controls Control control = new Control(); - List<Control> controls = new ArrayList<Control>(); + List<Control> controls = new ArrayList<>(); controls.add(control); newItem.setItemcontrols(controls); @@ -307,7 +307,7 @@ public class QTIEditHelper { // conrols Control control = new Control(); - List<Control> controls = new ArrayList<Control>(); + List<Control> controls = new ArrayList<>(); controls.add(control); newItem.setItemcontrols(controls); @@ -344,7 +344,7 @@ public class QTIEditHelper { // conrols Control control = new Control(); - List<Control> controls = new ArrayList<Control>(); + List<Control> controls = new ArrayList<>(); controls.add(control); newItem.setItemcontrols(controls); diff --git a/src/main/java/org/olat/ims/qti/editor/QTIEditorMainController.java b/src/main/java/org/olat/ims/qti/editor/QTIEditorMainController.java index 08ceb42b4e533341db0756a829705065ddfa7c2f..dcd097241887b65ee06e2152af04f0cb8201d4eb 100644 --- a/src/main/java/org/olat/ims/qti/editor/QTIEditorMainController.java +++ b/src/main/java/org/olat/ims/qti/editor/QTIEditorMainController.java @@ -103,6 +103,7 @@ import org.olat.fileresource.types.FileResource; import org.olat.fileresource.types.ImsQTI21Resource; import org.olat.ims.qti.QTIChangeLogMessage; import org.olat.ims.qti.QTIConstants; +import org.olat.ims.qti.QTIModule; import org.olat.ims.qti.QTIResultManager; import org.olat.ims.qti.editor.beecom.objects.Assessment; import org.olat.ims.qti.editor.beecom.objects.ChoiceQuestion; @@ -241,6 +242,7 @@ public class QTIEditorMainController extends MainLayoutBasicController implement private Link previewLink, exportPoolLink, convertQTI21Link, exportDocLink, importTableLink, closeLink; private Link addPoolLink, addSectionLink, addSCLink, addMCLink, addFIBLink, addKPrimLink, addEssayLink; private Link deleteLink, moveLink, copyLink; + private Link convertQTI21Button; private QTIEditorTreeModel menuTreeModel; private DialogBoxController deleteDialog; @@ -248,6 +250,7 @@ public class QTIEditorMainController extends MainLayoutBasicController implement private IQDisplayController previewController; private LockResult lockEntry; private boolean restrictedEdit; + private boolean blockedEdit; private Map<String, Memento> history = null; private String startedWithTitle; private List<Reference> referencees; @@ -269,6 +272,8 @@ public class QTIEditorMainController extends MainLayoutBasicController implement private CountDownLatch exportLatch; private RepositoryEntry qtiEntry; + @Autowired + private QTIModule qtiModule; @Autowired private UserManager userManager; @Autowired @@ -290,6 +295,7 @@ public class QTIEditorMainController extends MainLayoutBasicController implement super(ureq, wControl); this.qtiEntry = qtiEntry; + blockedEdit = !qtiModule.isEditResourcesEnabled(); for(Iterator<Reference> iter = referencees.iterator(); iter.hasNext(); ) { Reference ref = iter.next(); @@ -386,8 +392,11 @@ public class QTIEditorMainController extends MainLayoutBasicController implement } else { // start with a fresh history. Editor is resumed but no changes were made // so far. - history = new HashMap<String, Memento>(); + history = new HashMap<>(); } + + convertQTI21Button = LinkFactory.createButton("tools.convert.qti21", main, this); + convertQTI21Button.setIconLeftCSS("o_icon o_FileResource-IMSQTI21_icon"); // The menu tree model represents the structure of the qti document. // All insert/move operations on the model are propagated to the structure @@ -411,7 +420,7 @@ public class QTIEditorMainController extends MainLayoutBasicController implement populateToolC(); // qtiPackage must be loaded previousely // Add css background - if (restrictedEdit) { + if (restrictedEdit || blockedEdit) { addSectionLink.setEnabled(false); addSCLink.setEnabled(false); addMCLink.setEnabled(false); @@ -426,6 +435,10 @@ public class QTIEditorMainController extends MainLayoutBasicController implement } else { columnLayoutCtr.addCssClassToMain("o_editor_qti"); } + if(blockedEdit) { + importTableLink.setEnabled(false); + exportPoolLink.setEnabled(false); + } deleteLink.setEnabled(false); moveLink.setEnabled(false); @@ -453,7 +466,7 @@ public class QTIEditorMainController extends MainLayoutBasicController implement boolean warningEssay = false; if(qtiPackage.getQTIDocument() != null && !qtiPackage.getQTIDocument().isSurvey()) { //check if the test contains some essay - List<TreeNode> flattedTree = new ArrayList<TreeNode>(); + List<TreeNode> flattedTree = new ArrayList<>(); TreeHelper.makeTreeFlat(menuTreeModel.getRootNode(), flattedTree); for(TreeNode node:flattedTree) { Object uo = node.getUserObject(); @@ -463,7 +476,7 @@ public class QTIEditorMainController extends MainLayoutBasicController implement } } } - main.contextPut("warningEssay", new Boolean(warningEssay)); + main.contextPut("warningEssay", Boolean.valueOf(warningEssay)); } @Override @@ -501,10 +514,10 @@ public class QTIEditorMainController extends MainLayoutBasicController implement copyLink.setEnabled(false); stackedPanel.setDirty(true); } else { - deleteLink.setEnabled(true && !restrictedEdit); - moveLink.setEnabled(true && !restrictedEdit); + deleteLink.setEnabled(!restrictedEdit && !blockedEdit); + moveLink.setEnabled(!restrictedEdit && !blockedEdit); if (clickedNode instanceof ItemNode) { - copyLink.setEnabled(true && !restrictedEdit); + copyLink.setEnabled(!restrictedEdit && !blockedEdit); } else { copyLink.setEnabled(false); } @@ -651,7 +664,7 @@ public class QTIEditorMainController extends MainLayoutBasicController implement doExportQItem(); } else if (exportDocLink == source) { doExportDocx(ureq); - } else if (convertQTI21Link == source) { + } else if (convertQTI21Link == source || convertQTI21Button == source) { doConvertToQTI21(ureq); } else if (importTableLink == source) { doImportTable(ureq); @@ -1006,9 +1019,6 @@ public class QTIEditorMainController extends MainLayoutBasicController implement int targetPos = tp.getChildpos(); ItemNode selectedNode = (ItemNode) menuTree.getSelectedNode(); // only items are moveable - // use XStream instead of ObjectCloner - // Item qtiItem = - // (Item)xstream.fromXML(xstream.toXML(selectedNode.getUnderlyingQTIObject())); Item toClone = (Item) selectedNode.getUnderlyingQTIObject(); Item qtiItem = (Item) XStreamHelper.xstreamClone(toClone); // copy flow label class too, olat-2791 @@ -1210,7 +1220,7 @@ public class QTIEditorMainController extends MainLayoutBasicController implement addItemTools.addComponent(new Spacer("")); addPoolLink = LinkFactory.createToolLink(CMD_TOOLS_ADD_QPOOL, translate("tools.import.qpool"), this, "o_mi_qpool_import"); addItemTools.addComponent(addPoolLink); - + importTableLink = LinkFactory.createToolLink(CMD_TOOLS_IMPORT_TABLE, translate("tools.import.table"), this, "o_mi_table_import"); importTableLink.setIconLeftCSS("o_icon o_icon_table o_icon-fw"); addItemTools.addComponent(importTableLink); @@ -1464,6 +1474,10 @@ public class QTIEditorMainController extends MainLayoutBasicController implement public boolean isRestrictedEdit() { return restrictedEdit; } + + public boolean isBlockedEdit() { + return blockedEdit; + } public boolean isLockedSuccessfully() { return lockEntry.isSuccess(); diff --git a/src/main/java/org/olat/ims/qti/editor/SectionController.java b/src/main/java/org/olat/ims/qti/editor/SectionController.java index 695de0a99a6ac64c46ddeefe3e0fbe259f21f2e5..e25d8d87cb253002d07e55baa6ef35b8895cc118 100644 --- a/src/main/java/org/olat/ims/qti/editor/SectionController.java +++ b/src/main/java/org/olat/ims/qti/editor/SectionController.java @@ -63,6 +63,7 @@ public class SectionController extends FormBasicController implements TabbableCo private Section section; private final QTIEditorPackage qtiPackage; private final boolean restrictedEdit; + private final boolean blockedEdit; /** * @param section @@ -70,15 +71,13 @@ public class SectionController extends FormBasicController implements TabbableCo * @param locale * @param wControl */ - public SectionController(Section section, QTIEditorPackage qtiPackage, UserRequest ureq, WindowControl wControl, boolean restrictedEdit) { + public SectionController(Section section, QTIEditorPackage qtiPackage, UserRequest ureq, WindowControl wControl, + boolean restrictedEdit, boolean blockedEdit) { super(ureq, wControl); - + this.blockedEdit = blockedEdit; this.restrictedEdit = restrictedEdit; this.section = section; this.qtiPackage = qtiPackage; - /* - main.contextPut("mediaBaseURL", qtiPackage.getMediaBaseURL()); - */ initForm(ureq); } @@ -89,11 +88,13 @@ public class SectionController extends FormBasicController implements TabbableCo String title = section.getTitle(); titleEl = uifactory.addTextElement("title", "form.metadata.title", 255, title, formLayout); + titleEl.setEnabled(!blockedEdit); String objectives = section.getObjectives(); objectivesEl = uifactory.addRichTextElementForStringData("objectives", "form.metadata.objectives", objectives, 6, 12, false, qtiPackage.getBaseDir(), null, formLayout, ureq.getUserSession(), getWindowControl()); objectivesEl.getEditorConfiguration().setFigCaption(false); + objectivesEl.setEnabled(!blockedEdit); RichTextConfiguration richTextConfig = objectivesEl.getEditorConfiguration(); // disable <p> element for enabling vertical layouts @@ -110,14 +111,14 @@ public class SectionController extends FormBasicController implements TabbableCo String[] yesnoValues = new String[] { translate("yes"), translate("no") }; limitTimeEl = uifactory.addRadiosHorizontal("form.section.durationswitch", formLayout, yesnoKeys, yesnoValues); limitTimeEl.addActionListener(FormEvent.ONCHANGE); - limitTimeEl.setEnabled(!restrictedEdit); + limitTimeEl.setEnabled(!restrictedEdit && !blockedEdit); timeMinEl = uifactory.addIntegerElement("form.imd.time.min", 0, formLayout); timeMinEl.setDisplaySize(3); - timeMinEl.setEnabled(!restrictedEdit); + timeMinEl.setEnabled(!restrictedEdit && !blockedEdit); timeSecEl = uifactory.addIntegerElement("form.imd.time.sek", 0, formLayout); timeSecEl.setDisplaySize(3); - timeSecEl.setEnabled(!restrictedEdit); + timeSecEl.setEnabled(!restrictedEdit && !blockedEdit); if (section.getDuration() != null && section.getDuration().isSet()) { limitTimeEl.select(yesnoKeys[0], true); timeMinEl.setIntValue(section.getDuration().getMin()); @@ -132,7 +133,7 @@ public class SectionController extends FormBasicController implements TabbableCo boolean random = SelectionOrdering.RANDOM.equals(section.getSelection_ordering().getOrderType()); shuffleEl = uifactory.addRadiosHorizontal("shuffle", "form.section.shuffle", formLayout, yesnoKeys, yesnoValues); shuffleEl.addActionListener(FormEvent.ONCHANGE); - shuffleEl.setEnabled(!restrictedEdit); + shuffleEl.setEnabled(!restrictedEdit && !blockedEdit); if (random) { shuffleEl.select(yesnoKeys[0], true); } else { @@ -150,7 +151,7 @@ public class SectionController extends FormBasicController implements TabbableCo } selectionNumEl = uifactory.addDropdownSingleselect("selection.num", "form.section.selection_pre", formLayout, theKeys, theValues, null); selectionNumEl.setHelpText(translate("form.section.selection_pre.hover")); - selectionNumEl.setEnabled(!restrictedEdit); + selectionNumEl.setEnabled(!restrictedEdit && !blockedEdit); int selectionNum = section.getSelection_ordering().getSelectionNumber(); if(selectionNum <= 0) { selectionNumEl.select(theKeys[0], true); @@ -162,7 +163,9 @@ public class SectionController extends FormBasicController implements TabbableCo FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); formLayout.add(buttonsCont); - uifactory.addFormSubmitButton("submit", buttonsCont); + if(!blockedEdit) { + uifactory.addFormSubmitButton("submit", buttonsCont); + } } public void childNodeChanges() { @@ -228,7 +231,7 @@ public class SectionController extends FormBasicController implements TabbableCo section.setObjectives(newObjectives); } - if (!restrictedEdit) { + if (!restrictedEdit && !blockedEdit) { String selectionNumStr = selectionNumEl.getSelectedKey(); int selectionNum = 1; try { diff --git a/src/main/java/org/olat/ims/qti/editor/_content/index.html b/src/main/java/org/olat/ims/qti/editor/_content/index.html index 5aa331d4b6169374fdb4f3c159dd80ce6ae097af..434256cfcfe6034badee60da3021546bc0b93b62 100644 --- a/src/main/java/org/olat/ims/qti/editor/_content/index.html +++ b/src/main/java/org/olat/ims/qti/editor/_content/index.html @@ -1,3 +1,6 @@ +<div class="o_error">$r.translate("error.qti.deprecated") + <div class="o_button_group">$r.render("tools.convert.qti21")</div> +</div> <h4>$r.escapeHtml($qtititle)</h4> #if($warningEssay) <div class="o_warning">$r.translate("warning.test.with.essay")</div> diff --git a/src/main/java/org/olat/ims/qti/editor/_content/tab_assess.html b/src/main/java/org/olat/ims/qti/editor/_content/tab_assess.html index 2159d92913a456e8d79cd9b2195998c11771ef2e..820dd701891e47811e50650a1966d12d2b9d9b63 100644 --- a/src/main/java/org/olat/ims/qti/editor/_content/tab_assess.html +++ b/src/main/java/org/olat/ims/qti/editor/_content/tab_assess.html @@ -19,18 +19,18 @@ <div class="form-group"> <label class="control-label col-sm-3">$r.translate("form.metadata.title")</label> <div class="col-sm-9"> - <input class="form-control" type="text" size="30" name="title" value="$r.escapeHtml($!assessment.title)" onchange="return setFormDirty('ofo_assessform')" onclick="return setFormDirty('ofo_assessform')" /> + <input class="form-control" type="text" size="30" name="title" value="$r.escapeHtml($!assessment.title)" onchange="return setFormDirty('ofo_assessform')" onclick="return setFormDirty('ofo_assessform')" #if($isBlockedEdit) disabled="disabled" #end /> </div> </div> <div class="form-group"> <label class="control-label col-sm-3">$r.translate("form.metadata.objectives")</label> <div class="col-sm-9"> - <textarea name="objectives" class="form-control" cols="35" rows="8" onchange="return setFormDirty('ofo_assessform')" onclick="return setFormDirty('ofo_assessform')" >$!assessment.objectives</textarea> + <textarea name="objectives" class="form-control" cols="35" rows="8" onchange="return setFormDirty('ofo_assessform')" onclick="return setFormDirty('ofo_assessform')" #if($isBlockedEdit) disabled="disabled" #end>$!assessment.objectives</textarea> </div> </div> -#if($isRestrictedEdit) +#if($isRestrictedEdit || $isBlockededit) <div class="form-group"> <label class="control-label col-sm-3">$r.translate("form.assessment.selection_pre")$r.render("selectionPreHelpText")</label> <div class="col-sm-9"> @@ -96,7 +96,7 @@ #if($isSurveyMode.equals("false")) - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) <div class="form-group"> <label class="control-label col-sm-3">$r.translate("form.metadata.duration")</label> <div class="col-sm-9"> @@ -137,7 +137,7 @@ </div> #end - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) <div class="form-group"> <label class="control-label col-sm-3">$r.translate("form.metadata.globalfeedbackNsolution")$r.render("globalfeedbackNsolutionHelpText")</label> <div class="col-sm-9"> @@ -166,7 +166,7 @@ </div> #end - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) #if ($assessment.isInheritControls()) <div class="form-group"> <label class="control-label col-sm-3">$r.translate("form.metadata.show.feedback")</label> @@ -203,7 +203,7 @@ </div> #end - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) #if ($assessment.isInheritControls()) <div class="form-group"> <label class="control-label col-sm-3">$r.translate("form.metadata.show.hints")</label> @@ -240,7 +240,7 @@ </div> #end - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) #if ($assessment.isInheritControls()) <div class="form-group"> <label class="control-label col-sm-3">$r.translate("form.metadata.show.solution")</label> @@ -284,7 +284,7 @@ #end #if($isSurveyMode.equals("false")) - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) <div class="form-group"> <label class="control-label col-sm-3">$r.translate("form.metadata.cutvalue")</label> <div class="col-sm-9"> @@ -301,7 +301,11 @@ </div> #end #end +#if($isBlockedEdit) + +#else <div class="col-sm-offset-3 col-sm-9 "><div class="btn-group"> <button type="button" class="btn btn-primary" name="olat_fosm" onclick="o_IQEvent('ofo_assessform')"><span>$r.translateInAttribute("submit")</span></button> </div></div> +#end </form></fieldset> \ No newline at end of file diff --git a/src/main/java/org/olat/ims/qti/editor/_content/tab_essayItem.html b/src/main/java/org/olat/ims/qti/editor/_content/tab_essayItem.html index d7320c16418828460782633f5949dd5ccf0f2baf..b758b79ed81929889df3b5ac432e4c074252eddd 100644 --- a/src/main/java/org/olat/ims/qti/editor/_content/tab_essayItem.html +++ b/src/main/java/org/olat/ims/qti/editor/_content/tab_essayItem.html @@ -11,7 +11,9 @@ <tr> <td>$r.formatLatexFormulas($question.getQuestion().renderAsHtml($mediaBaseURL))</td> <td align="center"> + #if(!$isBlockedEdit) <a $r.hrefAndOnclick("editq",true,true) title="$r.translateInAttribute("mat.edit.question")"><i class="o_icon o_icon-lg o_icon_edit"> </i></a> + #end </td> </tr> </tbody> @@ -27,13 +29,13 @@ <div class="form-group"> <label class="control-label col-sm-3">$r.translate("essay.columns")</label> <div class="col-sm-9"> - <input type="text" name="columns_q" value="$response.getColumns()" class="form-control" size="3" maxlength="3" onchange="return setFormDirty('ofo_tab_essavitem')" onclick="return setFormDirty('ofo_tab_essavitem')"/> + <input type="text" name="columns_q" value="$response.getColumns()" class="form-control" size="3" maxlength="3" #if($isBlockedEdit) disabled #end onchange="return setFormDirty('ofo_tab_essavitem')" onclick="return setFormDirty('ofo_tab_essavitem')"/> </div> </div> <div class="form-group"> <label class="control-label col-sm-3">$r.translate("essay.rows")</label> <div class="col-sm-9"> - <input type="text" name="rows_q" value="$response.getRows()" class="form-control" size="3" maxlength="3" onchange="return setFormDirty('ofo_tab_essavitem')" onclick="return setFormDirty('ofo_tab_essavitem')"/> + <input type="text" name="rows_q" value="$response.getRows()" class="form-control" size="3" maxlength="3" #if($isBlockedEdit) disabled #end onchange="return setFormDirty('ofo_tab_essavitem')" onclick="return setFormDirty('ofo_tab_essavitem')"/> </div> </div> @@ -41,7 +43,7 @@ <div class="form-group"> <label class="control-label col-sm-3">$r.translate("score")</label> <div class="col-sm-9"> - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) <p class="form-control-static">$question.getMaxValue()</p> #else <input type="text" name="single_score" value="$question.getMaxValue()" class="form-control" size="4" onchange="return setFormDirty('ofo_tab_essavitem')" onclick="return setFormDirty('ofo_tab_essavitem')"/> @@ -50,7 +52,9 @@ </div> #end <div class="col-sm-offset-3 col-sm-9 "><div class="btn-group"> + #if(!$isBlockedEdit) <button type="button" class="btn btn-primary" name="olat_fosm" onclick="o_IQEvent('ofo_tab_essavitem')"><span>$r.translateInAttribute("submit")</span></button> + #end </div></div> </form> </fieldset> diff --git a/src/main/java/org/olat/ims/qti/editor/_content/tab_fibItem.html b/src/main/java/org/olat/ims/qti/editor/_content/tab_fibItem.html index 825f443dbe3fe2081d87008cdf0b6a9e29270a9a..64623ddfe58cd50f2a9bd3544bf23916891f2049 100644 --- a/src/main/java/org/olat/ims/qti/editor/_content/tab_fibItem.html +++ b/src/main/java/org/olat/ims/qti/editor/_content/tab_fibItem.html @@ -2,7 +2,6 @@ <legend>$r.translate("fieldset.legend.answers") $r.contextHelpWithWrapper("Test and Questionnaire Editor in Detail#details_testeditor_fragetypen_fib") </legend> - <form action="$r.formURIbg("sfib")" id="ofo_tab_fibitem" name="ofo_tab_fibitem" method="post" onsubmit="o_XHRSubmit('ofo_tab_fibitem');"> #if ($question && $question.getResponses().size() > 0) <table class="table table-bordered"> @@ -27,7 +26,7 @@ #set ($count = ($foreach.count - 1)) <tr> <td> - #if(!$isRestrictedEdit) + #if(!$isRestrictedEdit && !$isBlockedEdit) <a $r.hrefAndOnclick("up",true,true,"posid","$count") title="$r.translateInAttribute("mat.move_up")"><i class="o_icon o_icon-lg o_icon_move_up"> </i></a> <br /> <a $r.hrefAndOnclick("down",true,true,"posid","$count") title="$r.translateInAttribute("mat.move_down")"><i class="o_icon o_icon-lg o_icon_move_down"> </i></a> @@ -61,14 +60,14 @@ #end <input type="hidden" name="ident_q$count" value="$content.getIdent()" /> </td> - ## if(!$isRestrictedEdit) + ## if(!$isRestrictedEdit && !$isBlockedEdit) #if($isSurveyMode.equals("false")) #if($content.getType().equals("BLANK")) <td valign="middle" align="center"> #if($content.getCaseSensitive().equals("Yes")) - <input type="checkbox" class="o_checkbox" name="case_q$count" value="Yes" checked onchange="return setFormDirty('ofo_tab_fibitem')" onclick="return setFormDirty('ofo_tab_fibitem')"/> + <input type="checkbox" class="o_checkbox" name="case_q$count" value="Yes" checked onchange="return setFormDirty('ofo_tab_fibitem')" #if($isBlockedEdit) disabled #end onclick="return setFormDirty('ofo_tab_fibitem')"/> #else - <input type="checkbox" class="o_checkbox" name="case_q$count" value="Yes" onchange="return setFormDirty('ofo_tab_fibitem')" onclick="return setFormDirty('ofo_tab_fibitem')"/> + <input type="checkbox" class="o_checkbox" name="case_q$count" value="Yes" onchange="return setFormDirty('ofo_tab_fibitem')" #if($isBlockedEdit) disabled #end onclick="return setFormDirty('ofo_tab_fibitem')"/> #end #end </td> @@ -76,17 +75,17 @@ ## end #if($content.getType().equals("BLANK")) <td valign="middle" align="center"> - <input type="text" name="size_q$count" value="$content.getSize()" size="3" maxlength="3" onchange="return setFormDirty('ofo_tab_fibitem')" onclick="return setFormDirty('ofo_tab_fibitem')"/> + <input type="text" name="size_q$count" value="$content.getSize()" size="3" maxlength="3" onchange="return setFormDirty('ofo_tab_fibitem')" #if($isBlockedEdit) disabled #end onclick="return setFormDirty('ofo_tab_fibitem')"/> </td> <td valign="middle" align="center"> - <input type="text" name="maxl_q$count" value="$content.getMaxLength()" size="3" maxlength="3" onchange="return setFormDirty('ofo_tab_fibitem')" onclick="return setFormDirty('ofo_tab_fibitem')"/> + <input type="text" name="maxl_q$count" value="$content.getMaxLength()" size="3" maxlength="3" onchange="return setFormDirty('ofo_tab_fibitem')" #if($isBlockedEdit) disabled #end onclick="return setFormDirty('ofo_tab_fibitem')"/> </td> #end #if($isSurveyMode.equals("false") && !$question.isSingleCorrect() && $content.getType().equals("BLANK")) <td> - #if(!$isRestrictedEdit) - <input type="text" name="points_q$count" value="$content.getPoints()" size="5" onchange="return setFormDirty('ofo_tab_fibitem')" onclick="return setFormDirty('ofo_tab_fibitem')"/> + #if(!$isRestrictedEdit && !$isBlockedEdit) + <input type="text" name="points_q$count" value="$content.getPoints()" size="5" onchange="return setFormDirty('ofo_tab_fibitem')" #if($isBlockedEdit) disabled #end onclick="return setFormDirty('ofo_tab_fibitem')"/> #else $content.getPoints() #end @@ -95,12 +94,14 @@ <td valign="middle" align="center"> #if($content.getType().equals("CONTENT")) + #if(!$isBlockedEdit) <a $r.hrefAndOnclick("editr",true,true,"posid","$count") title="$r.translateInAttribute("mat.edit.response")"><i class="o_icon o_icon-lg o_icon_edit"> </i></a> + #end #else <img src="$r.staticLink("images/qti/empty.gif")" alt "" border="0" width="16"> #end - #if(!$isRestrictedEdit && ($question.getResponses().size() > 1) ) + #if(!$isRestrictedEdit && !$isBlockedEdit && ($question.getResponses().size() > 1) ) <a $r.hrefAndOnclick("del",true,true,"posid","$count") title="$r.translateInAttribute("mat.edit.delete")"><i class="o_icon o_icon-lg o_icon_delete_item"> </i></a> #end </td> @@ -112,7 +113,7 @@ <p> <br /> - #if(!$isRestrictedEdit) + #if(!$isRestrictedEdit && !$isBlockedEdit) <a $r.hrefAndOnclick("addtext",true,true) class="btn btn-default"><span>$r.translate("add_text")</span></a> <a $r.hrefAndOnclick("addblank",true,true) class="btn btn-default"><span>$r.translate("add_blank")</span></a> @@ -124,7 +125,7 @@ <div class="form-group"> <label class="control-label col-sm-3">$r.translate("valuation_method")</label> <div class="col-sm-9"> - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) #if(!$question.isSingleCorrect()) <p class="form-control-static">$r.translate("valuation_method_multi")</p> #else @@ -153,7 +154,7 @@ <div class="form-group"> <label class="control-label col-sm-3">$r.translate("single_score") <i>$r.translate("valuation_method_single")</i></label> <div class="col-sm-9"> - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) #if($question.isSingleCorrect()) <p class="form-control-static">$!question.getSingleCorrectScore()</p> #else @@ -168,7 +169,7 @@ <div class="form-group"> <label class="control-label col-sm-3">$r.translate("min_value")</label> <div class="col-sm-9"> - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) <p class="form-control-static">$!question.getMinValue()</p> #else <input type="text" name="min_value" value="$!question.getMinValue()" size="4" class="form-control" onchange="return setFormDirty('ofo_tab_fibitem')" onclick="return setFormDirty('ofo_tab_fibitem')"/> @@ -178,7 +179,7 @@ <div class="form-group"> <label class="control-label col-sm-3">$r.translate("max_value")</label> <div class="col-sm-9"> - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) <p class="form-control-static">$!question.getMaxValue()</p> #else <input type="text" name="max_value" value="$!question.getMaxValue()" size="4" class="form-control" onchange="return setFormDirty('ofo_tab_fibitem')" onclick="return setFormDirty('ofo_tab_fibitem')"/> @@ -187,6 +188,8 @@ </div> #end <div class="col-sm-offset-3 col-sm-9 "><div class="btn-group"> + #if(!$isBlockedEdit) <button type="button" class="btn btn-primary" name="olat_fosm" onclick="o_IQEvent('ofo_tab_fibitem')"><span>$r.translateInAttribute("submit")</span></button> + #end </div> </form></fieldset> \ No newline at end of file diff --git a/src/main/java/org/olat/ims/qti/editor/_content/tab_kprimItem.html b/src/main/java/org/olat/ims/qti/editor/_content/tab_kprimItem.html index c52d3ce723f1544f17a70e34816447b5656b429c..5997abe1269dec392829f03ca2ee12a6d93ad0c6 100644 --- a/src/main/java/org/olat/ims/qti/editor/_content/tab_kprimItem.html +++ b/src/main/java/org/olat/ims/qti/editor/_content/tab_kprimItem.html @@ -12,7 +12,9 @@ <tr> <td>$r.formatLatexFormulas($question.getQuestion().renderAsHtml($mediaBaseURL))</td> <td align="center"> + #if(!$isBlockedEdit) <a $r.hrefAndOnclick("editq",true,true) title="$r.translateInAttribute("mat.edit.question")"><i class="o_icon o_icon-lg o_icon_edit"> </i></a> + #end </td> </tr> </tbody> @@ -43,7 +45,7 @@ #set ($count = ($foreach.count - 1)) <tr> <td> - #if(!$isRestrictedEdit) + #if(!$isRestrictedEdit && !$isBlockedEdit) <a $r.hrefAndOnclick("up",true,true,"posid","$count") title="$r.translateInAttribute("mat.move_up")"><i class="o_icon o_icon-lg o_icon_move_up"> </i></a> <br /> <a $r.hrefAndOnclick("down",true,true,"posid","$count")" title="$r.translateInAttribute("mat.move_down")"><i class="o_icon o_icon-lg o_icon_move_down"> </i></a> @@ -52,7 +54,7 @@ <td>$r.formatLatexFormulas($content.getContent().renderAsHtml($mediaBaseURL))</td> #if($isSurveyMode.equals("false")) - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) <td valign="middle" align="center"> <input type="radio" name="correctChoice_qro$count" value="correct" #if($content.isCorrect()) checked="checked" #end disabled="disabled" /> </td> @@ -79,7 +81,9 @@ <td > </td> #end <td valign="middle" align="center"> + #if(!$$isBlockedEdit) <a $r.hrefAndOnclick("editr",true,true,"posid","$count") title="$r.translateInAttribute("mat.edit.response")"><i class="o_icon o_icon-lg o_icon_edit"> </i></a> + #end </td> </tr> #end @@ -94,14 +98,14 @@ <div class="form-group"> <label class="control-label col-sm-3">$r.translate("max_value")</label> <div class="col-sm-9"> - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) <p class="form-control-static">$!question.getMaxValue()</p> #else <input type="text" name="max_value" class="form-control" value="$!question.getMaxValue()" size="4" onchange="return setFormDirty('ofo_tab_kprimitem')" onclick="return setFormDirty('ofo_tab_kprimitem')"/> #end </div> </div> - #if(!$isRestrictedEdit) + #if(!$isRestrictedEdit && !$isBlockedEdit) <div class="col-sm-offset-3 col-sm-9 "><div class="btn-group"> <button type="button" class="btn btn-primary" name="olat_fosm" onclick="o_IQEvent('ofo_tab_kprimitem')"><span>$r.translateInAttribute("submit")</span></button> </div></div> diff --git a/src/main/java/org/olat/ims/qti/editor/_content/tab_mcItem.html b/src/main/java/org/olat/ims/qti/editor/_content/tab_mcItem.html index 0afbe148fa5063653d0cba717feb329027eb085e..c405300ad106ca0f5992b1ecc50d991bd1f027ec 100644 --- a/src/main/java/org/olat/ims/qti/editor/_content/tab_mcItem.html +++ b/src/main/java/org/olat/ims/qti/editor/_content/tab_mcItem.html @@ -11,14 +11,15 @@ <tbody><tr> <td>$r.formatLatexFormulas($question.getQuestion().renderAsHtml($mediaBaseURL))</td> <td align="center"> + #if(!$isBlockedEdit) <a $r.hrefAndOnclick("editq",true,true) title="$r.translateInAttribute("mat.edit.question")"><i class="o_icon o_icon-lg o_icon_edit"> </i></a> + #end </td> </tr></tbody> </table> </fieldset> <fieldset class="o_form form-horizontal" role="form"> - <legend>$r.translate("fieldset.legend.answers") - </legend> + <legend>$r.translate("fieldset.legend.answers")</legend> <form action="$r.formURIbg("smc")" id="ofo_tab_mcitem" name="ofo_tab_mcitem" method="post" onsubmit="o_XHRSubmit('ofo_tab_mcitem');"> #if ($question && $question.getResponses().size() > 0) @@ -41,7 +42,7 @@ #set ($count = ($foreach.count - 1)) <tr> <td> - #if(!$isRestrictedEdit) + #if(!$isRestrictedEdit && !$isBlockedEdit) <a $r.hrefAndOnclick("up",true,true,"posid","$count") title="$r.translateInAttribute("mat.move_up")"><i class="o_icon o_icon-lg o_icon_move_up"> </i></a> <br /> <a $r.hrefAndOnclick("down",true,true,"posid","$count") title="$r.translateInAttribute("mat.move_down")"><i class="o_icon o_icon-lg o_icon_move_down"> </i></a> @@ -52,7 +53,7 @@ #if($isSurveyMode.equals("false")) #if(!$question.isSingleCorrect()) <td> - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) $content.getPoints() #else <input type="text" name="points_q$count" value="$content.getPoints()" size="5" onchange="return setFormDirty('ofo_tab_mcitem')" onclick="return setFormDirty('ofo_tab_mcitem')"/> @@ -60,7 +61,7 @@ </td> #else <td valign="middle" align="center"> - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) #if($content.isCorrect()) <input type="checkbox" class="o_checkbox" name="value_q" value="true" disabled="disabled" checked="checked"/> #else @@ -77,9 +78,11 @@ #end #end <td valign="middle" align="center"> + #if(!$isBlockedEdit) <a $r.hrefAndOnclick("editr",true,true,"posid","$count") title="$r.translateInAttribute("mat.edit.response")"><i class="o_icon o_icon-lg o_icon_edit"> </i></a> + #end - #if(!$isRestrictedEdit) + #if(!$isRestrictedEdit && !$isBlockedEdit) <a $r.hrefAndOnclick("del",true,true,"posid","$count") title="$r.translateInAttribute("delete")"><i class="o_icon o_icon-lg o_icon_delete_item"> </i></a> #end </td> @@ -89,7 +92,7 @@ </table> #end - #if(!$isRestrictedEdit) + #if(!$isRestrictedEdit && !$isBlockedEdit) <a href="$r.commandURI("addchoice")" onclick="$r.commandURI("addchoice") return false;" class="btn btn-default"><span>$r.translate("add_answer")</span></a> #end @@ -98,7 +101,7 @@ <div class="form-group"> <label class="control-label col-sm-3">$r.translate("valuation_method")</label> <div class="col-sm-9"> - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) #if(!$question.isSingleCorrect()) <p class="form-control-static">$r.translate("valuation_method_multi")</p> #else @@ -127,7 +130,7 @@ <div class="form-group"> <label class="control-label col-sm-3">$r.translate("single_score") <i>$r.translate("valuation_method_single")</i></label> <div class="col-sm-9"> - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) #if($question.isSingleCorrect()) <p class="form-control-static">$!question.getSingleCorrectScore()</p> #else @@ -141,7 +144,7 @@ <div class="form-group"> <label class="control-label col-sm-3">$r.translate("min_value")</label> <div class="col-sm-9"> - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) <p class="form-control-static">$!question.getMinValue()</p> #else <input type="text" name="min_value" value="$!question.getMinValue()" size="4" class="form-control" onchange="return setFormDirty('ofo_tab_mcitem')" onclick="return setFormDirty('ofo_tab_mcitem')"/> @@ -151,14 +154,14 @@ <div class="form-group"> <label class="control-label col-sm-3">$r.translate("max_value")</label> <div class="col-sm-9"> - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) <p class="form-control-static">$!question.getMaxValue()</p> #else <input type="text" name="max_value" value="$!question.getMaxValue()" size="4" class="form-control" onchange="return setFormDirty('ofo_tab_mcitem')" onclick="return setFormDirty('ofo_tab_mcitem')"/> #end </div> </div> - #if(!$isRestrictedEdit) + #if(!$isRestrictedEdit && !$isBlockedEdit) <div class="col-sm-offset-3 col-sm-9 "><div class="btn-group"> <button type="button" class="btn btn-primary" name="olat_fosm" onclick="o_IQEvent('ofo_tab_mcitem')"><span>$r.translateInAttribute("submit")</span></button> </div></div> diff --git a/src/main/java/org/olat/ims/qti/editor/_content/tab_scItem.html b/src/main/java/org/olat/ims/qti/editor/_content/tab_scItem.html index 9b03ee94be656e0c7f6e17e1c00b3a9cca3fd3e7..7e324a791af0e07d363521076428a73b72ffb6eb 100644 --- a/src/main/java/org/olat/ims/qti/editor/_content/tab_scItem.html +++ b/src/main/java/org/olat/ims/qti/editor/_content/tab_scItem.html @@ -10,7 +10,9 @@ <tbody><tr> <td>$r.formatLatexFormulas($question.getQuestion().renderAsHtml($mediaBaseURL))</td> <td align="center"> + #if(!$isBlockedEdit) <a $r.hrefAndOnclick("editq",true,true) title="$r.translateInAttribute("mat.edit.question")"><i class="o_icon o_icon-lg o_icon_edit"> </i></a> + #end </td> </tr></tbody> </table> @@ -42,7 +44,7 @@ #end #set ($count = ($foreach.count - 1)) <tr><td> - #if(!$isRestrictedEdit) + #if(!$isRestrictedEdit && !$isBlockedEdit) <a $r.hrefAndOnclick("up",true,true,"posid","$count") title="$r.translateInAttribute("mat.move_up")"><i class="o_icon o_icon-lg o_icon_move_up"> </i></a> <br> <a $r.hrefAndOnclick("down",true,true,"posid","$count") title="$r.translateInAttribute("mat.move_down")"><i class="o_icon o_icon-lg o_icon_move_down"> </i></a> @@ -51,7 +53,7 @@ #if($isSurveyMode.equals("false")) <td valign="middle" align="center"> - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) #if($content.isCorrect()) <input type="radio" name="cc" value="value_q" disabled="disabled" checked="checked" /> #else @@ -68,16 +70,18 @@ #end <td valign="middle" align="center"> + #if(!$isBlockedEdit) <a $r.hrefAndOnclick("editr",true,true,"posid","$count") title="$r.translateInAttribute("mat.edit.response")"><i class="o_icon o_icon-lg o_icon_edit"> </i></a> + #end - #if(!$isRestrictedEdit && ($question.getResponses().size() > 1) ) + #if(!$isRestrictedEdit && !$isBlockedEdit && ($question.getResponses().size() > 1) ) <a $r.hrefAndOnclick("del",true,true,"posid","$count") title="$r.translateInAttribute("mat.edit.delete")"><i class="o_icon o_icon-lg o_icon_delete_item"> </i></a> #end </td></tr> #end </tbody> </table> -#if(!$isRestrictedEdit) +#if(!$isRestrictedEdit && !$isBlockedEdit) <a $r.hrefAndOnclick("addchoice",true,true) class="btn btn-default">$r.translate("add_answer")</a> #end @@ -86,7 +90,7 @@ <div class="form-group"> <label class="control-label col-sm-3">$r.translate("score")</label> <div class="col-sm-9"> - #if($isRestrictedEdit) + #if($isRestrictedEdit || $isBlockedEdit) <p class="form-control-static">$!question.getSingleCorrectScore()</p> #else <input type="text" class="form-control" name="single_score" value="$!question.getSingleCorrectScore()" size="4" onchange="return setFormDirty('ofo_tab_scitem')" onclick="return setFormDirty('ofo_tab_scitem')"/> @@ -95,7 +99,7 @@ </div> #end -#if($isSurveyMode.equals("false") && !$isRestrictedEdit) +#if($isSurveyMode.equals("false") && !$isRestrictedEdit && !$isBlockedEdit) <div class="col-sm-offset-3 col-sm-9 "><div class="btn-group"> <button type="button" class="btn btn-primary" name="olat_fosm" onclick="o_IQEvent('ofo_tab_scitem')"><span>$r.translateInAttribute("submit")</span></button> </div></div> diff --git a/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_de.properties index 19270a52ad6ff80058046ee7c53d98dde8ea03af..bb7ac7a3e9e746fbceb4bbefbc799d10253f986e 100644 --- a/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_de.properties @@ -3,135 +3,6 @@ add_answer=Neue Antwort hinzuf\u00FCgen add_blank=Neue L\u00FCcke hinzuf\u00FCgen add_text=Neues Textfragment hinzuf\u00FCgen answer_feedback=Feedback zur Antwort - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - confirm.delete.element=Wollen Sie dieses Element wirklich l\u00F6schen? cut_value=Notwendige Punktzahl f\u00FCr "Bestanden" delete.item=Wollen Sie die Frage "{0}" wirklich l\u00F6schen? @@ -158,6 +29,7 @@ error.rows=Das Format f\u00FCr die H\u00F6he ist ung\u00FCltig. error.save=Das Dokument konnte nicht gespeichert werden. error.title.empty=Der Fragetitel darf nicht leer sein. error.tries=Das Format f\u00FCr die Anzahl L\u00F6sungsversuche ist ung\u00FCltig. +error.qti.deprecated=Diese Version von QTI ist deprecated. Bitte auf dem neuen QTI 2.1 konvertieren. essay.columns=Breite (Anzahl Buchstaben pro Zeile) essay.dimension=Gr\u00F6sse essay.dimension.header=Gr\u00F6sse des Antwortfeldes @@ -218,7 +90,6 @@ form.metadata.timerestriction=Zeitbeschr\u00E4nkung f\u00FCr gesamten Test form.metadata.title=Titel form.metadata.type=Typ form.section.durationswitch=Zeitbeschr\u00E4nkung f\u00FCr ganze Sektion - form.assessment.order_type=Reihenfolge form.assessment.order_type.hover=Bestimmen Sie in welcher Reihenfolge die ausgew\u00e4hlten Sektionen dem Benutzer angezeigt werden sollen. form.assessment.selection_pre=Anzahl Sektionen in diesem Test @@ -340,8 +211,6 @@ tools.export.qpool=Zum Pool exportieren tools.export.docx=Als Worddatei exportieren tools.import.table=Fragen aus Excel importieren export.qpool.successful={0} Frage wurde erfolgreich exportiert - - tools.material.back=Zur\u00FCck tools.material.header=Hinzuf\u00FCgen tools.tools.closeeditor=Schliessen/Speichern diff --git a/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_en.properties index 0589279680f3c2caa379dd03bc5b681e38b29c2f..d4a7af1a8a9b385dd5b021904f348a2cd6d1d508 100644 --- a/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/ims/qti/editor/_i18n/LocalStrings_en.properties @@ -25,6 +25,7 @@ error.load=This document could not be uploaded. error.lock=This test/questionnaire is being edited by user {0} at the moment and therefore locked. error.move.atleastoneitem=Question cannot be moved. A section must contain at least one question. error.preview=An error has occurred while creating the preview. +error.qti.deprecated=This version of QTI is deprecated. Please consider to convert your test to QTI 2.1. error.rows=Height format invalid. error.save=This document could not be saved. error.title.empty=The question's title is mandatory. diff --git a/src/main/java/org/olat/ims/qti/editor/tree/AssessmentNode.java b/src/main/java/org/olat/ims/qti/editor/tree/AssessmentNode.java index 8de263c4fd724583d27bde733eac380835e86f8f..6ba18b5b5a088f9fce514dea47e00b972cad13e5 100644 --- a/src/main/java/org/olat/ims/qti/editor/tree/AssessmentNode.java +++ b/src/main/java/org/olat/ims/qti/editor/tree/AssessmentNode.java @@ -71,22 +71,19 @@ public class AssessmentNode extends GenericQtiNode { * * @param title */ + @Override public void setMenuTitleAndAlt(String title) { super.setMenuTitleAndAlt(title); assmnt.setTitle(title); } - /** - * @see org.olat.ims.qti.editor.tree.GenericQtiNode#createEditTabbedPane(org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.WindowControl, - * org.olat.core.gui.translator.Translator, QTIEditorMainController) - */ + @Override public TabbedPane createEditTabbedPane(UserRequest ureq, WindowControl wControl, Translator trnsltr, QTIEditorMainController editorMainController) { if (myTabbedPane == null) { myTabbedPane = new TabbedPane("tabbedPane", ureq.getLocale()); - TabbableController tabbCntrllr = new AssessmentController(assmnt, qtiPackage, ureq, wControl, editorMainController - .isRestrictedEdit()); + TabbableController tabbCntrllr = new AssessmentController(assmnt, qtiPackage, ureq, wControl, + editorMainController.isRestrictedEdit(), editorMainController.isBlockedEdit()); tabbCntrllr.addTabs(myTabbedPane); tabbCntrllr.addControllerListener(editorMainController); } diff --git a/src/main/java/org/olat/ims/qti/editor/tree/ItemNode.java b/src/main/java/org/olat/ims/qti/editor/tree/ItemNode.java index 24e8ded2132f00b3491896521753d88e5462906c..b05063b8c59f6279599f506710cec6038a8cebff 100644 --- a/src/main/java/org/olat/ims/qti/editor/tree/ItemNode.java +++ b/src/main/java/org/olat/ims/qti/editor/tree/ItemNode.java @@ -110,23 +110,20 @@ public class ItemNode extends GenericQtiNode { * * @param title */ + @Override public void setMenuTitleAndAlt(String title) { super.setMenuTitleAndAlt(title); item.setTitle(title); } - /** - * @see org.olat.ims.qti.editor.tree.GenericQtiNode#createEditTabbedPane(org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.WindowControl, - * org.olat.core.gui.translator.Translator, QTIEditorMainController) - */ + @Override public TabbedPane createEditTabbedPane(UserRequest ureq, WindowControl wControl, Translator trnsltr, QTIEditorMainController editorMainController) { if (myTabbedPane == null) { try { myTabbedPane = new TabbedPane("tabbedPane", ureq.getLocale()); - TabbableController tabbCntrllr = new ItemNodeTabbedFormController(item, qtiPackage, ureq, wControl, editorMainController - .isRestrictedEdit()); + TabbableController tabbCntrllr = new ItemNodeTabbedFormController(item, qtiPackage, ureq, wControl, + editorMainController.isRestrictedEdit(), editorMainController.isBlockedEdit()); tabbCntrllr.addTabs(myTabbedPane); tabbCntrllr.addControllerListener(editorMainController); } catch (Exception e) { @@ -142,10 +139,7 @@ public class ItemNode extends GenericQtiNode { // } - /** - * @see org.olat.ims.qti.editor.tree.IQtiNode#insertQTIObjectAt(QTIObject, - * int) - */ + @Override public void insertQTIObjectAt(QTIObject object, int position) { throw new AssertException("Can't insert objects on ItemNode."); } diff --git a/src/main/java/org/olat/ims/qti/editor/tree/SectionNode.java b/src/main/java/org/olat/ims/qti/editor/tree/SectionNode.java index af1ff2aa210aa1f0ae166d95273ffb831d4734d7..746075c48876ef035542762a90ad6d1bbdb3e9fb 100644 --- a/src/main/java/org/olat/ims/qti/editor/tree/SectionNode.java +++ b/src/main/java/org/olat/ims/qti/editor/tree/SectionNode.java @@ -82,13 +82,12 @@ public class SectionNode extends GenericQtiNode { section.setTitle(title); } - /** - * @see org.olat.ims.qti.editor.tree.GenericQtiNode#createEditTabbedPane(org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl, org.olat.core.gui.translator.Translator, QTIEditorMainController) - */ + @Override public TabbedPane createEditTabbedPane(UserRequest ureq, WindowControl wControl, Translator trnsltr, QTIEditorMainController editorMainController) { if (myTabbedPane == null) { myTabbedPane = new TabbedPane("tabbedPane", ureq.getLocale()); - sectionCtrl = new SectionController(section, qtiPackage, ureq, wControl, editorMainController.isRestrictedEdit()); + sectionCtrl = new SectionController(section, qtiPackage, ureq, wControl, + editorMainController.isRestrictedEdit(), editorMainController.isBlockedEdit()); sectionCtrl.addTabs(myTabbedPane); sectionCtrl.addControllerListener(editorMainController); } diff --git a/src/main/java/org/olat/ims/qti21/ui/QTI21AdminController.java b/src/main/java/org/olat/ims/qti21/ui/QTI21AdminController.java index beedacec6114e5e253ef65138e079a2e0833dc62..c81eab6f9892092473899e8e79e5f335f14a46de 100644 --- a/src/main/java/org/olat/ims/qti21/ui/QTI21AdminController.java +++ b/src/main/java/org/olat/ims/qti21/ui/QTI21AdminController.java @@ -39,7 +39,6 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableModalControlle import org.olat.core.util.StringHelper; import org.olat.core.util.crypto.CryptoUtil; import org.olat.core.util.crypto.X509CertificatePrivateKeyPair; -import org.olat.ims.qti.QTIModule; import org.olat.ims.qti21.QTI21Module; import org.olat.ims.qti21.QTI21Module.CorrectionWorkflow; import org.olat.ims.qti21.ui.assessment.ValidationXmlSignatureController; @@ -62,8 +61,6 @@ public class QTI21AdminController extends FormBasicController { private FormLink validationButton; private MultipleSelectionElement mathExtensionEl; private MultipleSelectionElement digitalSignatureEl; - private MultipleSelectionElement createQTI12resourcesEl; - private MultipleSelectionElement createQTI12SurveyResourcesEl; private MultipleSelectionElement anonymCorrectionWorkflowEl; private FileElement certificateEl; private TextElement certificatePasswordEl; @@ -71,47 +68,23 @@ public class QTI21AdminController extends FormBasicController { private CloseableModalController cmc; private ValidationXmlSignatureController validationCtrl; - - @Autowired - private QTIModule qti12Module; @Autowired private QTI21Module qti21Module; public QTI21AdminController(UserRequest ureq, WindowControl wControl) { - super(ureq, wControl, "admin"); + super(ureq, wControl); initForm(ureq); } @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { - FormLayoutContainer qti12LayoutCont = FormLayoutContainer.createDefaultFormLayout("optionsFor12", getTranslator()); - qti12LayoutCont.setRootForm(mainForm); - formLayout.add("optionsFor12", qti12LayoutCont); - qti12LayoutCont.setFormTitle(translate("admin.12.title")); - qti12LayoutCont.setFormDescription(translate("admin.12.description")); - - createQTI12resourcesEl = uifactory.addCheckboxesHorizontal("create.12.resources", "create.12.resources", qti12LayoutCont, - onKeys, onValues); - if(qti12Module.isCreateResourcesEnabled()) { - createQTI12resourcesEl.select(onKeys[0], true); - } - - createQTI12SurveyResourcesEl = uifactory.addCheckboxesHorizontal("create.12.survey.resources", "create.12.survey.resources", qti12LayoutCont, - onKeys, onValues); - if(qti12Module.isCreateSurveyResourcesEnabled()) { - createQTI12SurveyResourcesEl.select(onKeys[0], true); - } - - FormLayoutContainer layoutCont = FormLayoutContainer.createDefaultFormLayout("options", getTranslator()); - layoutCont.setRootForm(mainForm); - formLayout.add("options", layoutCont); - layoutCont.setFormTitle(translate("admin.title")); + setFormTitle("admin.title"); - validationButton = uifactory.addFormLink("validate.xml.signature", layoutCont, Link.BUTTON); + validationButton = uifactory.addFormLink("validate.xml.signature", formLayout, Link.BUTTON); validationButton.setCustomEnabledLinkCSS("btn btn-default pull-right"); validationButton.getComponent().setSuppressDirtyFormWarning(true); - digitalSignatureEl = uifactory.addCheckboxesHorizontal("digital.signature", "digital.signature", layoutCont, + digitalSignatureEl = uifactory.addCheckboxesHorizontal("digital.signature", "digital.signature", formLayout, onKeys, onValues); if(qti21Module.isDigitalSignatureEnabled()) { digitalSignatureEl.select(onKeys[0], true); @@ -119,7 +92,7 @@ public class QTI21AdminController extends FormBasicController { digitalSignatureEl.setExampleKey("digital.signature.text", null); digitalSignatureEl.addActionListener(FormEvent.ONCHANGE); - certificateEl = uifactory.addFileElement(getWindowControl(), "digital.signature.certificate", "digital.signature.certificate", layoutCont); + certificateEl = uifactory.addFileElement(getWindowControl(), "digital.signature.certificate", "digital.signature.certificate", formLayout); certificateEl.setExampleKey("digital.signature.certificate.example", null); certificateEl.setHelpText(translate("digital.signature.certificate.hint")); if(StringHelper.containsNonWhitespace(qti21Module.getDigitalSignatureCertificate())) { @@ -130,16 +103,16 @@ public class QTI21AdminController extends FormBasicController { String certificatePassword = qti21Module.getDigitalSignatureCertificatePassword(); String password = StringHelper.containsNonWhitespace(certificatePassword) ? PLACEHOLDER : ""; certificatePasswordEl = uifactory.addPasswordElement("digital.signature.certificate.password", "digital.signature.certificate.password", - 256, password, layoutCont); + 256, password, formLayout); certificatePasswordEl.setAutocomplete("new-password"); - anonymCorrectionWorkflowEl = uifactory.addCheckboxesHorizontal("correction.workflow", "correction.workflow", layoutCont, + anonymCorrectionWorkflowEl = uifactory.addCheckboxesHorizontal("correction.workflow", "correction.workflow", formLayout, onKeys, new String[] { translate("correction.workflow.anonymous") }); if(qti21Module.getCorrectionWorkflow() == CorrectionWorkflow.anonymous) { anonymCorrectionWorkflowEl.select(onKeys[0], true); } - mathExtensionEl = uifactory.addCheckboxesHorizontal("math.extension", "math.extension", layoutCont, + mathExtensionEl = uifactory.addCheckboxesHorizontal("math.extension", "math.extension", formLayout, onKeys, onValues); if(qti21Module.isMathAssessExtensionEnabled()) { mathExtensionEl.select(onKeys[0], true); @@ -148,7 +121,7 @@ public class QTI21AdminController extends FormBasicController { mathExtensionEl.addActionListener(FormEvent.ONCHANGE); FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); - layoutCont.add(buttonsCont); + formLayout.add(buttonsCont); uifactory.addFormSubmitButton("save", buttonsCont); } @@ -172,8 +145,8 @@ public class QTI21AdminController extends FormBasicController { allOk &= validateCertificatePassword(uploadedCertificate); } } else { - String password = certificatePasswordEl.getValue(); - if(!PLACEHOLDER.equals(password) && certificateEl.getInitialFile() != null) { + String credential = certificatePasswordEl.getValue(); + if(!PLACEHOLDER.equals(credential) && certificateEl.getInitialFile() != null) { allOk &= validateCertificatePassword(certificateEl.getInitialFile()); } } @@ -234,8 +207,6 @@ public class QTI21AdminController extends FormBasicController { @Override protected void formOK(UserRequest ureq) { - qti12Module.setCreateResourcesEnabled(createQTI12resourcesEl.isSelected(0)); - qti12Module.setCreateSurveyResourcesEnabled(createQTI12SurveyResourcesEl.isSelected(0)); CorrectionWorkflow correctionWf = anonymCorrectionWorkflowEl.isAtLeastSelected(1) ? CorrectionWorkflow.anonymous : CorrectionWorkflow.named; qti21Module.setCorrectionWorkflow(correctionWf); @@ -249,9 +220,9 @@ public class QTI21AdminController extends FormBasicController { certificateEl.reset();// make sure the same certificate is not load twice certificateEl.setInitialFile(newFile); } - String password = certificatePasswordEl.getValue(); - if(!PLACEHOLDER.equals(password)) { - qti21Module.setDigitalSignatureCertificatePassword(password); + String credential = certificatePasswordEl.getValue(); + if(!PLACEHOLDER.equals(credential)) { + qti21Module.setDigitalSignatureCertificatePassword(credential); } } } diff --git a/src/main/java/org/olat/ims/qti21/ui/_content/admin.html b/src/main/java/org/olat/ims/qti21/ui/_content/admin.html deleted file mode 100644 index f8552ac9a2e455e9d4412fa55be8c22f0debcb9e..0000000000000000000000000000000000000000 --- a/src/main/java/org/olat/ims/qti21/ui/_content/admin.html +++ /dev/null @@ -1,2 +0,0 @@ -$r.render("optionsFor12") -$r.render("options") \ No newline at end of file diff --git a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties index e4fff68fa18ed8d4ed8d6fa9fb40fe70eb37c823..9963e5377ac02b3411e8b45476b34f4b2134b684 100644 --- a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties @@ -1,7 +1,5 @@ #Wed Dec 19 17:16:29 CET 2018 actualPoints=$org.olat.modules.iq\:actualPoints -admin.12.description=Hinweis\: Die OpenOLAT Unterst\u00FCtzung f\u00FCr den QTI1.2 Standard endet und wird mit Release 14 vollst\u00E4ndig entfernt. -admin.12.title=QTI 1.2 Einstellungen admin.menu.title=QTI 2.1 admin.menu.title.alt=QTI 2.1 Einstellungen admin.title=QTI 2.1 Einstellungen @@ -82,8 +80,6 @@ correction=Korrigieren correction.workflow=Korrekturworkflow correction.workflow.anonymous=Anonym countdown.running=Zeitlimit {1} Sekunden\: nur <strong>{0} Sekunden \u00FCbrigs</strong> -create.12.resources=Neue QTI 1.2 Tests und Fragen zulassen -create.12.survey.resources=Neue QTI 1.2 Frageb\u00F6gen zulassen debug.outcomes=Output Daten debug.responses=Antworten Daten digital.signature=Testquittung der Testergebnisse diff --git a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties index fc2a6760c59654e97c31e86329e471066de59e41..68bb384fb7eb11d3fe34a211bbc917df4f8580a2 100644 --- a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties @@ -1,7 +1,5 @@ #Thu Dec 07 19:13:19 CET 2017 actualPoints=$org.olat.modules.iq\:actualPoints -admin.12.description=Note: The OpenOLAT support for the QTI1.2 standard will end and be removed completely with release 14. -admin.12.title=QTI 1.2 settings admin.menu.title=QTI 2.1 admin.menu.title.alt=QTI 2.1 settings admin.title=QTI 2.1 settings @@ -81,8 +79,6 @@ correct.solution=Correct solution correction=Grade correction.workflow=Correction workflow correction.workflow.anonymous=Anonymous -create.12.resources=Allow new QTI 1.2 tests and questions -create.12.survey.resources=Allow new QTI 1.2 questionnaires countdown.running=Time limit {1} seconds\: <strong>{0} seconds left</strong> debug.outcomes=Output data debug.responses=Responses data diff --git a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_fr.properties index ab088ae1b6af4991cc9b59b06046dc84e1a834ea..e2f62fe82b281af37f819c9467eb78898d4303a2 100644 --- a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_fr.properties @@ -1,7 +1,5 @@ #Sun Feb 24 08:30:11 CET 2019 actualPoints=$org.olat.modules.iq\:actualPoints -admin.12.description=Conseil\: le support d'OpenOLAT du standard QTI 1.2 arrive \u00E0 son terme et sera enlever compl\u00E8tement de la version 14. -admin.12.title=Configuration QTI 1.2 admin.menu.title=QTI 2.1 admin.menu.title.alt=Configuration QTI 2.1 admin.title=Configuration QTI 2.1 @@ -82,8 +80,6 @@ correction=Corriger correction.workflow=Corrections correction.workflow.anonymous=Anonymis\u00E9 countdown.running=Limite de temps de {1} secondes\: seulement <strong>{0} secondes restantes</strong> -create.12.resources=Autoriser de nouveaux test et questions au format QTI 1.2 -create.12.survey.resources=Autoriser de nouveaux questionnaires au format QTI 1.2 debug.outcomes=Donn\u00E9es et variables debug.responses=Donn\u00E9es de la r\u00E9ponse digital.signature=Signature digitale des r\u00E9sultats du test diff --git a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_pt_BR.properties index a65296c1aaf74be813c1e78c9b95dd482d300adf..2a3e5bfcb91c68b7392aba714f25edc957e594ed 100644 --- a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_pt_BR.properties @@ -1,7 +1,5 @@ #Wed Mar 06 15:44:46 CET 2019 actualPoints=$org.olat.modules.iq\:actualPoints -admin.12.description=Nota\: O suporte ao OpenOLAT para o padr\u00E3o QTI1.2 ser\u00E1 finalizado e removido completamente com o release 14 -admin.12.title=Configura\u00E7\u00F5es QTI 1.2 admin.menu.title=QTI 2.1 admin.menu.title.alt=Defini\u00E7\u00F5es do QTI 2.1 admin.title=Defini\u00E7\u00F5es do QTI 2.1 @@ -82,8 +80,6 @@ correction=Grau correction.workflow=Workflow de corre\u00E7\u00E3o correction.workflow.anonymous=An\u00F4nimo countdown.running=Limite de tempo {1} segundos\: <strong>{0} segundos restantes</strong> -create.12.resources=Permitir novos testes QTI 1.2 e perguntas -create.12.survey.resources=Permitir novos question\u00E1rios QTI 1.2 debug.outcomes=Dados de sa\u00EDda debug.responses=Dados de respostas digital.signature=Recibo dos resultados dos testes diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties index 0e7e02f7e4322bc8517c04fd4f071284cc07e8ca..44d2a62eef143d265460d2399e5c3944af38c445 100644 --- a/src/main/resources/serviceconfig/olat.properties +++ b/src/main/resources/serviceconfig/olat.properties @@ -358,6 +358,13 @@ qti21.digital.signature.certificate= #Try an other encoding to open the ZIP files during import of tests qti21.import.encoding.fallback= +######################################################################## +# QTI 1.2 DEPRECATED , WILL BE REMOVED IN A FURTHER RELEASE +######################################################################## +qti12.edit.resources.enabled=false +qti12.create.resources.enabled=false +qti12.survey.create.resources.enabled=false + ######################################################################## # Certificates ######################################################################## @@ -1315,14 +1322,12 @@ course.node.podcast.enabled=true course.node.blog.enabled=true # The project broker course.node.projectbroker.enabled=true -# The test QTI 1.2 +# The test QTI course.node.test.enabled=true -# The self test QTI 1.2 +# The self test QTI course.node.selfttest.enabled=true -# The survey QTI 1.2 +# The survey QTI course.node.survey.enabled=true -# This course node should not be used an longer. Use the modern one (course.node.form.survey.enabled)! -qti12.survey.create.resources.enabled=false # The form survey course.node.form.survey.enabled=true # The modern check list