From 39e2a1fa080a5edc3ad9655df30be8c5665d374c Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Tue, 7 Feb 2017 09:24:23 +0100
Subject: [PATCH] OO-2499: show a message if the user has not enough privileges
 to edit the quota and not a red screen

---
 .../admin/quota/GenericQuotaEditController.java  |  4 ++--
 .../admin/quota/GenericQuotaViewController.java  | 16 +++++++---------
 .../org/olat/admin/quota/QuotaManagerImpl.java   | 11 +++++++++--
 .../java/org/olat/admin/quota/_content/edit.html |  6 ++++++
 .../admin/quota/_i18n/LocalStrings_de.properties |  1 +
 .../admin/quota/_i18n/LocalStrings_en.properties |  1 +
 .../org/olat/core/util/vfs/QuotaManager.java     |  6 +++---
 7 files changed, 29 insertions(+), 16 deletions(-)

diff --git a/src/main/java/org/olat/admin/quota/GenericQuotaEditController.java b/src/main/java/org/olat/admin/quota/GenericQuotaEditController.java
index 2de9bc1d351..6a5b002b2f8 100644
--- a/src/main/java/org/olat/admin/quota/GenericQuotaEditController.java
+++ b/src/main/java/org/olat/admin/quota/GenericQuotaEditController.java
@@ -121,8 +121,9 @@ public class GenericQuotaEditController extends BasicController {
 
 	private void initMyContent(UserRequest ureq) {
 		QuotaManager qm = QuotaManager.getInstance();
-		if (!qm.hasQuotaEditRights(ureq.getIdentity()))
+		if (!qm.hasQuotaEditRights(ureq.getIdentity())) {
 			throw new OLATSecurityException("Insufficient permissions to access QuotaController");
+		}
 
 		myContent = createVelocityContainer("edit");
 		myContent.contextPut("modalMode", Boolean.valueOf(modalMode));
@@ -130,7 +131,6 @@ public class GenericQuotaEditController extends BasicController {
 		delQuotaButton = LinkFactory.createButtonSmall("qf.del", myContent, this);
 		cancelButton = LinkFactory.createButtonSmall("cancel", myContent, this);
 		
-		//TODO loop over QuotaManager.getDefaultQuotaIdentifyers instead
 		myContent.contextPut("users",qm.getDefaultQuota(QuotaConstants.IDENTIFIER_DEFAULT_USERS));
 		myContent.contextPut("powerusers",qm.getDefaultQuota(QuotaConstants.IDENTIFIER_DEFAULT_POWER));
 		myContent.contextPut("groups",qm.getDefaultQuota(QuotaConstants.IDENTIFIER_DEFAULT_GROUPS));
diff --git a/src/main/java/org/olat/admin/quota/GenericQuotaViewController.java b/src/main/java/org/olat/admin/quota/GenericQuotaViewController.java
index 900fd214b77..22d7d4467ed 100644
--- a/src/main/java/org/olat/admin/quota/GenericQuotaViewController.java
+++ b/src/main/java/org/olat/admin/quota/GenericQuotaViewController.java
@@ -31,7 +31,6 @@ import org.olat.core.gui.components.velocity.VelocityContainer;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
-import org.olat.core.logging.OLATSecurityException;
 import org.olat.core.util.vfs.Quota;
 import org.olat.core.util.vfs.QuotaManager;
 
@@ -69,7 +68,7 @@ public class GenericQuotaViewController extends BasicController {
 		QuotaManager qm = QuotaManager.getInstance();
 		currentQuota = qm.getCustomQuota(relPath);
 		// init velocity context
-		initMyContent(ureq);
+		initMyContent();
 		if (currentQuota == null) {
 			currentQuota = qm.createQuota(relPath, null, null);		
 		} else {
@@ -78,16 +77,16 @@ public class GenericQuotaViewController extends BasicController {
 		myContent.contextPut("editQuota", Boolean.FALSE);	
 	  putInitialPanel(myContent);
 	}
+	
+	public void setNotEnoughPrivilegeMessage() {
+		myContent.contextPut("notEnoughPrivilege", Boolean.TRUE);
+	}
 
-	private void initMyContent(UserRequest ureq) {
+	private void initMyContent() {
 		QuotaManager qm = QuotaManager.getInstance();
-		if (!qm.hasQuotaEditRights(ureq.getIdentity()))
-			throw new OLATSecurityException("Insufficient permissions to access QuotaController");
-
 		myContent = createVelocityContainer("edit");
+		myContent.contextPut("notEnoughPrivilege", Boolean.FALSE);
 		myContent.contextPut("modalMode", Boolean.valueOf(modalMode));
-		
-		//TODO loop over QuotaManager.getDefaultQuotaIdentifyers instead
 		myContent.contextPut("users",qm.getDefaultQuota(QuotaConstants.IDENTIFIER_DEFAULT_USERS));
 		myContent.contextPut("powerusers",qm.getDefaultQuota(QuotaConstants.IDENTIFIER_DEFAULT_POWER));
 		myContent.contextPut("groups",qm.getDefaultQuota(QuotaConstants.IDENTIFIER_DEFAULT_GROUPS));
@@ -95,7 +94,6 @@ public class GenericQuotaViewController extends BasicController {
 		myContent.contextPut("coursefolder",qm.getDefaultQuota(QuotaConstants.IDENTIFIER_DEFAULT_COURSE));
 		myContent.contextPut("nodefolder",qm.getDefaultQuota(QuotaConstants.IDENTIFIER_DEFAULT_NODES));
 		myContent.contextPut("feeds",qm.getDefaultQuota(QuotaConstants.IDENTIFIER_DEFAULT_FEEDS));
-		
 	}
 	
 	private void initQuotaForm(UserRequest ureq, Quota quota) {
diff --git a/src/main/java/org/olat/admin/quota/QuotaManagerImpl.java b/src/main/java/org/olat/admin/quota/QuotaManagerImpl.java
index 4650ac70331..2a66746c7d1 100644
--- a/src/main/java/org/olat/admin/quota/QuotaManagerImpl.java
+++ b/src/main/java/org/olat/admin/quota/QuotaManagerImpl.java
@@ -43,6 +43,7 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.Identity;
 import org.olat.core.logging.OLATRuntimeException;
+import org.olat.core.logging.OLATSecurityException;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.resource.OresHelper;
@@ -400,13 +401,19 @@ public class QuotaManagerImpl extends QuotaManager {
 		return true;
 	}
 
-
 	/**
 	 * @see org.olat.core.util.vfs.QuotaManager#getQuotaEditorInstance(org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl, java.lang.String, boolean)
 	 */
 	@Override
 	public Controller getQuotaEditorInstance(UserRequest ureq, WindowControl wControl, String relPath, boolean modalMode) {
-		return new GenericQuotaEditController(ureq, wControl, relPath, modalMode);
+		try {
+			return new GenericQuotaEditController(ureq, wControl, relPath, modalMode);
+		} catch (OLATSecurityException e) {
+			log.warn("Try to access the quota editor without enough privilege", e);
+			GenericQuotaViewController viewCtrl = new GenericQuotaViewController(ureq, wControl, relPath, modalMode);
+			viewCtrl.setNotEnoughPrivilegeMessage();
+			return viewCtrl;
+		}
 	}
 	
 
diff --git a/src/main/java/org/olat/admin/quota/_content/edit.html b/src/main/java/org/olat/admin/quota/_content/edit.html
index 57c2df90834..75138ad7b6b 100644
--- a/src/main/java/org/olat/admin/quota/_content/edit.html
+++ b/src/main/java/org/olat/admin/quota/_content/edit.html
@@ -1,6 +1,9 @@
 #if($editQuota)
 	<fieldset class="clearfix">
 		<legend>$r.translate("qf.edit")</legend>
+		#if($r.isNotNull($notEnoughPrivilege) && $notEnoughPrivilege)
+		<div class="o_warning">$r.translate("warning.qd.not.enough.privilege")</div>
+		#end
 		#if(!$isEmptyQuota)
 		<div class="o_button_group o_button_group_right">$r.render("qf.del")</div>
 		#end
@@ -9,6 +12,9 @@
 #else
 	<fieldset class="clearfix">
 		<legend>$r.translate("qf.new")</legend>
+		#if($r.isNotNull($notEnoughPrivilege) && $notEnoughPrivilege)
+		<div class="o_warning">$r.translate("warning.qd.not.enough.privilege")</div>
+		#end
 		#if($r.available("qf.new"))
 			<div class="o_button_group o_button_group_right">$r.render("qf.new")</div>
 		#end
diff --git a/src/main/java/org/olat/admin/quota/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/admin/quota/_i18n/LocalStrings_de.properties
index 3cd0d744c7d..f369dc40ade 100644
--- a/src/main/java/org/olat/admin/quota/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/admin/quota/_i18n/LocalStrings_de.properties
@@ -25,3 +25,4 @@ qf.title=Quotaverwaltung
 table.header.limit=Upload Limite KB
 table.header.path=Pfad
 table.header.quota=Quota KB
+warning.qd.not.enough.privilege=Sie haben nicht die Berechtigungen Quota zu editieren.
diff --git a/src/main/java/org/olat/admin/quota/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/admin/quota/_i18n/LocalStrings_en.properties
index f4f0b75f0ec..a701d4ec531 100644
--- a/src/main/java/org/olat/admin/quota/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/admin/quota/_i18n/LocalStrings_en.properties
@@ -25,3 +25,4 @@ qf.title=Quota management
 table.header.limit=Upload limit KB
 table.header.path=Path
 table.header.quota=Quota KB
+warning.qd.not.enough.privilege=You don't have the privileges to edit quotas.
diff --git a/src/main/java/org/olat/core/util/vfs/QuotaManager.java b/src/main/java/org/olat/core/util/vfs/QuotaManager.java
index 59661c6bf72..f1a79eb6aaf 100644
--- a/src/main/java/org/olat/core/util/vfs/QuotaManager.java
+++ b/src/main/java/org/olat/core/util/vfs/QuotaManager.java
@@ -33,7 +33,6 @@ import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.Identity;
-import org.olat.core.manager.BasicManager;
 
 /**
  * Initial Date: Feb 17, 2004
@@ -45,7 +44,7 @@ import org.olat.core.manager.BasicManager;
  * <br>
  * Comment: Refactoring to core package make default quotas generic
  */
-public abstract class QuotaManager extends BasicManager{
+public abstract class QuotaManager {
 
 	protected static QuotaManager INSTANCE;
 
@@ -153,7 +152,8 @@ public abstract class QuotaManager extends BasicManager{
 	
 	/**
 	 * Factory method to create a controller that is capable of editing the
-	 * quota for the given path.
+	 * quota for the given path. If the user has not enough privileges to edit
+	 * the quota, it will only see the quota's view.
 	 * <p>
 	 * The controller must fire the following events:
 	 * <ul> 
-- 
GitLab