Skip to content
Snippets Groups Projects
Commit e992e1b8 authored by uhensler's avatar uhensler
Browse files

OO-4241: Show obligation configuration in learning path tab (task course element)

parent 8027b336
No related branches found
No related tags found
No related merge requests found
......@@ -129,6 +129,10 @@ public class NodeEditController extends ActivateableTabbableDefaultController im
if (nodeAccessCtrl != null) {
this.nodeAccessCtrl = nodeAccessCtrl;
listenTo(nodeAccessCtrl);
if (childTabsController instanceof ControllerEventListener) {
ControllerEventListener cel = (ControllerEventListener)childTabsController;
nodeAccessCtrl.addControllerListener(cel);
}
} else if (ConditionNodeAccessProvider.TYPE.equals(nodeAccessType.getType())) {
// fallback for legacy access edit controller
visibilityEditCtrl = new VisibilityEditController(ureq, getWindowControl(), courseNode,
......
......@@ -28,8 +28,6 @@ package org.olat.course.learningpath;
*/
public interface LearningPathEditConfigs {
public boolean isObligationVisible();
public boolean isTriggerNodeVisited();
public boolean isTriggerConfirmed();
......
......@@ -27,7 +27,6 @@ package org.olat.course.learningpath;
*/
public class LearningPathEditConfigsBuilder {
private boolean obligationVisible = true;
private boolean triggerNodeVisited;
private boolean triggerConfirmed;
private boolean triggerScore;
......@@ -39,11 +38,6 @@ public class LearningPathEditConfigsBuilder {
LearningPathEditConfigsBuilder() {
this.translationsBuilder = new LearningPathTranslationsBuilder(this);
}
public LearningPathEditConfigsBuilder disableObligation() {
obligationVisible = false;
return this;
}
public LearningPathEditConfigsBuilder enableNodeVisited() {
triggerNodeVisited = true;
......@@ -87,7 +81,6 @@ public class LearningPathEditConfigsBuilder {
private final static class LearningPathEditConfigsImpl implements LearningPathEditConfigs {
private final boolean obligationVisible;
private final boolean triggerNodeVisited;
private final boolean triggerConfirmed;
private final boolean triggerScore;
......@@ -97,7 +90,6 @@ public class LearningPathEditConfigsBuilder {
private final LearningPathTranslations translations;
private LearningPathEditConfigsImpl(LearningPathEditConfigsBuilder builder) {
this.obligationVisible = builder.obligationVisible;
this.triggerNodeVisited = builder.triggerNodeVisited;
this.triggerConfirmed = builder.triggerConfirmed;
this.triggerScore = builder.triggerScore;
......@@ -107,11 +99,6 @@ public class LearningPathEditConfigsBuilder {
this.translations = builder.translationsBuilder.build();
}
@Override
public boolean isObligationVisible() {
return obligationVisible;
}
@Override
public boolean isTriggerNodeVisited() {
return triggerNodeVisited;
......
......@@ -104,7 +104,6 @@ public class LearningPathNodeConfigController extends FormBasicController {
if (Arrays.asList(obligationEl.getKeys()).contains(obligationKey)) {
obligationEl.select(obligationKey, true);
}
obligationEl.setVisible(editConfigs.isObligationVisible());
Date startDate = learningPathConfigs.getStartDate();
startDateEl = uifactory.addDateChooser("config.start.date", startDate, formLayout);
......
......@@ -38,7 +38,6 @@ import org.olat.repository.RepositoryEntry;
public abstract class AbstractGTALearningPathNodeHandler implements LearningPathNodeHandler {
private static final LearningPathEditConfigs EDIT_CONFIGS = LearningPathEditConfigs.builder()
.disableObligation()
.enableNodeVisited()
.enableConfirmed()
.enableScore()
......
......@@ -214,6 +214,14 @@ public class GTAEditController extends ActivateableTabbableDefaultController {
super.event(ureq, source, event);
}
@Override
public void dispatchEvent(UserRequest ureq, Controller source, Event event) {
super.dispatchEvent(ureq, source, event);
if (event == NodeEditController.NODECONFIG_CHANGED_EVENT) {
workflowCtrl.onNodeConfigChanged();
}
}
public MSEditFormController createManualAssessmentCtrl(UserRequest ureq) {
boolean singleIdentityTask = GTAType.individual.name().equals(config.getStringValue(GTACourseNode.GTASK_TYPE));
return new MSEditFormController(ureq, getWindowControl(), config, translate("pane.tab.grading"),
......
......@@ -45,9 +45,13 @@ import org.olat.core.gui.control.generic.modal.DialogBoxController;
import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
import org.olat.core.util.Formatter;
import org.olat.core.util.StringHelper;
import org.olat.course.CourseFactory;
import org.olat.course.ICourse;
import org.olat.course.condition.AreaSelectionController;
import org.olat.course.condition.GroupSelectionController;
import org.olat.course.editor.CourseEditorEnv;
import org.olat.course.learningpath.manager.LearningPathNodeAccessProvider;
import org.olat.course.nodeaccess.NodeAccessType;
import org.olat.course.nodes.GTACourseNode;
import org.olat.course.nodes.MSCourseNode;
import org.olat.course.nodes.gta.GTAManager;
......@@ -97,10 +101,12 @@ public class GTAWorkflowEditController extends FormBasicController {
private final GTACourseNode gtaNode;
private final ModuleConfiguration config;
private boolean optional;
private final CourseEditorEnv courseEditorEnv;
private List<Long> areaKeys;
private List<Long> groupKeys;
private final RepositoryEntry courseRe;
private final boolean isLearningPath;
@Autowired
private HelpModule helpModule;
......@@ -122,6 +128,10 @@ public class GTAWorkflowEditController extends FormBasicController {
//reload to make sure we have the last changes
courseRe = repositoryService
.loadByKey(courseEditorEnv.getCourseGroupManager().getCourseEntry().getKey());
ICourse course = CourseFactory.loadCourse(courseRe);
isLearningPath = LearningPathNodeAccessProvider.TYPE.equals(NodeAccessType.of(course).getType());
optional = config.getBooleanSafe(MSCourseNode.CONFIG_KEY_OPTIONAL);
initForm(ureq);
}
......@@ -221,13 +231,13 @@ public class GTAWorkflowEditController extends FormBasicController {
translate("task.mandatory"), translate("task.optional"),
};
optionalEl = uifactory.addRadiosHorizontal("obligation", "task.obligation", stepsCont, optionalKeys, optionalValues);
optionalEl.addActionListener(FormEvent.ONCHANGE);
boolean optional = config.getBooleanSafe(MSCourseNode.CONFIG_KEY_OPTIONAL);
optionalEl.addActionListener(FormEvent.ONCHANGE);
if(optional) {
optionalEl.select(optionalKeys[1], true);
} else {
optionalEl.select(optionalKeys[0], true);
}
optionalEl.setVisible(!isLearningPath);
relativeDatesEl = uifactory.addCheckboxesHorizontal("relative.dates", "relative.dates", stepsCont, onKeys, new String[]{ "" });
relativeDatesEl.addActionListener(FormEvent.ONCHANGE);
......@@ -391,7 +401,7 @@ public class GTAWorkflowEditController extends FormBasicController {
}
boolean solutionVisibleRelToAll = config.getBooleanSafe(GTACourseNode.GTASK_SAMPLE_SOLUTION_VISIBLE_ALL, false);
String[] solutionVisibleToAllValues = getSolutionVisibleToAllValues(optional);
String[] solutionVisibleToAllValues = getSolutionVisibleToAllValues();
solutionVisibleToAllEl = uifactory.addRadiosVertical("visibleall", "sample.solution.visible.for", stepsCont, solutionVisibleToAllKeys, solutionVisibleToAllValues);
solutionVisibleToAllEl.setVisible(sample && ((!useRelativeDates && solutionVisibleAfter != null) || optional));
if(solutionVisibleRelToAll) {
......@@ -418,7 +428,7 @@ public class GTAWorkflowEditController extends FormBasicController {
uifactory.addFormSubmitButton("save", "save", buttonCont);
}
private String[] getSolutionVisibleToAllValues(boolean optional) {
private String[] getSolutionVisibleToAllValues() {
return new String[] {
optional ? translate("sample.solution.visible.all.optional") : translate("sample.solution.visible.all"),
translate("sample.solution.visible.upload")
......@@ -519,8 +529,9 @@ public class GTAWorkflowEditController extends FormBasicController {
config.setList(GTACourseNode.GTASK_GROUPS, new ArrayList<Long>(0));
}
boolean optional = optionalEl.isSelected(1);
config.setBooleanEntry(MSCourseNode.CONFIG_KEY_OPTIONAL, optional);
if (optionalEl.isVisible()) {
config.setBooleanEntry(MSCourseNode.CONFIG_KEY_OPTIONAL, optional);
}
boolean relativeDates = relativeDatesEl.isAtLeastSelected(1);
config.setBooleanEntry(GTACourseNode.GTASK_RELATIVE_DATES, relativeDates);
......@@ -620,6 +631,14 @@ public class GTAWorkflowEditController extends FormBasicController {
super.formInnerEvent(ureq, source, event);
}
public void onNodeConfigChanged() {
boolean newOptional = config.getBooleanSafe(MSCourseNode.CONFIG_KEY_OPTIONAL);
if (newOptional != optional) {
optional = newOptional;
updateSolutionDeadline();
}
}
private void updateAssignmentDeadline() {
boolean useRelativeDate = relativeDatesEl.isAtLeastSelected(1);
boolean assignment = taskAssignmentEl.isAtLeastSelected(1);
......@@ -639,13 +658,15 @@ public class GTAWorkflowEditController extends FormBasicController {
private void updateSolutionDeadline() {
boolean useRelativeDate = relativeDatesEl.isAtLeastSelected(1);
boolean solution = sampleEl.isAtLeastSelected(1);
boolean optional = optionalEl.isSelected(1);
if (optionalEl.isVisible()) {
optional = optionalEl.isSelected(1);
}
solutionVisibleAfterEl.setVisible(solution && !useRelativeDate);
solutionVisibleRelCont.setVisible(solution && useRelativeDate);
updateDeadline(solutionVisibleRelToEl, false);
solutionVisibleToAllEl.setVisible(solution &&
((!useRelativeDate && solutionVisibleAfterEl.getDate() != null) || optional));
solutionVisibleToAllEl.setKeysAndValues(solutionVisibleToAllKeys, getSolutionVisibleToAllValues(optional), null);
solutionVisibleToAllEl.setKeysAndValues(solutionVisibleToAllKeys, getSolutionVisibleToAllValues(), null);
if(!solutionVisibleToAllEl.isOneSelected()) {
solutionVisibleToAllEl.select(solutionVisibleToAllKeys[1], true);
}
......@@ -827,4 +848,5 @@ public class GTAWorkflowEditController extends FormBasicController {
return values;
}
}
}
\ No newline at end of file
......@@ -270,7 +270,7 @@ sample.solution=Sample solution
sample.solution.enabled=Provide sample solutions for participants
sample.solution.visible.after=Visible after...
sample.solution.visible.all=Sample solutions visible for all after the date is reached, inclusive the one which don't have submitted their task.
sample.solution.visible.all.optional=Sample solution visible for all, inclusive the one wo don't submit the task.
sample.solution.visible.all.optional=Sample solution visible for all, inclusive the one who don't submit the task.
sample.solution.visible.for=Visible for ...
sample.solution.visible.upload=Only after submission of a solution to the task
sampling=Type of sampling
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment