diff --git a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/CourseLecturesProvider.java b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/CourseLecturesProvider.java index ca6f6ef1f0ac8f0b6b2f852bb064a6088bd6752d..bcba07b2b87ce01e6bc0bea9b096d10655c5425b 100644 --- a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/CourseLecturesProvider.java +++ b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/CourseLecturesProvider.java @@ -87,9 +87,12 @@ public class CourseLecturesProvider implements QualityGeneratorProvider { public static final String CONFIG_KEY_REMINDER1_AFTER_DC_DAYS = "reminder1.after.dc.start.days"; public static final String CONFIG_KEY_REMINDER2_AFTER_DC_DAYS = "reminder2.after.dc.start.days"; public static final String CONFIG_KEY_ROLES = "participants.roles"; - public static final String CONFIG_KEY_SURVEY_LECTURE = "survey.lecture"; + public static final String CONFIG_KEY_SURVEY_LECTURE = "survey.lecture.start"; + public static final String CONFIG_KEY_SURVEY_LECTURE_NUMBER = "survey.lecture"; + public static final String CONFIG_KEY_SURVEY_LECTURE_LAST = "survey.lecture.last"; public static final String CONFIG_KEY_TITLE = "title"; - public static final String CONFIG_KEY_TOTAL_LECTURES = "total.lecture"; + public static final String CONFIG_KEY_TOTAL_LECTURES_MIN = "total.lecture"; + public static final String CONFIG_KEY_TOTAL_LECTURES_MAX = "total.lecture.max"; public static final String CONFIG_KEY_WHITE_LIST = "white.list"; public static final String CONFIG_KEY_TOPIC = "topic"; public static final String CONFIG_KEY_TOPIC_COACH = "config.topic.coach"; @@ -267,15 +270,59 @@ public class CourseLecturesProvider implements QualityGeneratorProvider { Collection<CurriculumElementRef> curriculumElementRefs = CurriculumElementWhiteListController.getCurriculumElementRefs(configs); searchParams.setCurriculumElementRefs(curriculumElementRefs); - Integer minExceedingLectures = Integer.parseInt(configs.getValue(CONFIG_KEY_TOTAL_LECTURES)); - searchParams.setMinTotalLectures(minExceedingLectures); + String minLectures = configs.getValue(CONFIG_KEY_TOTAL_LECTURES_MIN); + if (StringHelper.containsNonWhitespace(minLectures)) { + Integer minExceedingLectures = Integer.parseInt(minLectures); + searchParams.setMinTotalLectures(minExceedingLectures); + } + + String maxLectures = configs.getValue(CONFIG_KEY_TOTAL_LECTURES_MAX); + if (StringHelper.containsNonWhitespace(maxLectures)) { + Integer maxExceedingLectures = Integer.parseInt(maxLectures); + searchParams.setMaxTotalLectures(maxExceedingLectures); + } - Integer selectingLecture = Integer.parseInt(configs.getValue(CONFIG_KEY_SURVEY_LECTURE)); - searchParams.setSelectingLecture(selectingLecture); + updateSurveyLectureKey(configs, generator); + String surveyLecture = configs.getValue(CONFIG_KEY_SURVEY_LECTURE); + switch (surveyLecture) { + case CONFIG_KEY_SURVEY_LECTURE_LAST: + searchParams.setLastLectureBlock(true); + break; + case CONFIG_KEY_SURVEY_LECTURE_NUMBER: + String lectureNumber = configs.getValue(CONFIG_KEY_SURVEY_LECTURE_NUMBER); + try { + Integer selectingLecture = Integer.parseInt(lectureNumber); + searchParams.setSelectingLecture(selectingLecture); + } catch (Exception e) { + searchParams.setSelectingLecture(-1); // select nothing + log.warn("Quality data collection generator is not properly configured: " + generator); + } + break; + default: + searchParams.setSelectingLecture(-1); // select nothing + log.warn("Quality data collection generator is not properly configured: " + generator); + break; + } return searchParams; } + /** + * CONFIG_KEY_SURVEY_LECTURE was added in the second version of that generator. + * If not set, init the value as function of other CONFIG_KEYs. + * + * @param configs + * @param generator + */ + private void updateSurveyLectureKey(QualityGeneratorConfigs configs, QualityGenerator generator) { + String surveyLecture = configs.getValue(CONFIG_KEY_SURVEY_LECTURE); + boolean surveyLectureNotSet = !StringHelper.containsNonWhitespace(surveyLecture); + if (surveyLectureNotSet) { + configs.setValue(CONFIG_KEY_SURVEY_LECTURE, CONFIG_KEY_SURVEY_LECTURE_NUMBER); + log.info("Updated CONFIG_KEY_SURVEY_LECTURE to CONFIG_KEY_SURVEY_LECTURE_NUMBER for quality generator: " + generator); + } + } + private String getTopicKey(QualityGeneratorConfigs configs) { String topicKey = configs.getValue(CONFIG_KEY_TOPIC); return StringHelper.containsNonWhitespace(topicKey)? topicKey: CONFIG_KEY_TOPIC_COACH; diff --git a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAO.java b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAO.java index 6832f2020d2ee76f396ed47bb060da2c36a66ad9..ea54daefb5706f21a36053f6e42fbb7a9d8ff665 100644 --- a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAO.java +++ b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAO.java @@ -219,6 +219,9 @@ public class CourseLecturesProviderDAO { if (searchParams.getMinTotalLectures() != null) { sb.and().append("total_lectures >= :minTotalLectures"); } + if (searchParams.getMaxTotalLectures() != null) { + sb.and().append("total_lectures <= :maxTotalLectures"); + } if (searchParams.getSelectingLecture() != null) { sb.and().append("first_lecture <= :selectingLecture"); sb.and().append("last_lecture >= :selectingLecture"); @@ -233,6 +236,9 @@ public class CourseLecturesProviderDAO { if (searchParams.getMinTotalLectures() != null) { query.setParameter("minTotalLectures", searchParams.getMinTotalLectures()); } + if (searchParams.getMaxTotalLectures() != null) { + query.setParameter("maxTotalLectures", searchParams.getMaxTotalLectures()); + } if (searchParams.getSelectingLecture() != null) { query.setParameter("selectingLecture", searchParams.getSelectingLecture()); } @@ -297,6 +303,9 @@ public class CourseLecturesProviderDAO { if (searchParams.getMinTotalLectures() != null) { infos.removeIf(lb -> lb.getLecturesTotal() < searchParams.getMinTotalLectures()); } + if (searchParams.getMaxTotalLectures() != null) { + infos.removeIf(lb -> lb.getLecturesTotal() > searchParams.getMaxTotalLectures()); + } if (searchParams.getSelectingLecture() != null) { infos.removeIf(lb -> lb.getFirstLecture() > searchParams.getSelectingLecture() diff --git a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/SearchParameters.java b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/SearchParameters.java index 41c077338aa2117b58bcd9c5d0af18078d268132..2ab48eebf2141f6464e2d393ea5138e2654e559a 100644 --- a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/SearchParameters.java +++ b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/SearchParameters.java @@ -39,6 +39,7 @@ import org.olat.repository.RepositoryEntryRef; public class SearchParameters { private Integer minTotalLectures; + private Integer maxTotalLectures; private Integer selectingLecture; private boolean lastLectureBlock = false; private QualityGeneratorRef finishedDataCollectionForGeneratorAndTopicIdentityRef; @@ -60,6 +61,14 @@ public class SearchParameters { this.minTotalLectures = minTotalLectures; } + public Integer getMaxTotalLectures() { + return maxTotalLectures; + } + + public void setMaxTotalLectures(Integer maxTotalLectures) { + this.maxTotalLectures = maxTotalLectures; + } + public Integer getSelectingLecture() { return selectingLecture; } diff --git a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/CourseLectureProviderConfigController.java b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/CourseLectureProviderConfigController.java index f0a558f2435e1c4b2319f0470f2a973805c35d1a..4221014dfe4901da02f65edb8f6609ad1827301b 100644 --- a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/CourseLectureProviderConfigController.java +++ b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/CourseLectureProviderConfigController.java @@ -28,11 +28,13 @@ import java.util.Arrays; import java.util.stream.Collectors; import org.olat.core.gui.UserRequest; +import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; import org.olat.core.gui.components.form.flexible.elements.SingleSelection; import org.olat.core.gui.components.form.flexible.elements.TextElement; import org.olat.core.gui.components.form.flexible.impl.Form; +import org.olat.core.gui.components.form.flexible.impl.FormEvent; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.User; @@ -54,6 +56,12 @@ import org.springframework.beans.factory.annotation.Autowired; public class CourseLectureProviderConfigController extends ProviderConfigController { private static final String ROLES_PREFIX = "config.roles."; + private static final String SURVEY_START_LAST = "config.survey.last"; + private static final String SURVEY_START_NUMBER = "config.survey.number"; + private static final String SURVEY_START_KEYS[] = { + SURVEY_START_LAST, + SURVEY_START_NUMBER + }; private static final String ROLES_OWNER_KEY = ROLES_PREFIX + CurriculumRoles.owner.name(); private static final String ROLES_COACH_KEY = ROLES_PREFIX + CurriculumRoles.coach.name(); private static final String ROLES_SINGLE_COACH_KEY = ROLES_PREFIX + CourseLecturesProvider.TEACHING_COACH; @@ -71,7 +79,9 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl private TextElement titleEl; private SingleSelection topicEl; - private TextElement lecturesTotalEl; + private TextElement lecturesTotalMinEl; + private TextElement lecturesTotalMaxEl; + private SingleSelection surveyLectureStartEl; private TextElement surveyLectureEl; private TextElement minutesBeforeEndEl; private TextElement invitationDaysEl; @@ -108,11 +118,23 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl } // lectures - String lecturesTotal = configs.getValue(CourseLecturesProvider.CONFIG_KEY_TOTAL_LECTURES); - lecturesTotalEl = uifactory.addTextElement("config.lectures.total", 4, lecturesTotal, formLayout); + String lecturesTotalMin = configs.getValue(CourseLecturesProvider.CONFIG_KEY_TOTAL_LECTURES_MIN); + lecturesTotalMinEl = uifactory.addTextElement("config.lectures.total.min", 4, lecturesTotalMin, formLayout); + + String lecturesTotalMax = configs.getValue(CourseLecturesProvider.CONFIG_KEY_TOTAL_LECTURES_MAX); + lecturesTotalMaxEl = uifactory.addTextElement("config.lectures.total.max", 4, lecturesTotalMax, formLayout); + surveyLectureStartEl = uifactory.addDropdownSingleselect("config.survey.start", formLayout, SURVEY_START_KEYS, + translateAll(getTranslator(), SURVEY_START_KEYS)); + surveyLectureStartEl.addActionListener(FormEvent.ONCHANGE); String surveyLecture = configs.getValue(CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE); - surveyLectureEl = uifactory.addTextElement("config.survey.lectures", 4, surveyLecture, formLayout); + if (CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE_NUMBER.equals(surveyLecture)) { + surveyLectureStartEl.select(SURVEY_START_NUMBER, true); + } else { + surveyLectureStartEl.select(SURVEY_START_LAST, true); + } + String surveyLectureNumber = configs.getValue(CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE_NUMBER); + surveyLectureEl = uifactory.addTextElement("config.survey.lectures", 4, surveyLectureNumber, formLayout); String minutesBeforeEnd = configs.getValue(CourseLecturesProvider.CONFIG_KEY_MINUTES_BEFORE_END); minutesBeforeEndEl = uifactory.addTextElement("config.minutes.before.end", 3, minutesBeforeEnd, formLayout); @@ -142,6 +164,14 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl rolesEl.select(role, true); } } + + updateUI(); + } + + private void updateUI() { + boolean surveyLectureNumber = surveyLectureStartEl.isOneSelected() + && surveyLectureStartEl.getSelectedKey().equals(SURVEY_START_NUMBER); + surveyLectureEl.setVisible(surveyLectureNumber); } @Override @@ -149,7 +179,9 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl boolean enabled = !readOnly; titleEl.setEnabled(enabled); topicEl.setEnabled(enabled); - lecturesTotalEl.setEnabled(enabled); + lecturesTotalMinEl.setEnabled(enabled); + lecturesTotalMaxEl.setEnabled(enabled); + surveyLectureStartEl.setEnabled(enabled); surveyLectureEl.setEnabled(enabled); minutesBeforeEndEl.setEnabled(enabled); invitationDaysEl.setEnabled(enabled); @@ -160,13 +192,20 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl flc.setDirty(true); } + @Override + protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { + if (source == surveyLectureStartEl) { + updateUI(); + } + super.formInnerEvent(ureq, source, event); + } + @Override public boolean validateBeforeActivation(UserRequest ureq) { boolean allOk = true; allOk &= validateIsMandatory(titleEl); allOk &= validateIsMandatory(topicEl); - allOk &= validateIsMandatory(lecturesTotalEl) && validateInteger(lecturesTotalEl, 1, 10000); allOk &= validateIsMandatory(surveyLectureEl) && validateInteger(surveyLectureEl, 1, 10000); allOk &= validateIsMandatory(minutesBeforeEndEl) && validateInteger(minutesBeforeEndEl, 0, 1000); allOk &= validateIsMandatory(durationEl) && validateInteger(durationEl, 1, 10000); @@ -175,6 +214,22 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl allOk &= validateInteger(reminder2DaysEl, 1, 10000); allOk &= validateIsMandatory(rolesEl); + boolean lecturesTotalOk = validateInteger(lecturesTotalMinEl, 1, 10000); + lecturesTotalOk &= validateInteger(lecturesTotalMaxEl, 1, 10000); + if (lecturesTotalOk && lecturesTotalMinEl.isEnabled() && lecturesTotalMaxEl.isEnabled()) { + String minString = lecturesTotalMinEl.getValue(); + String maxString = lecturesTotalMaxEl.getValue(); + if (StringHelper.containsNonWhitespace(minString) && StringHelper.containsNonWhitespace(maxString)) { + int min = Integer.parseInt(minString); + int max = Integer.parseInt(maxString); + if (min >= max) { + lecturesTotalMaxEl.setErrorKey("error.lectures.min.higher.max", null); + lecturesTotalOk = false; + } + } + } + allOk &= lecturesTotalOk; + return allOk; } @@ -182,7 +237,8 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl protected boolean validateFormLogic(UserRequest ureq) { titleEl.clearError(); topicEl.clearError(); - lecturesTotalEl.clearError(); + lecturesTotalMinEl.clearError(); + lecturesTotalMaxEl.clearError(); surveyLectureEl.clearError(); minutesBeforeEndEl.clearError(); durationEl.clearError(); @@ -202,11 +258,27 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl String topicKey = topicEl.isOneSelected()? topicEl.getSelectedKey(): null; configs.setValue(CourseLecturesProvider.CONFIG_KEY_TOPIC, topicKey); - String lecturesTotal = lecturesTotalEl.getValue(); - configs.setValue(CourseLecturesProvider.CONFIG_KEY_TOTAL_LECTURES, lecturesTotal); + String lecturesTotalMax = lecturesTotalMinEl.getValue(); + configs.setValue(CourseLecturesProvider.CONFIG_KEY_TOTAL_LECTURES_MIN, lecturesTotalMax); + + String lecturesTotalMin = lecturesTotalMaxEl.getValue(); + configs.setValue(CourseLecturesProvider.CONFIG_KEY_TOTAL_LECTURES_MAX, lecturesTotalMin); + + if (surveyLectureStartEl.isOneSelected()) { + String selectedKey = surveyLectureStartEl.getSelectedKey(); + if (SURVEY_START_LAST.equals(selectedKey)) { + configs.setValue(CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE, + CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE_LAST); + } else { + configs.setValue(CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE, + CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE_NUMBER); + } + } else { + configs.setValue(CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE, null); + } - String surveyLecture = surveyLectureEl.getValue(); - configs.setValue(CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE, surveyLecture); + String surveyLecture = surveyLectureEl.isVisible()? surveyLectureEl.getValue(): null; + configs.setValue(CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE_NUMBER, surveyLecture); String minutesBeforeEnd = minutesBeforeEndEl.getValue(); configs.setValue(CourseLecturesProvider.CONFIG_KEY_MINUTES_BEFORE_END, minutesBeforeEnd); diff --git a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_de.properties index edfa0f522beb0425e8f566b8b2f0a2bcdd7e4cc7..af3600fac5636ec3bb2737c223a8f43000c75f3d 100644 --- a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_de.properties @@ -1,6 +1,7 @@ config.duration=Dauer der Datenerhebung (Tage) config.invitation.days=Einladung (Tage nach Start der Datenerhebung) -config.lectures.total=Minimale Anzahl Lektionen des Betreuers +config.lectures.total.max=Maximale Anzahl Lektionen des Betreuers +config.lectures.total.min=Minimale Anzahl Lektionen des Betreuers config.minutes.before.end=Start x Minuten vor dem Ende des Lektionenblocks config.reminder1.days=Erinnerung 1 (Tage nach Start der Datenerhebung) config.reminder2.days=Erinnerung 2 (Tage nach Start der Datenerhebung) @@ -9,13 +10,17 @@ config.roles.owner=Besitzer config.roles.participant=Teilnehmer config.roles.teaching.coach=Unterrichtender Betreuer config.roles=Rollen der Teilnehmer -config.survey.lectures=Start im Lektionenblock mit der Lektion x -config.title.help=Verf\u00fcgbare Variablen: {0} +config.survey.last=Im letzten Lektionenblock +config.survey.lectures=Lektionenblock mit der Lektion x +config.survey.number=Im Lektionenblock mit der Lektion x +config.survey.start=Start der Datenerhebung +config.title.help=Verf\u00FCgbare Variablen: {0} config.title=Titel der Datenerhebung config.topic.coach=Beteuer config.topic.course=Kurs config.topic=Beurteilungsgegenstand -error.wrong.number=$org.olat.modules.quality.ui\:error.wrong.error.wrong.number +error.lectures.min.higher.max=Die maximale Anzahl Stunden muss gr\u00F6sser sein als die minimale Anzahl Stunden. +error.wrong.number=$org.olat.modules.quality.ui\:error.wrong.number followup.config.previous=Erstbefragung followup.config.single.check=Datenerhebung, wenn Durchschnitt einer Frage followup.config.single.limit=Limit @@ -24,8 +29,8 @@ followup.config.total.limit=Limit followup.generate.info=Beim Einschalten des Generators mit diesem Startzeitpunkt werden <b>{0}</b> neue Datenerhebungen generiert. followup.provider.display.name=Lektionen eines Betreuers in einem Kurs (Nachbefragung) generate.info=Beim Einschalten des Generators mit diesem Startzeitpunkt werden <b>{0}</b> neue Datenerhebungen generiert. -limit.check.higher=gr\u00f6sser als (>) -limit.check.higher.equal=gr\u00f6sser oder gleich als (\u2265) +limit.check.higher=gr\u00F6sser als (>) +limit.check.higher.equal=gr\u00F6sser oder gleich als (\u2265) limit.check.lower.equal=kleiner oder gleich als (\u2264) limit.check.lower=kleiner als (<) provider.display.name=Lektionen eines Betreuers in einem Kurs diff --git a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_en.properties index 47f3da621d021be95f5b57ada4dbf4648e720e96..7c91d403d70a3e52b29185ffac0660b49b1c145c 100644 --- a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_en.properties @@ -1,7 +1,8 @@ #Tue Sep 11 22:17:57 CEST 2018 config.duration=Duration of the data collection (days) config.invitation.days=Invitation (days after data collection start) -config.lectures.total=Teacher minimum lectures +config.lectures.total.max=Teacher maximum lectures +config.lectures.total.min=Teacher minimum lectures config.minutes.before.end=Start x minutes before the end of the lecture block config.reminder1.days=Reminder 1 (days after data collection start) config.reminder2.days=Reminder 2 (days after data collection start) @@ -10,12 +11,16 @@ config.roles.owner=Owner config.roles.participant=Participant config.roles.teaching.coach=Teaching coach config.roles=Roles of participants -config.survey.lectures=Start after lecture x +config.survey.last=In the last lecture block +config.survey.lectures=Lecture block with lecture x +config.survey.number=In the lecture block with lecture x +config.survey.start=Start of data collection config.title.help=Available variables\: {0} config.title=Title of the data collection config.topic.coach=Coach config.topic.course=Course config.topic=Topic +error.lectures.min.higher.max=The maximum number of lectures has to be higher than the minimum number of lectures. error.wrong.number=$org.olat.modules.quality.ui\:error.wrong.error.wrong.number followup.config.previous=Erstbefragung followup.config.single.check=Data collection, if average of a question is diff --git a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_fr.properties index 2cc83715ba9ef5c36b6e44d29c432d4e7616e682..7007fe82d8228f443416f28b9926ab962b695319 100644 --- a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_fr.properties @@ -1,7 +1,8 @@ #Tue Sep 11 21:32:13 CEST 2018 config.duration=Dur\u00E9e de la collecte de donn\u00E9es (jours) config.invitation.days=Invitation (en jours apr\u00E8s le d\u00E9but de la collecte) -config.lectures.total=Nombre minimum de cours blocs du charg\u00E9 de cours +config.lectures.total.max=Nombre maximum de cours blocs du charg\u00E9 de cours +config.lectures.total.min=Nombre minimum de cours blocs du charg\u00E9 de cours config.minutes.before.end=D\u00E9but x minutes avant la fin du cours bloc config.reminder1.days=Rappel n\u00B01 (jours apr\u00E8s le d\u00E9but de la collecte) config.reminder2.days=Rappel n\u00B02 (jours apr\u00E8s le d\u00E9but de la collecte) @@ -10,7 +11,6 @@ config.roles.coach=Tous les coaches config.roles.owner=Propri\u00E9taire config.roles.participant=Participant config.roles.teaching.coach=Charg\u00E9 de cours -config.survey.lectures=D\u00E9but apr\u00E8s le cours bloc x config.title=Nom de la collecte de donn\u00E9es config.title.help=Variables disponibles\: {0} config.topic=Sujet d'\u00E9valuation diff --git a/src/main/java/org/olat/modules/quality/ui/QualityUIFactory.java b/src/main/java/org/olat/modules/quality/ui/QualityUIFactory.java index 4301803a064033580804b7d85bad199a3c8d5600..dffb1fc5e6793f8a6d1746b4346b952652ce130b 100644 --- a/src/main/java/org/olat/modules/quality/ui/QualityUIFactory.java +++ b/src/main/java/org/olat/modules/quality/ui/QualityUIFactory.java @@ -480,7 +480,7 @@ public class QualityUIFactory { public static boolean validateInteger(TextElement el, int min, int max) { boolean allOk = true; el.clearError(); - if(el.isEnabled()) { + if(el.isEnabled() && el.isVisible()) { String val = el.getValue(); if(StringHelper.containsNonWhitespace(val)) { @@ -505,7 +505,7 @@ public class QualityUIFactory { public static boolean validateDouble(TextElement el, int min, int max) { boolean allOk = true; el.clearError(); - if(el.isEnabled()) { + if(el.isEnabled() && el.isVisible()) { String val = el.getValue(); if(StringHelper.containsNonWhitespace(val)) { @@ -530,7 +530,7 @@ public class QualityUIFactory { public static boolean validateIsMandatory(TextElement el) { boolean allOk = true; el.clearError(); - if(el.isEnabled()) { + if(el.isEnabled() && el.isVisible()) { String value = el.getValue(); if (!StringHelper.containsNonWhitespace(value)) { el.setErrorKey("form.mandatory.hover", null); @@ -543,7 +543,7 @@ public class QualityUIFactory { public static boolean validateIsMandatory(SingleSelection el) { boolean allOk = true; el.clearError(); - if(el.isEnabled()) { + if(el.isEnabled() && el.isVisible()) { if (!el.isOneSelected()) { el.setErrorKey("form.mandatory.hover", null); allOk = false; @@ -555,7 +555,7 @@ public class QualityUIFactory { public static boolean validateIsMandatory(MultipleSelectionElement el) { boolean allOk = true; el.clearError(); - if(el.isEnabled()) { + if(el.isEnabled() && el.isVisible()) { if (!el.isAtLeastSelected(1)) { el.setErrorKey("form.mandatory.hover", null); allOk = false; @@ -567,7 +567,7 @@ public class QualityUIFactory { public static boolean validateIsMandatory(DateChooser el) { boolean allOk = true; el.clearError(); - if(el.isEnabled()) { + if(el.isEnabled() && el.isVisible()) { if (el.getDate() == null) { el.setErrorKey("form.mandatory.hover", null); allOk = false; diff --git a/src/test/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAOTest.java b/src/test/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAOTest.java index 78c453d43a22c8755db8f89aab49b899b6a28978..54e781991325621d776f98f6fb969527f1fbe314 100644 --- a/src/test/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAOTest.java +++ b/src/test/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAOTest.java @@ -452,6 +452,28 @@ public class CourseLecturesProviderDAOTest extends OlatTestCase { .doesNotContain(lectureBlock4.getKey()); } + @Test + public void shouldFilterLectureBlockInfosByMaxTotalLectures() { + Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser(""); + RepositoryEntry course1 = JunitTestHelper.createAndPersistRepositoryEntry(); + RepositoryEntry course2 = JunitTestHelper.createAndPersistRepositoryEntry(); + RepositoryEntry otherCourse = JunitTestHelper.createAndPersistRepositoryEntry(); + LectureBlock lectureBlock1 = createLectureBlock(course1, teacher, 5); + LectureBlock lectureBlock2 = createLectureBlock(course2, teacher, 1); + LectureBlock lectureBlock3 = createLectureBlock(course2, teacher, 1); + LectureBlock lectureBlock4 = createLectureBlock(otherCourse, teacher, 10); + dbInstance.commitAndCloseSession(); + + SearchParameters searchParams = new SearchParameters(); + searchParams.setTeacherRef(teacher); + searchParams.setMaxTotalLectures(6); + List<LectureBlockInfo> infos = sut.loadLectureBlockInfo(searchParams); + + assertThat(infos).extracting(LectureBlockInfo::getLectureBlockKey) + .containsExactlyInAnyOrder(lectureBlock1.getKey(), lectureBlock2.getKey(), lectureBlock3.getKey()) + .doesNotContain(lectureBlock4.getKey()); + } + @Test public void shouldFilterLectureBlockInfosBySelectingLecture() { Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("");