From bee7bc689050ceeeb6d972561a06b8950c8b66bf Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Mon, 8 Jun 2020 11:43:21 +0200
Subject: [PATCH] OO-4729: check if the user choose at least a permission in
 portfolio

---
 .../portfolio/ui/AccessRightsEditController.java   |  2 +-
 .../portfolio/ui/_i18n/LocalStrings_de.properties  |  1 +
 .../portfolio/ui/_i18n/LocalStrings_en.properties  |  1 +
 .../portfolio/ui/_i18n/LocalStrings_fr.properties  |  1 +
 .../portfolio/ui/shared/SharedPagesController.java |  3 ++-
 .../ui/wizard/AccessRightsEditStepController.java  | 14 ++++++++++++++
 .../ui/wizard/_content/access_rights_step.html     |  7 ++++++-
 7 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/src/main/java/org/olat/modules/portfolio/ui/AccessRightsEditController.java b/src/main/java/org/olat/modules/portfolio/ui/AccessRightsEditController.java
index 6fdfc7e3187..bf46e7ca18c 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/AccessRightsEditController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/AccessRightsEditController.java
@@ -167,7 +167,7 @@ public class AccessRightsEditController extends FormBasicController {
 		if(formLayout instanceof FormLayoutContainer) {
 			FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout;
 			layoutCont.contextPut("binderRow", binderRow);
-			layoutCont.contextPut("grading", new Boolean(grading));
+			layoutCont.contextPut("grading", Boolean.valueOf(grading));
 		}
 		
 		if(hasButtons) {
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties
index 4cbe12c191d..88f5094c880 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_de.properties
@@ -186,6 +186,7 @@ error.invalid.type=Dieser Dateityp ist nicht unters\u00FCtzt.
 error.invitation.mail.used=Diese E-Mailadresse wird bereits von einem OpenOlat-Benutzer verwendet.
 error.mail.invalid=Bitte geben Sie eine g\u00FCltige E-Mailadresse an.
 error.mimetype=$org.olat.core.commons.modules.bc\:WrongMimeType
+error.missing.permissions=Sie m\u00FCssen mindestens eine Berechtigung w\u00E4hlen.
 error.score=Punkte m\u00FCssen zwischen {0} und {1} sein. Oder die maximale Punktzahl, welche im Kurs definiert worden ist, wurde bereits mit anderen Sektionen erreicht. Mehr Informationen finden Sie im Bewertungswerkzeug des Kurses "{2}".
 existing.invitee.selection=Bestehende Benutzer 
 export.binder=Mappe exportieren
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties
index 108788f1921..523f0c0ef5f 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_en.properties
@@ -186,6 +186,7 @@ error.invalid.type=This file type is not supported.
 error.invitation.mail.used=This e-mail address is already used by an OpenOlat user.
 error.mail.invalid=Please provide a valid e-mail address.
 error.mimetype=$org.olat.core.commons.modules.bc\:WrongMimeType
+error.missing.permissions=You must choose at least one permission.
 error.score=Score is not between {0} and {1}. Or the maximum score defined in the course has already been reached with other sections. For more details see the assessment tool of the course "{2}".
 existing.invitee.selection=Existing user 
 export.binder=Export binder
diff --git a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_fr.properties
index 50851d1e876..f6f785d9315 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/modules/portfolio/ui/_i18n/LocalStrings_fr.properties
@@ -186,6 +186,7 @@ error.invalid.type=Ce type de fichier n'est pas support\u00E9.
 error.invitation.mail.used=Cette adresse e-mail est d\u00E9j\u00E0 utilis\u00E9e par un utilisateur OLAT.
 error.mail.invalid=Indiquez une adresse e-mail valide, svp.
 error.mimetype=$org.olat.core.commons.modules.bc\:WrongMimeType
+error.missing.permissions=Vous devez choisir au moins une permission.
 error.score=Le nombre total de points doit se situer entre {0} et {1}. Ou le nombre de points maximum a d\u00E9j\u00E0 \u00E9t\u00E9 atteint avec d'autres sections. Vous trouverez plus d'informations dans l'outil d'\u00E9valuation du cours "{2}".
 existing.invitee.selection=Utilisateur existant
 export.binder=Exporter le classeur
diff --git a/src/main/java/org/olat/modules/portfolio/ui/shared/SharedPagesController.java b/src/main/java/org/olat/modules/portfolio/ui/shared/SharedPagesController.java
index 9252e3efed1..dfe8e442da5 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/shared/SharedPagesController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/shared/SharedPagesController.java
@@ -40,6 +40,7 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiCellR
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiColumnModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableReduceEvent;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableSearchEvent;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiCellRenderer;
@@ -280,7 +281,7 @@ public class SharedPagesController extends FormBasicController implements Activa
 				}
 			} else if(event instanceof FlexiTableSearchEvent) {
 				FlexiTableSearchEvent se = (FlexiTableSearchEvent)event;
-				if(FlexiTableSearchEvent.QUICK_SEARCH.equals(se.getCommand())
+				if(FlexiTableReduceEvent.QUICK_SEARCH.equals(se.getCommand())
 						|| FormEvent.RESET.getCommand().equals(se.getCommand())) {
 					loadModel(true, true);
 				}
diff --git a/src/main/java/org/olat/modules/portfolio/ui/wizard/AccessRightsEditStepController.java b/src/main/java/org/olat/modules/portfolio/ui/wizard/AccessRightsEditStepController.java
index 3fac4fd2a90..7eaa6316183 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/wizard/AccessRightsEditStepController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/wizard/AccessRightsEditStepController.java
@@ -68,6 +68,20 @@ public class AccessRightsEditStepController extends StepFormBasicController {
 		formLayout.add("access_rights", accessRightsCtrl.getInitialFormItem());
 	}
 
+	@Override
+	protected boolean validateFormLogic(UserRequest ureq) {
+		boolean allOk = super.validateFormLogic(ureq);
+
+		accessRightsCtrl.getInitialFormItem().clearError();
+		List<AccessRightChange> accessRightChanges = accessRightsCtrl.getChanges();
+		if(accessRightChanges == null || accessRightChanges.isEmpty()) {
+			accessRightsCtrl.getInitialFormItem().setErrorKey("error.missing.permissions", null);
+			allOk &= false;
+		}
+		
+		return allOk;
+	}
+
 	@Override
 	protected void formOK(UserRequest ureq) {
 		List<AccessRightChange> accessRightChanges = accessRightsCtrl.getChanges();
diff --git a/src/main/java/org/olat/modules/portfolio/ui/wizard/_content/access_rights_step.html b/src/main/java/org/olat/modules/portfolio/ui/wizard/_content/access_rights_step.html
index 4dc15f93ce0..f17da08bcb7 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/wizard/_content/access_rights_step.html
+++ b/src/main/java/org/olat/modules/portfolio/ui/wizard/_content/access_rights_step.html
@@ -1 +1,6 @@
-$r.render("access_rights")
\ No newline at end of file
+$r.render("access_rights")
+#if($f.hasError("access_rights"))
+<div class="clearfix">
+	$r.render("access_rights_ERROR")
+</div>
+#end
\ No newline at end of file
-- 
GitLab