diff --git a/src/main/java/org/olat/course/nodes/iq/IQEditController.java b/src/main/java/org/olat/course/nodes/iq/IQEditController.java index a779d37b4492c7b8eb0f0200fc9b51d7808082f9..e85f1c4590cc76d5595b9c42afba30d418ffdfa9 100644 --- a/src/main/java/org/olat/course/nodes/iq/IQEditController.java +++ b/src/main/java/org/olat/course/nodes/iq/IQEditController.java @@ -83,6 +83,7 @@ import org.olat.course.tree.CourseInternalLinkTreeModel; import org.olat.fileresource.FileResourceManager; import org.olat.ims.qti.QTIResult; import org.olat.ims.qti.QTIResultManager; +import org.olat.ims.qti.QTIResultSet; import org.olat.ims.qti.editor.QTIEditorPackage; import org.olat.ims.qti.editor.QTIEditorPackageImpl; import org.olat.ims.qti.editor.beecom.objects.Assessment; @@ -334,8 +335,6 @@ public class IQEditController extends ActivateableTabbableDefaultController impl myContent = createVelocityContainer("edit"); chooseTestButton = LinkFactory.createButtonSmall("command.chooseRepFile", myContent, this); chooseTestButton.setElementCssClass("o_sel_test_choose_repofile"); - changeTestButton = LinkFactory.createButtonSmall("command.changeRepFile", myContent, this); - changeTestButton.setElementCssClass("o_sel_test_change_repofile"); // fetch repository entry RepositoryEntry re = null; @@ -370,6 +369,14 @@ public class IQEditController extends ActivateableTabbableDefaultController impl previewLink.setTitle(getTranslator().translate("command.preview")); } + if (re == null || !isRestricted(re)) { + changeTestButton = LinkFactory.createButtonSmall("command.changeRepFile", myContent, this); + changeTestButton.setElementCssClass("o_sel_test_change_repofile"); + } else if (ureq.getUserSession().getRoles().isOLATAdmin()) { + changeTestButton = LinkFactory.createButtonSmall("command.changeRepFile", myContent, this); + changeTestButton.setElementCssClass("o_sel_test_change_repofile o_button_dirty"); + } + String disclaimer = (String) moduleConfiguration.get(CONFIG_KEY_DISCLAIMER); //allowRelativeLinks = courseNode.getModuleConfiguration().getBooleanEntry(CONFIG_KEY_ALLOW_RELATIVE_LINKS); @@ -440,6 +447,30 @@ public class IQEditController extends ActivateableTabbableDefaultController impl || RepositoryManager.getInstance().isInstitutionalRessourceManagerFor(identity, roles, re)); } + /** + * Checks if the QTI Test has already test results + * @param repository entry + * @return + */ + private boolean isRestricted(RepositoryEntry re) { + OLATResource res = re.getOlatResource(); + + if (OnyxModule.isOnyxTest(res)) { + QTIResultManager qrm = QTIResultManager.getInstance(); + List<QTIResultSet> resultSets = qrm.getResultSets(course.getResourceableId(), + courseNode.getIdent(), + re.getKey(), + null); + return (resultSets.size() > 0); + } else { + String repositorySoftKey = (String) courseNode.getModuleConfiguration().get(IQEditController.CONFIG_KEY_REPOSITORY_SOFTKEY); + Long repKey = RepositoryManager.getInstance().lookupRepositoryEntryBySoftkey(repositorySoftKey, true).getKey(); + boolean restrictedEdit = false; + restrictedEdit = QTIResultManager.getInstance().countResults(course.getResourceableId(), courseNode.getIdent(), repKey) > 0; + return restrictedEdit; + } + } + /** * @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) diff --git a/src/main/java/org/olat/course/nodes/iq/_content/edit.html b/src/main/java/org/olat/course/nodes/iq/_content/edit.html index 6a996d87f780e68aecf2846829c2ffb8789f36f4..748290260c279f428ecf634267c0bc06b72315cc 100644 --- a/src/main/java/org/olat/course/nodes/iq/_content/edit.html +++ b/src/main/java/org/olat/course/nodes/iq/_content/edit.html @@ -22,7 +22,9 @@ </div> <div class="form-group"> <div class="col-sm-offset-3 col-sm-9"> - $r.render("command.changeRepFile") + #if($r.available("command.changeRepFile")) + $r.render("command.changeRepFile") + #end #if($r.available("command.editRepFile")) $r.render("command.editRepFile") #end