diff --git a/src/main/java/org/olat/course/nodes/basiclti/LTIRunController.java b/src/main/java/org/olat/course/nodes/basiclti/LTIRunController.java index 74a172453483c95c23df96075b65e50b67d03840..0f386fd58445dc8f888c8726a4b3977ef54f27e5 100644 --- a/src/main/java/org/olat/course/nodes/basiclti/LTIRunController.java +++ b/src/main/java/org/olat/course/nodes/basiclti/LTIRunController.java @@ -347,8 +347,8 @@ public class LTIRunController extends BasicController { } startPage.contextPut("score", eval.getScore()); startPage.contextPut("hasScore", Boolean.TRUE); - startPage.contextPut("resultsVisible", eval.getUserVisible() == null || eval.getUserVisible().booleanValue()); - + boolean resultsVisible = eval.getUserVisible() == null || eval.getUserVisible().booleanValue(); + startPage.contextPut("resultsVisible", resultsVisible); mainPanel.setContent(startPage); } else if(display == LTIDisplayOptions.window) { mainPanel.setContent(startPage); diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java index cee293f2d7709be143ce256354e182e467b4bf77..751769b95f888b4131ce41989c52f4f30ec7f9ed 100644 --- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java +++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java @@ -199,12 +199,15 @@ public class CheckListRunController extends FormBasicController implements Contr layoutCont.contextPut("passed", null); layoutCont.contextPut("comment", null); } else { - layoutCont.contextPut("resultsVisible", scoreEval.getUserVisibility() == null || scoreEval.getUserVisibility().booleanValue()); + boolean resultsVisible = scoreEval.getUserVisibility() == null || scoreEval.getUserVisibility().booleanValue(); + layoutCont.contextPut("resultsVisible", resultsVisible); layoutCont.contextPut("score", AssessmentHelper.getRoundedScore(scoreEval.getScore())); layoutCont.contextPut("hasPassedValue", (scoreEval.getPassed() == null ? Boolean.FALSE : Boolean.TRUE)); layoutCont.contextPut("passed", scoreEval.getPassed()); - StringBuilder comment = Formatter.stripTabsAndReturns(scoreEval.getComment()); - layoutCont.contextPut("comment", StringHelper.xssScan(comment)); + if(resultsVisible) { + StringBuilder comment = Formatter.stripTabsAndReturns(scoreEval.getComment()); + layoutCont.contextPut("comment", StringHelper.xssScan(comment)); + } } UserNodeAuditManager am = userCourseEnv.getCourseEnvironment().getAuditManager(); diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GroupAssessmentController.java b/src/main/java/org/olat/course/nodes/gta/ui/GroupAssessmentController.java index 5740d699fc584b4d34f750a7afbb40291e64bbff..ce49553f89856e6d5a37310104862e677250450c 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/GroupAssessmentController.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/GroupAssessmentController.java @@ -33,6 +33,7 @@ import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement; import org.olat.core.gui.components.form.flexible.elements.FormLink; 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.FormBasicController; import org.olat.core.gui.components.form.flexible.impl.FormEvent; @@ -78,7 +79,8 @@ import org.springframework.beans.factory.annotation.Autowired; * */ public class GroupAssessmentController extends FormBasicController { - + + private static final String[] userVisibilityKeys = new String[]{ "visible", "hidden" }; private static final String[] onKeys = new String[] { "on" }; private static final String[] onValues = new String[] { "" }; @@ -86,6 +88,7 @@ public class GroupAssessmentController extends FormBasicController { private GroupAssessmentModel model; private FormLink saveAndDoneButton; private TextElement groupScoreEl, groupCommentEl; + private SingleSelection userVisibilityEl; private MultipleSelectionElement groupPassedEl, applyToAllEl; private EditCommentController editCommentCtrl; @@ -169,6 +172,11 @@ public class GroupAssessmentController extends FormBasicController { groupCommentEl.setElementCssClass("o_sel_course_gta_group_comment"); } + if(withPassed || withScore || withComment) { + String[] userVisibilityValues = new String[]{ translate("user.visibility.visible"), translate("user.visibility.hidden") }; + userVisibilityEl = uifactory.addRadiosHorizontal("user.visibility", "user.visibility", groupGradingCont, userVisibilityKeys, userVisibilityValues); + } + FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel(); if(isAdministrativeUser) { columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.username.i18nKey(), Cols.username.ordinal())); @@ -247,6 +255,15 @@ public class GroupAssessmentController extends FormBasicController { groupCommentEl.setValue(comment); } } + + if(userVisibilityEl != null) { + userVisibilityEl.setVisible(true); + if(modelInfos.getUserVisible() == null || modelInfos.getUserVisible().booleanValue()) { + userVisibilityEl.select(userVisibilityKeys[0], true); + } else { + userVisibilityEl.select(userVisibilityKeys[1], true); + } + } } else { applyToAllEl.select(onKeys[0], false); table.setVisible(true); @@ -291,6 +308,7 @@ public class GroupAssessmentController extends FormBasicController { Float scoreRef = null; Boolean passedRef = null; String commentRef = null; + Boolean userVisibleRef = null; List<AssessmentRow> rows = new ArrayList<>(identities.size()); for(Identity identity:identities) { @@ -363,13 +381,26 @@ public class GroupAssessmentController extends FormBasicController { } } + if(withScore || withPassed || withPassed) { + Boolean userVisible = scoreEval.getUserVisible(); + if(userVisible == null) { + userVisible = Boolean.TRUE; + } + + if(count == 0) { + userVisibleRef = userVisible; + } else if(!same(userVisibleRef, userVisible)) { + same = false; + } + } + count++; } model.setObjects(rows); table.reset(); - return new ModelInfos(same, scoreRef, passedRef, commentRef, duplicateWarning.toString()); + return new ModelInfos(same, scoreRef, passedRef, commentRef, userVisibleRef, duplicateWarning.toString()); } private boolean same(Object reference, Object value) { @@ -484,81 +515,91 @@ public class GroupAssessmentController extends FormBasicController { private void applyChanges(boolean setAsDone) { List<AssessmentRow> rows = model.getObjects(); - ICourse course = CourseFactory.loadCourse(courseEnv.getCourseResourceableId()); + boolean userVisible = userVisibilityEl.isOneSelected() && userVisibilityEl.isSelected(0); if(applyToAllEl.isAtLeastSelected(1)) { - Float score = null; + applyChangesForTheWholeGroup(rows, setAsDone, userVisible); + } else { + applyChangesForEvenryMemberGroup(rows, setAsDone, userVisible); + } + } + + private void applyChangesForEvenryMemberGroup(List<AssessmentRow> rows, boolean setAsDone, boolean userVisible) { + ICourse course = CourseFactory.loadCourse(courseEnv.getCourseResourceableId()); + + for(AssessmentRow row:rows) { + UserCourseEnvironment userCourseEnv = row.getUserCourseEnvironment(course); + Float score = null; if(withScore) { - String scoreValue = groupScoreEl.getValue(); - if(StringHelper.containsNonWhitespace(scoreValue)) { - score = Float.parseFloat(scoreValue); + String value = row.getScoreEl().getValue(); + if(StringHelper.containsNonWhitespace(value)) { + score = Float.parseFloat(value); } } Boolean passed = null; if(withPassed) { if(cutValue == null) { - passed = groupPassedEl.isSelected(0); + passed = row.getPassedEl().isSelected(0); } else if(score != null) { passed = (score.floatValue() >= cutValue.floatValue()) ? Boolean.TRUE : Boolean.FALSE; } } - for(AssessmentRow row:rows) { - UserCourseEnvironment userCourseEnv = row.getUserCourseEnvironment(course); - ScoreEvaluation newScoreEval; - if(setAsDone) { - newScoreEval = new ScoreEvaluation(score, passed, AssessmentEntryStatus.done, true, true, null); - } else { - newScoreEval = new ScoreEvaluation(score, passed); - } - gtaNode.updateUserScoreEvaluation(newScoreEval, userCourseEnv, getIdentity(), false); + ScoreEvaluation newScoreEval; + if(setAsDone) { + newScoreEval = new ScoreEvaluation(score, passed, AssessmentEntryStatus.done, userVisible, true, null); + } else { + newScoreEval = new ScoreEvaluation(score, passed, null, userVisible, null, null); } - + gtaNode.updateUserScoreEvaluation(newScoreEval, userCourseEnv, getIdentity(), false); + if(withComment) { - String comment = groupCommentEl.getValue(); + String comment = row.getComment(); if(StringHelper.containsNonWhitespace(comment)) { - for(AssessmentRow row:rows) { - UserCourseEnvironment userCourseEnv = row.getUserCourseEnvironment(course); - gtaNode.updateUserUserComment(comment, userCourseEnv, getIdentity()); - } + gtaNode.updateUserUserComment(comment, userCourseEnv, getIdentity()); } } - - } else { - for(AssessmentRow row:rows) { - UserCourseEnvironment userCourseEnv = row.getUserCourseEnvironment(course); - - Float score = null; - if(withScore) { - String value = row.getScoreEl().getValue(); - if(StringHelper.containsNonWhitespace(value)) { - score = Float.parseFloat(value); - } - } - - Boolean passed = null; - if(withPassed) { - if(cutValue == null) { - passed = row.getPassedEl().isSelected(0); - } else if(score != null) { - passed = (score.floatValue() >= cutValue.floatValue()) ? Boolean.TRUE : Boolean.FALSE; - } - } - - ScoreEvaluation newScoreEval; - if(setAsDone) { - newScoreEval = new ScoreEvaluation(score, passed, AssessmentEntryStatus.done, true, true, null); - } else { - newScoreEval = new ScoreEvaluation(score, passed); - } - gtaNode.updateUserScoreEvaluation(newScoreEval, userCourseEnv, getIdentity(), false); - - if(withComment) { - String comment = row.getComment(); - if(StringHelper.containsNonWhitespace(comment)) { - gtaNode.updateUserUserComment(comment, userCourseEnv, getIdentity()); - } + } + } + + private void applyChangesForTheWholeGroup(List<AssessmentRow> rows, boolean setAsDone, boolean userVisible) { + ICourse course = CourseFactory.loadCourse(courseEnv.getCourseResourceableId()); + + Float score = null; + if(withScore) { + String scoreValue = groupScoreEl.getValue(); + if(StringHelper.containsNonWhitespace(scoreValue)) { + score = Float.parseFloat(scoreValue); + } + } + + Boolean passed = null; + if(withPassed) { + if(cutValue == null) { + passed = groupPassedEl.isSelected(0); + } else if(score != null) { + passed = (score.floatValue() >= cutValue.floatValue()) ? Boolean.TRUE : Boolean.FALSE; + } + } + + for(AssessmentRow row:rows) { + UserCourseEnvironment userCourseEnv = row.getUserCourseEnvironment(course); + ScoreEvaluation newScoreEval; + if(setAsDone) { + newScoreEval = new ScoreEvaluation(score, passed, AssessmentEntryStatus.done, userVisible, true, null); + } else { + newScoreEval = new ScoreEvaluation(score, passed, null, userVisible, null, null); + } + gtaNode.updateUserScoreEvaluation(newScoreEval, userCourseEnv, getIdentity(), false); + } + + if(withComment) { + String comment = groupCommentEl.getValue(); + if(StringHelper.containsNonWhitespace(comment)) { + for(AssessmentRow row:rows) { + UserCourseEnvironment userCourseEnv = row.getUserCourseEnvironment(course); + gtaNode.updateUserUserComment(comment, userCourseEnv, getIdentity()); } } } @@ -589,12 +630,14 @@ public class GroupAssessmentController extends FormBasicController { private final Float score; private final Boolean passed; private final String comment; + private final Boolean userVisible; - public ModelInfos(boolean same, Float score, Boolean passed, String comment, String duplicates) { + public ModelInfos(boolean same, Float score, Boolean passed, String comment, Boolean userVisible, String duplicates) { this.same = same; this.score = score; this.passed = passed; this.comment = comment; + this.userVisible = userVisible; this.duplicates = duplicates; } @@ -614,6 +657,10 @@ public class GroupAssessmentController extends FormBasicController { return comment; } + public Boolean getUserVisible() { + return userVisible; + } + public String getDuplicates() { return duplicates; } diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties index cb8b67bd9331336b430663fef4771381e86fe217..383ba0a5cb74888bc4814732c48fdcc58364748c 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties @@ -266,6 +266,9 @@ task.type.description=W\u00E4hlen Sie eine oder mehrere Gruppen / Lernbereiche a task.type.title=Aufgabentyp upload.document=Dokument hochladen uploaded.by=hochgeladen von {0} +user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility +user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible +user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden wait.for.solutions=Die Musterl\u00F6sung wird zum angegebenen Zeitpunkt freigegeben. warning.group.pick.task=Dies ist eine Gruppenaufgabe\! Die hier getroffene Auswahl ist f\u00FCr alle Mitglieder der Gruppe "{0}" g\u00FCltig\! Stellen Sie sicher, dass diese Auswahl zuvor innerhalb Ihrer Gruppe diskutiert wurde\! Nur ein Gruppenmitglied kann die Gruppenaufgabe ausw\u00E4hlen. warning.group.submit=Dies ist eine Gruppenaufgabe\! Das abgegebene Dokument ist f\u00FCr alle Mitglieder der Gruppe "{0}" g\u00FCltig\! Stellen Sie sicher dass diese L\u00F6sung zuvor innerhalb Ihrer Gruppe diskutiert wurde\! Nur ein Gruppenmitglied kann eine L\u00F6sung im Namen aller Gruppenmitglieder abgeben. diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties index ebfce144aa8ece6f401f03db458523e0e2a537e3..1e743bff3528866535f2b9418a1272761da2af49 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties @@ -266,6 +266,9 @@ task.type.description=Choose one or more groups and/or learning areas in order t task.type.title=Task type upload.document=Upload document uploaded.by=uploaded by {0} +user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility +user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible +user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden wait.for.solutions=The sample solution will be displayed at the date specified above. warning.group.pick.task=This is a group task\! The selection made here is valid for all members of the group "{0}"\! Make sure you discussed this selection within the group prior to selecting a task\! Only one member of the group can select the task for the group. warning.group.submit=This is a group task\! The submitted document is valid for all members of the group "{0}"\! Make sure you discussed this solution document prior to uploading it here\! Only one member of the group can submit a solution on behalf of all group members. diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties index cd1effea009ba2ecc6cfa3544418bbf744fb0690..4eb2d61014d4fd3eaf4f8055cee377931e220cd2 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties @@ -265,6 +265,9 @@ task.type.description=Si le devoir de groupe est activ\u00E9, toutes les \u00E9t task.type.title=Type de devoir upload.document=T\u00E9l\u00E9charger un document uploaded.by=t\u00E9l\u00E9charg\u00E9 par {0} +user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility +user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible +user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden wait.for.solutions=Les solutions mod\u00E8les seront visible apr\u00E8s l'heure sp\u00E9cifi\u00E9e. warning.group.pick.task=Ceci est un devoir de groupe\! La s\u00E9lection effectu\u00E9e ici s'applique \u00E0 tous les participants du groupe "{0}"\! Assurez-vous que votre choix \u00E0 \u00E9t\u00E9 discut\u00E9 au sein de votre groupe\! Seul un participant du groupe pour choisir un devoir. warning.group.submit=Ceci est un devoir de groupe\! Les documents soumis le sont pour tous les participants du groupe "{0}"\! Assurez-vous que les solutions ont \u00E9t\u00E9 discut\u00E9es au sein du groupe\! Un seul membre du groupe peut soumettre la solution d\u00E9finitive. diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_it.properties index f60a87ca1c40157e109a5f162629d17a8bae34eb..a084b5bcf1400a4c26d95962f7784ad51374753e 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_it.properties @@ -265,6 +265,9 @@ task.type.description=Scegliere uno o pi\u00F9 gruppi e/o aree di studio per ass task.type.title=Tipo di compito upload.document=Caricare un documento uploaded.by=caricato da {0} +user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility +user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible +user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden wait.for.solutions=I modelli di soluzione saranno visibili alla data sopra indicata. warning.group.pick.task=Questo \u00E8 un compito di gruppo\! Le selezioni effettuate saranno valide per tutti i membri del gruppo "{0}"\! Assicurati di aver discusso questa scelta all'interno del gruppo prima di selezionare il compito\! Solo un membro del gruppo pu\u00F2 selezionare il compito per tutti. warning.group.submit=Questo \u00E8 un compito di gruppo\! Il documento consegnato sar\u00E0 valido per tutti i membri del gruppo "{0}"\! Assicurati di aver discusso questa soluzione all'interno del gruppo prima di consegnarla\! Solo un membro del gruppo pu\u00F2 consegnare la soluzione a nome di tutti i membri. diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pl.properties index 2ea5099d33899bf0277c9f5224b0d57a9b901e92..6b3776df2b36cdb91370ecf2d21ba2efcc113187 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pl.properties @@ -261,6 +261,9 @@ task.type.description=Choose one or more groups and/or learning areas in order t task.type.title=Typ zadania upload.document=Prze\u015Blij dokument uploaded.by=przes\u0142any przez {0} +user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility +user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible +user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden wait.for.solutions=The sample solution will be displayed at the date specified above. warning.group.pick.task=This is a group task\! The selection made here is valid for all members of the group "{0}"\! Make sure you discussed this selection within the group prior to selecting a task\! Only one member of the group can select the task for the group. warning.group.submit=This is a group task\! The submitted document is valid for all members of the group "{0}"\! Make sure you discussed this solution document prior to uploading it here\! Only one member of the group can submit a solution on behalf of all group members. diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties index 2ccd38d08e2d9ae53f7aba6a0ceba8148e8159cb..4440f7c9ccaeeeeb61c01d3088ccd06fac98a6e0 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties @@ -265,6 +265,9 @@ task.type.description=Quando a tarefa de grupo est\u00E1 habilitada, todas as et task.type.title=Tipo de tarefa upload.document=Enviar documento uploaded.by=enviado por +user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility +user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible +user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden wait.for.solutions=A solu\u00E7\u00E3o de amostra ser\u00E1 exibida na data especificada acima. warning.group.pick.task=Esta \u00E9 uma tarefa de grupo\! A sele\u00E7\u00E3o feita aqui \u00E9 v\u00E1lida para todos os membros do grupo "{0}"\! Certifique-se de que voc\u00EA discutiu essa sele\u00E7\u00E3o dentro do grupo antes de selecionar uma tarefa\! Apenas um membro do grupo pode selecionar a tarefa para o grupo. warning.group.submit=Esta \u00E9 uma tarefa de grupo\! O documento apresentado \u00E9 v\u00E1lido para todos os membros do grupo "{0}"\! Certifique-se de que voc\u00EA discutiu a solu\u00E7\u00E3o neste documento antes de envi\u00E1-lo aqui\! Apenas um membro do grupo pode apresentar uma solu\u00E7\u00E3o em nome de todos os membros do grupo. diff --git a/src/main/java/org/olat/course/nodes/iq/IQRunController.java b/src/main/java/org/olat/course/nodes/iq/IQRunController.java index 51cc3c50605a23c97422737abb2047042e692421..ba6396759bdb88a691408295b1e0241170aaf20c 100644 --- a/src/main/java/org/olat/course/nodes/iq/IQRunController.java +++ b/src/main/java/org/olat/course/nodes/iq/IQRunController.java @@ -616,12 +616,15 @@ public class IQRunController extends BasicController implements GenericEventList } } myContent.contextPut("blockAfterSuccess", blocked); - myContent.contextPut("resultsVisible", assessmentEntry.getUserVisibility() == null || assessmentEntry.getUserVisibility().booleanValue()); + boolean resultsVisible = assessmentEntry.getUserVisibility() == null || assessmentEntry.getUserVisibility().booleanValue(); + myContent.contextPut("resultsVisible", resultsVisible); myContent.contextPut("score", AssessmentHelper.getRoundedScore(assessmentEntry.getScore())); myContent.contextPut("hasPassedValue", (assessmentEntry.getPassed() == null ? Boolean.FALSE : Boolean.TRUE)); myContent.contextPut("passed", assessmentEntry.getPassed()); - StringBuilder comment = Formatter.stripTabsAndReturns(assessmentEntry.getComment()); - myContent.contextPut("comment", StringHelper.xssScan(comment)); + if(resultsVisible) { + StringBuilder comment = Formatter.stripTabsAndReturns(assessmentEntry.getComment()); + myContent.contextPut("comment", StringHelper.xssScan(comment)); + } myContent.contextPut("attempts", assessmentEntry.getAttempts() == null ? 0 : assessmentEntry.getAttempts()); } } @@ -653,6 +656,7 @@ public class IQRunController extends BasicController implements GenericEventList ScoreEvaluation scoreEval = acn.getUserScoreEvaluation(userCourseEnv); if (scoreEval != null) { myContent.contextPut("hasResults", Boolean.TRUE); + myContent.contextPut("resultsVisible", Boolean.TRUE); myContent.contextPut("score", AssessmentHelper.getRoundedScore(scoreEval.getScore())); myContent.contextPut("hasPassedValue", (scoreEval.getPassed() == null ? Boolean.FALSE : Boolean.TRUE)); myContent.contextPut("passed", scoreEval.getPassed()); diff --git a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java index 1162648ffc0ca8439600e01bed068508d628cb05..b7d49543f8f2601d25b0d7f119dd3cd38b321363 100644 --- a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java +++ b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java @@ -249,13 +249,16 @@ public class QTI21AssessmentRunController extends BasicController implements Gen mainVC.contextPut("blockAfterSuccess", blocked); Identity identity = userCourseEnv.getIdentityEnvironment().getIdentity(); - mainVC.contextPut("resultsVisible", assessmentEntry.getUserVisibility() == null || assessmentEntry.getUserVisibility().booleanValue()); + boolean resultsVisible = assessmentEntry.getUserVisibility() == null || assessmentEntry.getUserVisibility().booleanValue(); + mainVC.contextPut("resultsVisible", resultsVisible); mainVC.contextPut("score", AssessmentHelper.getRoundedScore(assessmentEntry.getScore())); mainVC.contextPut("hasPassedValue", (passed == null ? Boolean.FALSE : Boolean.TRUE)); mainVC.contextPut("passed", passed); - StringBuilder comment = Formatter.stripTabsAndReturns(testCourseNode.getUserUserComment(userCourseEnv)); - if (comment != null && comment.length() > 0) { - mainVC.contextPut("comment", StringHelper.xssScan(comment)); + if(resultsVisible) { + StringBuilder comment = Formatter.stripTabsAndReturns(testCourseNode.getUserUserComment(userCourseEnv)); + if (comment != null && comment.length() > 0) { + mainVC.contextPut("comment", StringHelper.xssScan(comment)); + } } Integer attempts = assessmentEntry.getAttempts(); mainVC.contextPut("attempts", attempts == null ? new Integer(0) : attempts); diff --git a/src/main/java/org/olat/course/nodes/ms/MSCourseNodeRunController.java b/src/main/java/org/olat/course/nodes/ms/MSCourseNodeRunController.java index b976f457488b7e00e8c59bea35edc1454a6d1eb4..b7959e281d2f5d9eb80659b9a4997efa7cf98aef 100644 --- a/src/main/java/org/olat/course/nodes/ms/MSCourseNodeRunController.java +++ b/src/main/java/org/olat/course/nodes/ms/MSCourseNodeRunController.java @@ -182,8 +182,10 @@ public class MSCourseNodeRunController extends BasicController { myContent.contextPut("hasPassedValue", (assessmentEntry.getPassed() == null ? Boolean.FALSE : Boolean.TRUE)); myContent.contextPut("passed", assessmentEntry.getPassed()); - StringBuilder comment = Formatter.stripTabsAndReturns(rawComment); - myContent.contextPut("comment", StringHelper.xssScan(comment)); + if(resultsVisible) { + StringBuilder comment = Formatter.stripTabsAndReturns(rawComment); + myContent.contextPut("comment", StringHelper.xssScan(comment)); + } } if(showLog) { diff --git a/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java b/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java index 3d4b332c3088812805f3b73da2cbd77a2f033781..f88c67105153c583ed682d8b31cdfb2db21975fa 100644 --- a/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java +++ b/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java @@ -305,7 +305,8 @@ public class PortfolioCourseNodeRunController extends FormBasicController { scoreAccounting.evaluateAll(); ScoreEvaluation scoreEval = scoreAccounting.evalCourseNode(courseNode); - assessmentInfosContainer.contextPut("resultsVisible", scoreEval.getUserVisible() == null || scoreEval.getUserVisible().booleanValue()); + boolean resultsVisible = scoreEval.getUserVisible() == null || scoreEval.getUserVisible().booleanValue(); + assessmentInfosContainer.contextPut("resultsVisible", resultsVisible); //score assessmentInfosContainer.contextPut("hasScoreField", new Boolean(courseNode.hasScoreConfigured())); if(courseNode.hasScoreConfigured()) { @@ -328,11 +329,13 @@ public class PortfolioCourseNodeRunController extends FormBasicController { } // get comment - AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); - String comment = am.getNodeComment(courseNode, getIdentity()); - assessmentInfosContainer.contextPut("hasCommentField", new Boolean(comment != null)); - if (comment != null) { - assessmentInfosContainer.contextPut("comment", comment); + if(resultsVisible) { + AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); + String comment = am.getNodeComment(courseNode, getIdentity()); + assessmentInfosContainer.contextPut("hasCommentField", new Boolean(comment != null)); + if (comment != null) { + assessmentInfosContainer.contextPut("comment", comment); + } } assessmentInfosContainer.setVisible(true); } else { diff --git a/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java b/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java index e57fd412c39020a748f34a3eff4c6fae61dd9502..72e7923e5365c28b4640bd208daa2074ea86a30d 100644 --- a/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java +++ b/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java @@ -247,10 +247,12 @@ public class ScormRunController extends BasicController implements ScormAPICallb } startPage.contextPut("hasPassedValue", (scoreEval.getPassed() == null ? Boolean.FALSE : Boolean.TRUE)); startPage.contextPut("passed", scoreEval.getPassed()); - startPage.contextPut("resultsVisible", scoreEval.getUserVisible() == null || scoreEval.getUserVisible().booleanValue()); - - StringBuilder comment = Formatter.stripTabsAndReturns(scormNode.getUserUserComment(userCourseEnv)); - startPage.contextPut("comment", StringHelper.xssScan(comment)); + boolean resultsVisible = scoreEval.getUserVisible() == null || scoreEval.getUserVisible().booleanValue(); + startPage.contextPut("resultsVisible", resultsVisible); + if(resultsVisible && scormNode.hasCommentConfigured()) { + StringBuilder comment = Formatter.stripTabsAndReturns(scormNode.getUserUserComment(userCourseEnv)); + startPage.contextPut("comment", StringHelper.xssScan(comment)); + } startPage.contextPut("attempts", scormNode.getUserAttempts(userCourseEnv)); } startPage.contextPut("isassessable", Boolean.valueOf(isAssessable)); diff --git a/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java b/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java index b5b94469faf2c7903828e265bb516b433e109855..e79fc4ea8d78d846a26d3e617e7a182ae75abfe4 100644 --- a/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java +++ b/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java @@ -277,7 +277,7 @@ public class AssessmentResultController extends FormBasicController { Document clonedState = ItemSessionStateXmlMarshaller.marshal(sessionState); ItemSessionState clonedSessionState = ItemSessionStateXmlMarshaller.unmarshal(clonedState.getDocumentElement()); - //TODO only to make jenkins works clonedSessionState.resetResponses(); + clonedSessionState.resetResponses(); formItem.setItemSessionState(clonedSessionState); formItem.setCandidateSessionContext(candidateSessionContext); formItem.setResolvedAssessmentTest(resolvedAssessmentTest); diff --git a/src/main/resources/database/mysql/alter_11_2_x_to_11_3_0.sql b/src/main/resources/database/mysql/alter_11_2_x_to_11_3_0.sql index df1e8886b04cfd3a3be0a09095721b112316ba7f..5c19d90185d4cc57ebde6a0737ae4be135e027e8 100644 --- a/src/main/resources/database/mysql/alter_11_2_x_to_11_3_0.sql +++ b/src/main/resources/database/mysql/alter_11_2_x_to_11_3_0.sql @@ -40,5 +40,5 @@ alter table o_qti_assessmentitem_session modify q_testpartidentifier varchar(255 alter table o_qti_assessmenttest_session modify q_subident varchar(255); -alter table o_as_entry add column a_user_visibility bit default 0; +alter table o_as_entry add column a_user_visibility bit default 1; diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql index 2752e547f1bce9c5f5aa44bae521b43c690b10d4..ec353d4e2f686ef9467f4d19e8afb344ac98413f 100644 --- a/src/main/resources/database/mysql/setupDatabase.sql +++ b/src/main/resources/database/mysql/setupDatabase.sql @@ -1166,7 +1166,7 @@ create table o_as_entry ( a_status varchar(16) default null, a_details varchar(1024) default null, a_fully_assessed bit default null, - a_user_visibility bit default 0, + a_user_visibility bit default 1, a_assessment_id bigint default null, a_completion float(65,30), a_comment text, diff --git a/src/main/resources/database/oracle/alter_11_2_x_to_11_3_0.sql b/src/main/resources/database/oracle/alter_11_2_x_to_11_3_0.sql index 7ee5bd3ea8fe9bce99e23a450b1a1087e13642a4..6f25f5ed60fdedbca667d16a46fdc8d5741b518d 100644 --- a/src/main/resources/database/oracle/alter_11_2_x_to_11_3_0.sql +++ b/src/main/resources/database/oracle/alter_11_2_x_to_11_3_0.sql @@ -39,4 +39,4 @@ alter table o_qti_assessmentitem_session modify q_testpartidentifier varchar2(25 alter table o_qti_assessmenttest_session modify q_subident varchar2(255 char); -alter table o_as_entry add a_user_visibility number default 0; +alter table o_as_entry add a_user_visibility number default 1; diff --git a/src/main/resources/database/oracle/setupDatabase.sql b/src/main/resources/database/oracle/setupDatabase.sql index b127a5aa138c2f60adbe1a30c2853b0c9c60f20d..29db00010194e95f4ee5aacb532705767d835c96 100644 --- a/src/main/resources/database/oracle/setupDatabase.sql +++ b/src/main/resources/database/oracle/setupDatabase.sql @@ -1194,7 +1194,7 @@ create table o_as_entry ( a_status varchar2(16 char) default null, a_details varchar2(1024 char) default null, a_fully_assessed number default null, - a_user_visibility number default 0, + a_user_visibility number default 1, a_assessment_id number(20) default null, a_completion float, a_comment clob,