From cec9924560c4a56af4ff320265be91ba89fb2ddf Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Tue, 11 Jul 2017 14:24:40 +0200
Subject: [PATCH] OO-2636: roll call enabled not saved, better enable/disable
 behavior (rewrite the old settings)

---
 .../ui/LectureSettingsAdminController.java    | 180 +++++++++++-------
 .../ui/_i18n/LocalStrings_en.properties       |   2 +-
 2 files changed, 116 insertions(+), 66 deletions(-)

diff --git a/src/main/java/org/olat/modules/lecture/ui/LectureSettingsAdminController.java b/src/main/java/org/olat/modules/lecture/ui/LectureSettingsAdminController.java
index 9402596c43a..3676a11e450 100644
--- a/src/main/java/org/olat/modules/lecture/ui/LectureSettingsAdminController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/LectureSettingsAdminController.java
@@ -69,6 +69,8 @@ public class LectureSettingsAdminController extends FormBasicController {
 	public LectureSettingsAdminController(UserRequest ureq, WindowControl wControl) {
 		super(ureq, wControl, "admin_settings");
 		initForm(ureq);
+		initializeValues();
+		updateUI();
 	}
 
 	@Override
@@ -82,46 +84,25 @@ public class LectureSettingsAdminController extends FormBasicController {
 		String[] onValues = new String[] { translate("on") };
 		enableEl = uifactory.addCheckboxesHorizontal("lecture.admin.enabled", courseCont, onKeys, onValues);
 		enableEl.addActionListener(FormEvent.ONCHANGE);
-		if(lectureModule.isEnabled()) {
-			enableEl.select(onKeys[0], true);
-		}
-		
+
 		String[] yesNoValues = new String[]{ translate("yes"), translate("no") };
 		canOverrideStandardConfigEl = uifactory.addRadiosHorizontal("lecture.can.override.standard.configuration", courseCont, yesNoKeys, yesNoValues);
 		canOverrideStandardConfigEl.addActionListener(FormEvent.ONCHANGE);
-		if(lectureModule.isCanOverrideStandardConfiguration()) {
-			canOverrideStandardConfigEl.select(yesNoKeys[0], true);
-		} else {
-			canOverrideStandardConfigEl.select(yesNoKeys[1], true);
-		}
-		
+
 		// roll call enabled
 		rollCallEnableEl = uifactory.addCheckboxesHorizontal("lecture.rollcall.default.enabled", courseCont, onKeys, onValues);
 		rollCallEnableEl.addActionListener(FormEvent.ONCHANGE);
-		if(lectureModule.isRollCallDefaultEnabled()) {
-			rollCallEnableEl.select(onKeys[0], true);
-		}
-		
+
 		// calculate attendance
 		calculateAttendanceRateEnableEl = uifactory.addCheckboxesHorizontal("lecture.calculate.attendance.rate.default.enabled", courseCont, onKeys, onValues);
-		if(lectureModule.isRollCallCalculateAttendanceRateDefaultEnabled()) {
-			calculateAttendanceRateEnableEl.select(onKeys[0], true);
-		}
-		long attendanceRate = Math.round(lectureModule.getRequiredAttendanceRateDefault() * 100.0d);
-		String attendanceRateStr = Long.toString(attendanceRate);
-		attendanceRateEl = uifactory.addTextElement("lecture.attendance.rate.default", "lecture.attendance.rate.default", 2, attendanceRateStr, courseCont);
+
+		attendanceRateEl = uifactory.addTextElement("lecture.attendance.rate.default", "lecture.attendance.rate.default", 2, "", courseCont);
 		attendanceRateEl.setMandatory(true);
 		attendanceRateEl.setDisplaySize(2);
 
 		// sync calendars
 		syncTeachersCalendarEnableEl = uifactory.addCheckboxesHorizontal("sync.teachers.calendar.enabled", courseCont, onKeys, onValues);
-		if(lectureModule.isTeacherCalendarSyncEnabledDefault()) {
-			syncTeachersCalendarEnableEl.select(onKeys[0], true);
-		}
 		syncCourseCalendarEnableEl = uifactory.addCheckboxesHorizontal("sync.course.calendar.enabled", courseCont, onKeys, onValues);
-		if(lectureModule.isCourseCalendarSyncEnabledDefault()) {
-			syncCourseCalendarEnableEl.select(onKeys[0], true);
-		}
 
 		//global configuration
 		globalCont = FormLayoutContainer.createDefaultFormLayout("global", getTranslator());
@@ -130,82 +111,141 @@ public class LectureSettingsAdminController extends FormBasicController {
 		formLayout.add("global", globalCont);
 
 		partiallyDoneEnabledEl = uifactory.addCheckboxesVertical("lecture.status.partially.done.enabled", globalCont, onKeys, onValues, 1);
-		if(lectureModule.isStatusPartiallyDoneEnabled()) {
-			partiallyDoneEnabledEl.select(onKeys[0], true);
-		}
 
 		String[] statusKeys = new String[]{ LectureBlockStatus.cancelled.name() };
 		String[] statusValues = new String[]{ translate(LectureBlockStatus.cancelled.name()) };
 		statusEnabledEl = uifactory.addCheckboxesVertical("lecture.status.enabled", globalCont, statusKeys, statusValues, 1);
-		if(lectureModule.isStatusCancelledEnabled()) {
-			statusEnabledEl.select(LectureBlockStatus.cancelled.name(), true);
-		}
 
 		// reminder enabled
 		reminderEnableEl = uifactory.addCheckboxesHorizontal("lecture.reminder.enabled", globalCont, onKeys, onValues);
 		reminderEnableEl.addActionListener(FormEvent.ONCHANGE);
+
+		reminderPeriodEl = uifactory.addTextElement("lecture.reminder.period", "lecture.reminder.period", 16, "", globalCont);
+		reminderPeriodEl.setMandatory(true);
+
+		// auto close period
+		autoClosePeriodEl = uifactory.addTextElement("lecture.auto.close.period", "lecture.auto.close.period", 16, "", globalCont);
+		autoClosePeriodEl.setMandatory(true);
+
+		authorizedAbsenceEnableEl = uifactory.addCheckboxesHorizontal("lecture.authorized.absence.enabled", globalCont, onKeys, onValues);
+		authorizedAbsenceEnableEl.addActionListener(FormEvent.ONCHANGE);
+		countAuthorizedAbsenceAsAttendantEl = uifactory.addCheckboxesHorizontal("lecture.count.authorized.absence.attendant", globalCont, onKeys, onValues);
+		absenceDefaultAuthorizedEl = uifactory.addCheckboxesHorizontal("lecture.absence.default.authorized", globalCont, onKeys, onValues);
+		teacherCanAuthorizeAbsenceEl = uifactory.addCheckboxesHorizontal("lecture.teacher.can.authorize.absence", globalCont, onKeys, onValues);
+
+		// appeal enabled
+		appealAbsenceEnableEl = uifactory.addCheckboxesHorizontal("lecture.appeal.absence.enabled", globalCont, onKeys, onValues);
+		appealAbsenceEnableEl.addActionListener(FormEvent.ONCHANGE);
+		appealPeriodEl = uifactory.addTextElement("lecture.appeal.absence.period", "lecture.appeal.absence.period", 16, "", globalCont);
+		appealPeriodEl.setMandatory(true);
+
+		//buttons
+		FormLayoutContainer buttonsWrapperCont = FormLayoutContainer.createDefaultFormLayout("global", getTranslator());
+		buttonsWrapperCont.setRootForm(mainForm);
+		formLayout.add("buttonsWrapper", buttonsWrapperCont);
+		FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
+		buttonsWrapperCont.add(buttonsCont);
+		uifactory.addFormSubmitButton("save", buttonsCont);
+	}
+	
+	private void initializeValues() {
+		if(lectureModule.isEnabled()) {
+			enableEl.select(onKeys[0], true);
+		}
+		
+		if(lectureModule.isCanOverrideStandardConfiguration()) {
+			canOverrideStandardConfigEl.select(yesNoKeys[0], true);
+		} else {
+			canOverrideStandardConfigEl.select(yesNoKeys[1], true);
+		}
+		
+		if(lectureModule.isRollCallDefaultEnabled()) {
+			rollCallEnableEl.select(onKeys[0], true);
+		} else {
+			rollCallEnableEl.uncheckAll();
+		}
+		
+		if(lectureModule.isRollCallCalculateAttendanceRateDefaultEnabled()) {
+			calculateAttendanceRateEnableEl.select(onKeys[0], true);
+		} else {
+			calculateAttendanceRateEnableEl.uncheckAll();
+		}
+		
+		long attendanceRate = Math.round(lectureModule.getRequiredAttendanceRateDefault() * 100.0d);
+		attendanceRateEl.setValue(Long.toString(attendanceRate));
+		
+		if(lectureModule.isTeacherCalendarSyncEnabledDefault()) {
+			syncTeachersCalendarEnableEl.select(onKeys[0], true);
+		} else {
+			syncCourseCalendarEnableEl.uncheckAll();
+		}
+		if(lectureModule.isCourseCalendarSyncEnabledDefault()) {
+			syncCourseCalendarEnableEl.select(onKeys[0], true);
+		} else {
+			syncCourseCalendarEnableEl.uncheckAll();
+		}
+		
+		if(lectureModule.isStatusPartiallyDoneEnabled()) {
+			partiallyDoneEnabledEl.select(onKeys[0], true);
+		} else {
+			partiallyDoneEnabledEl.uncheckAll();
+		}
+		
+		if(lectureModule.isStatusCancelledEnabled()) {
+			statusEnabledEl.select(LectureBlockStatus.cancelled.name(), true);
+		} else {
+			statusEnabledEl.uncheckAll();
+		}
+		
 		if(lectureModule.isRollCallReminderEnabled()) {
 			reminderEnableEl.select(onKeys[0], true);
+		} else {
+			reminderEnableEl.uncheckAll();
 		}
+		
 		String reminderPeriod = "";
 		if(lectureModule.getRollCallReminderPeriod() > 0) {
 			reminderPeriod = Integer.toString(lectureModule.getRollCallReminderPeriod());
 		}
-		reminderPeriodEl = uifactory.addTextElement("lecture.reminder.period", "lecture.reminder.period", 16, reminderPeriod, globalCont);
-		reminderPeriodEl.setMandatory(true);
-
-		// auto close period
+		reminderPeriodEl.setValue(reminderPeriod);
+		
 		String autoClosePeriod = "";
 		if(lectureModule.getRollCallAutoClosePeriod() > 0) {
 			autoClosePeriod = Integer.toString(lectureModule.getRollCallAutoClosePeriod());
 		}
-		autoClosePeriodEl = uifactory.addTextElement("lecture.auto.close.period", "lecture.auto.close.period", 16, autoClosePeriod, globalCont);
-		autoClosePeriodEl.setMandatory(true);
-
-		authorizedAbsenceEnableEl = uifactory.addCheckboxesHorizontal("lecture.authorized.absence.enabled", globalCont, onKeys, onValues);
-		authorizedAbsenceEnableEl.addActionListener(FormEvent.ONCHANGE);
+		autoClosePeriodEl.setValue(autoClosePeriod);
+		
 		if(lectureModule.isAuthorizedAbsenceEnabled()) {
 			authorizedAbsenceEnableEl.select(onKeys[0], true);
+		} else {
+			authorizedAbsenceEnableEl.uncheckAll();	
 		}
-		countAuthorizedAbsenceAsAttendantEl = uifactory.addCheckboxesHorizontal("lecture.count.authorized.absence.attendant", globalCont, onKeys, onValues);
 		if(lectureModule.isCountAuthorizedAbsenceAsAttendant()) {
 			countAuthorizedAbsenceAsAttendantEl.select(onKeys[0], true);
+		} else {
+			countAuthorizedAbsenceAsAttendantEl.uncheckAll();
 		}
-		absenceDefaultAuthorizedEl = uifactory.addCheckboxesHorizontal("lecture.absence.default.authorized", globalCont, onKeys, onValues);
 		if(lectureModule.isAbsenceDefaultAuthorized()) {
 			absenceDefaultAuthorizedEl.select(onKeys[0], true);
+		} else {
+			absenceDefaultAuthorizedEl.uncheckAll();
 		}
-		teacherCanAuthorizeAbsenceEl = uifactory.addCheckboxesHorizontal("lecture.teacher.can.authorize.absence", globalCont, onKeys, onValues);
 		if(lectureModule.isTeacherCanAuthorizedAbsence()) {
 			teacherCanAuthorizeAbsenceEl.select(onKeys[0], true);
+		} else {
+			teacherCanAuthorizeAbsenceEl.uncheckAll();
 		}
-		
-		// appeal enabled
-		appealAbsenceEnableEl = uifactory.addCheckboxesHorizontal("lecture.appeal.absence.enabled", globalCont, onKeys, onValues);
-		appealAbsenceEnableEl.addActionListener(FormEvent.ONCHANGE);
 		if(lectureModule.isAbsenceAppealEnabled()) {
 			appealAbsenceEnableEl.select(onKeys[0], true);
+		} else {
+			appealAbsenceEnableEl.uncheckAll();
 		}
+		
 		String appealPeriod = "";
 		if(lectureModule.getAbsenceAppealPeriod() > 0) {
 			appealPeriod = Integer.toString(lectureModule.getAbsenceAppealPeriod());
 		}
-		appealPeriodEl = uifactory.addTextElement("lecture.appeal.absence.period", "lecture.appeal.absence.period", 16, appealPeriod, globalCont);
-		appealPeriodEl.setMandatory(true);
-
-		//buttons
-		FormLayoutContainer buttonsWrapperCont = FormLayoutContainer.createDefaultFormLayout("global", getTranslator());
-		buttonsWrapperCont.setRootForm(mainForm);
-		formLayout.add("buttonsWrapper", buttonsWrapperCont);
-		FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
-		buttonsWrapperCont.add(buttonsCont);
-		uifactory.addFormSubmitButton("save", buttonsCont);
-		updateUI();
-	}
-	
-	@Override
-	protected void doDispose() {
-		//
+		appealPeriodEl.setValue(appealPeriod);
 	}
 	
 	private void updateUI() {
@@ -214,7 +254,6 @@ public class LectureSettingsAdminController extends FormBasicController {
 		authorizedAbsenceEnableEl.setVisible(enabled);
 		attendanceRateEl.setVisible(enabled);
 		appealAbsenceEnableEl.setVisible(enabled);
-		authorizedAbsenceEnableEl.setVisible(enabled);
 		reminderEnableEl.setVisible(enabled);
 		syncTeachersCalendarEnableEl.setVisible(enabled);
 		syncCourseCalendarEnableEl.setVisible(enabled);
@@ -234,6 +273,12 @@ public class LectureSettingsAdminController extends FormBasicController {
 		teacherCanAuthorizeAbsenceEl.setVisible(authorizedAbsenceEnableEl.isVisible() && authorizedAbsenceEnableEl.isAtLeastSelected(1));
 	}
 	
+	@Override
+	protected void doDispose() {
+		//
+	}
+	
+	
 	@Override
 	protected boolean validateFormLogic(UserRequest ureq) {
 		boolean allOk = true;
@@ -296,6 +341,9 @@ public class LectureSettingsAdminController extends FormBasicController {
 	@Override
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		if(enableEl == source) {
+			if(enableEl.isAtLeastSelected(1)) {
+				initializeValues();
+			}
 			updateUI();
 		} else if(appealAbsenceEnableEl == source || reminderEnableEl == source || authorizedAbsenceEnableEl == source) {
 			updateUI();
@@ -322,6 +370,8 @@ public class LectureSettingsAdminController extends FormBasicController {
 			userToolsModule.setAvailableUserTools(aTools.toString());
 		}
 		
+		lectureModule.setRollCallDefaultEnabled(rollCallEnableEl.isAtLeastSelected(1));
+		
 		int autoClosePeriod = Integer.parseInt(autoClosePeriodEl.getValue());
 		lectureModule.setRollCallAutoClosePeriod(autoClosePeriod);
 		
diff --git a/src/main/java/org/olat/modules/lecture/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/lecture/ui/_i18n/LocalStrings_en.properties
index ae9363dc00a..4812b450d08 100644
--- a/src/main/java/org/olat/modules/lecture/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/lecture/ui/_i18n/LocalStrings_en.properties
@@ -114,7 +114,7 @@ lecture.teacher.reminder.body=Reminder lectures block "{0}" in course {3}
 lecture.teacher.reminder.subject=Reminder lectures block "{0}"
 lecture.title=Title
 lectures.admin.reasons=Reasons
-lectures.admin.settings=Seetings lectures and absence management
+lectures.admin.settings=Settings lectures and absence management
 lectures.print.title=Lectures and absences of {0}
 lectures.repository.print.title=Lectures and absences of {1} in course {0}
 lectures.table.closed=Closed lectures blocks
-- 
GitLab