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

OO-4207: Button to undo the confirmation of a course element

parent 7fe9ad14
No related branches found
No related tags found
No related merge requests found
Showing
with 45 additions and 31 deletions
......@@ -94,7 +94,7 @@ public class ConditionNodeAccessProvider implements NodeAccessProvider {
}
@Override
public void onAssessmentConfirmed(CourseNode courseNode, UserCourseEnvironment userCourseEnv) {
public void onAssessmentConfirmed(CourseNode courseNode, UserCourseEnvironment userCourseEnv, boolean confirmed) {
// nothing to do
}
......
......@@ -38,7 +38,7 @@ public interface LearningPathConfigs {
public FullyAssessedResult isFullyAssessedOnNodeVisited();
public FullyAssessedResult isFullyAssessedOnConfirmation();
public FullyAssessedResult isFullyAssessedOnConfirmation(boolean confirmed);
public FullyAssessedResult isFullyAssessedOnPassed(Boolean passed, Boolean userVisibility);
......
......@@ -107,15 +107,15 @@ public class LearningPathNodeAccessProvider implements NodeAccessProvider {
@Override
public boolean isAssessmentConfirmationEnabled(CourseNode courseNode, UserCourseEnvironment userCourseEnv) {
FullyAssessedResult result = getConfigs(courseNode).isFullyAssessedOnConfirmation();
FullyAssessedResult result = getConfigs(courseNode).isFullyAssessedOnConfirmation(true);
boolean participant = userCourseEnv.isParticipant();
boolean confirmationEnabled = participant && result.isEnabled();
return confirmationEnabled;
}
@Override
public void onAssessmentConfirmed(CourseNode courseNode, UserCourseEnvironment userCourseEnv) {
FullyAssessedResult result = getConfigs(courseNode).isFullyAssessedOnConfirmation();
public void onAssessmentConfirmed(CourseNode courseNode, UserCourseEnvironment userCourseEnv, boolean confirmed) {
FullyAssessedResult result = getConfigs(courseNode).isFullyAssessedOnConfirmation(confirmed);
updateFullyAssessed(courseNode, userCourseEnv, Role.user, result);
}
......
......@@ -89,10 +89,10 @@ public class ModuleLearningPathConfigs implements LearningPathConfigs {
}
@Override
public FullyAssessedResult isFullyAssessedOnConfirmation() {
public FullyAssessedResult isFullyAssessedOnConfirmation(boolean confirmed) {
String doneTriggerName = getDoneTriggerName();
if (CONFIG_VALUE_TRIGGER_CONFIRMED.equals(doneTriggerName)) {
return LearningPathConfigs.fullyAssessed(true, true, doneOnFullyAssessed);
return LearningPathConfigs.fullyAssessed(true, confirmed, doneOnFullyAssessed);
}
return LearningPathConfigs.notFullyAssessed();
}
......
......@@ -52,7 +52,7 @@ public class UnsupportedLearningPathConfigs implements LearningPathConfigs {
}
@Override
public FullyAssessedResult isFullyAssessedOnConfirmation() {
public FullyAssessedResult isFullyAssessedOnConfirmation(boolean confirmed) {
return LearningPathConfigs.notFullyAssessed();
}
......
......@@ -48,7 +48,7 @@ public interface NodeAccessProvider extends NodeAccessProviderIdentifier {
public boolean isAssessmentConfirmationEnabled(CourseNode courseNode, UserCourseEnvironment userCourseEnv);
public void onAssessmentConfirmed(CourseNode courseNode, UserCourseEnvironment userCourseEnv);
public void onAssessmentConfirmed(CourseNode courseNode, UserCourseEnvironment userCourseEnv, boolean confirmed);
public void onPassedUpdated(CourseNode courseNode, UserCourseEnvironment userCourseEnv, Boolean passed, Boolean userVisibility, Role by);
......
......@@ -82,8 +82,9 @@ public interface NodeAccessService {
*
* @param courseNode
* @param userCourseEnv
* @param confirmed
*/
public void onAssessmentConfirmed(CourseNode courseNode, UserCourseEnvironment userCourseEnv);
public void onAssessmentConfirmed(CourseNode courseNode, UserCourseEnvironment userCourseEnv, boolean confirmed);
/**
* Hook after the user has passed an assessment.
......
......@@ -98,9 +98,9 @@ public class NodeAccessServiceImpl implements NodeAccessService, NodeVisitedList
}
@Override
public void onAssessmentConfirmed(CourseNode courseNode, UserCourseEnvironment userCourseEnv) {
public void onAssessmentConfirmed(CourseNode courseNode, UserCourseEnvironment userCourseEnv, boolean confirmed) {
NodeAccessType type = NodeAccessType.of(userCourseEnv);
getNodeAccessProvider(type).onAssessmentConfirmed(courseNode, userCourseEnv);
getNodeAccessProvider(type).onAssessmentConfirmed(courseNode, userCourseEnv, confirmed);
}
@Override
......
......@@ -52,7 +52,7 @@ public class STLearningPathConfigs implements LearningPathConfigs {
}
@Override
public FullyAssessedResult isFullyAssessedOnConfirmation() {
public FullyAssessedResult isFullyAssessedOnConfirmation(boolean confirmed) {
return LearningPathConfigs.notFullyAssessed();
}
......
......@@ -43,6 +43,7 @@ public class CoursePaginationController extends FormBasicController {
public static final Event NEXT_EVENT = new Event("next");
public static final Event PREVIOUS_EVENT = new Event("previous");
public static final Event CONFIRMED_EVENT = new Event("confirmed");
public static final Event UNCONFIRMED_EVENT = new Event("unconfirmed");
private FormLink previousButton;
private FormLink nextButton;
......@@ -67,6 +68,7 @@ public class CoursePaginationController extends FormBasicController {
confirmButton = uifactory.addFormLink("confirm", "confirm", "command.assessment.done", null, formLayout, Link.BUTTON_XSMALL);
confirmButton.setIconLeftCSS("o_icon o_icon_status_done");
confirmButton.setUserObject(Boolean.TRUE);
nextButton = uifactory.addFormLink("next", "next", "", null, formLayout, Link.BUTTON_XSMALL | Link.NONTRANSLATED);
nextButton.setDomReplacementWrapperRequired(false);
......@@ -78,8 +80,10 @@ public class CoursePaginationController extends FormBasicController {
nextButton.setEnabled(nextEnabled);
}
public void updateAssessmentConfirmUI(boolean cornfirmVisible) {
confirmButton.setVisible(cornfirmVisible);
public void updateAssessmentConfirmUI(boolean confirmVisible, boolean showDone) {
confirmButton.setI18nKey(showDone? "command.assessment.done": "command.assessment.undone");
confirmButton.setUserObject(showDone? Boolean.TRUE: Boolean.FALSE);
confirmButton.setVisible(confirmVisible);
flc.setDirty(true);
}
......@@ -99,7 +103,8 @@ public class CoursePaginationController extends FormBasicController {
} else if(nextButton == source) {
doNext(ureq);
} else if (confirmButton == source) {
doConfirm(ureq);
Boolean done = (Boolean)confirmButton.getUserObject();
doConfirm(ureq, done);
}
super.formInnerEvent(ureq, source, event);
}
......@@ -112,8 +117,12 @@ public class CoursePaginationController extends FormBasicController {
fireEvent(ureq, NEXT_EVENT);
}
private void doConfirm(UserRequest ureq) {
fireEvent(ureq, CONFIRMED_EVENT);
private void doConfirm(UserRequest ureq, Boolean done) {
if (done.booleanValue()) {
fireEvent(ureq, CONFIRMED_EVENT);
} else {
fireEvent(ureq, UNCONFIRMED_EVENT);
}
}
@Override
......
......@@ -492,15 +492,15 @@ public class RunMainController extends MainLayoutBasicController implements Gene
private void updateAssessmentConfirmUI(CourseNode calledCourseNode) {
if (paginationCtrl != null) {
boolean confirmVisible = false;
boolean showDone = false;
if (calledCourseNode != null) {
TreeNode treeNode = treeModel.getNodeById(calledCourseNode.getIdent());
boolean confirmationEnabled = nodeAccessService.isAssessmentConfirmationEnabled(calledCourseNode, getUce());
AssessmentEvaluation assessmentEvaluation = getUce().getScoreAccounting().evalCourseNode(calledCourseNode);
confirmVisible = treeNode.isAccessible()
&& confirmationEnabled
&& !Boolean.TRUE.equals(assessmentEvaluation.getFullyAssessed());
confirmVisible = treeNode.isAccessible() && confirmationEnabled;
showDone = !Boolean.TRUE.equals(assessmentEvaluation.getFullyAssessed());
}
paginationCtrl.updateAssessmentConfirmUI(confirmVisible);
paginationCtrl.updateAssessmentConfirmUI(confirmVisible, showDone);
updateProgressUI();
}
}
......@@ -637,7 +637,9 @@ public class RunMainController extends MainLayoutBasicController implements Gene
} else if (event == CoursePaginationController.PREVIOUS_EVENT) {
doPrevious(ureq);
} else if (event == CoursePaginationController.CONFIRMED_EVENT) {
doAssessmentConfirmation();
doAssessmentConfirmation(true);
} else if (event == CoursePaginationController.UNCONFIRMED_EVENT) {
doAssessmentConfirmation(false);
}
}
}
......@@ -666,8 +668,8 @@ public class RunMainController extends MainLayoutBasicController implements Gene
}
}
private void doAssessmentConfirmation() {
nodeAccessService.onAssessmentConfirmed(getCurrentCourseNode(), getUce());
private void doAssessmentConfirmation(boolean confirmed) {
nodeAccessService.onAssessmentConfirmed(getCurrentCourseNode(), getUce(), confirmed);
updateAfterChanges(getCurrentCourseNode());
updateAssessmentConfirmUI(getCurrentCourseNode());
}
......
......@@ -2,6 +2,7 @@
command.access=Zugangskonfiguration
command.assessment.done=Erledigt
command.assessment.mode=Pr\u00FCfungsmodus
command.assessment.undone=Unerledigt
command.bookmark=Bookmark
command.calendar=Kalender
command.catalog=Katalogeintr\u00E4ge
......
......@@ -2,6 +2,7 @@
command.access=Access configuration
command.assessment.done=Done
command.assessment.mode=Assessment mode
command.assessment.undone=Undone
command.bookmark=Bookmark
command.calendar=Calendar
command.catalog=Catalogue entries
......
......@@ -126,7 +126,7 @@ public class LearningPathNodeAccessProviderTest {
@Test
public void shouldReturnConfirmEnabled() {
LearningPathConfigs configs = mock(LearningPathConfigs.class);
when(configs.isFullyAssessedOnConfirmation()).thenReturn(fullyAssessed(true, true, true));
when(configs.isFullyAssessedOnConfirmation(true)).thenReturn(fullyAssessed(true, true, true));
LearningPathNodeHandler handler = mock(LearningPathNodeHandler.class);
when(handler.getConfigs(courseNodeMock)).thenReturn(configs);
when(registry.getLearningPathNodeHandler(courseNodeMock)).thenReturn(handler);
......@@ -139,7 +139,7 @@ public class LearningPathNodeAccessProviderTest {
@Test
public void shouldNotReturnConfirmEnabledNotEnabledInConfiguration() {
LearningPathConfigs configs = mock(LearningPathConfigs.class);
when(configs.isFullyAssessedOnConfirmation()).thenReturn(fullyAssessed(false, true, true));
when(configs.isFullyAssessedOnConfirmation(true)).thenReturn(fullyAssessed(false, true, true));
LearningPathNodeHandler handler = mock(LearningPathNodeHandler.class);
when(handler.getConfigs(courseNodeMock)).thenReturn(configs);
when(registry.getLearningPathNodeHandler(courseNodeMock)).thenReturn(handler);
......@@ -152,7 +152,7 @@ public class LearningPathNodeAccessProviderTest {
@Test
public void shouldNotReturnConfirmEnabledNotAParticipant() {
LearningPathConfigs configs = mock(LearningPathConfigs.class);
when(configs.isFullyAssessedOnConfirmation()).thenReturn(fullyAssessed(true, true, true));
when(configs.isFullyAssessedOnConfirmation(true)).thenReturn(fullyAssessed(true, true, true));
LearningPathNodeHandler handler = mock(LearningPathNodeHandler.class);
when(handler.getConfigs(courseNodeMock)).thenReturn(configs);
when(registry.getLearningPathNodeHandler(courseNodeMock)).thenReturn(handler);
......@@ -227,16 +227,16 @@ public class LearningPathNodeAccessProviderTest {
@Test
public void shouldInvokeConformedConfig() {
sut.onAssessmentConfirmed(courseNodeMock, coachCourseEnv);
sut.onAssessmentConfirmed(courseNodeMock, coachCourseEnv, true);
verify(configMock).isFullyAssessedOnConfirmation();
verify(configMock).isFullyAssessedOnConfirmation(true);
}
@Test
public void shouldInvokePassedConfig() {
sut.onPassedUpdated(courseNodeMock, coachCourseEnv, null, null, null);
verify(configMock).isFullyAssessedOnPassed(any(), null);
verify(configMock).isFullyAssessedOnPassed(any(), any());
}
@Test
......
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