From 3eb1284cbab0f5ccb3742608a7e25bf5e14246ae Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 16 Jul 2014 09:40:55 +0200
Subject: [PATCH] OO-665: add a specific security callback for reflexion to be
 more precise

---
 .../flexible/impl/_content/form_vertical.html | 31 ++++++++++++-------
 .../olat/portfolio/EPSecurityCallback.java    |  2 ++
 .../portfolio/EPSecurityCallbackFactory.java  | 14 ++++++---
 .../portfolio/EPSecurityCallbackImpl.java     | 12 +++++--
 .../portfolio/EPSecurityCallbackOwner.java    |  5 +++
 .../edit/EPReflexionWrapperController.java    | 11 +++----
 .../EPArtefactViewOptionsLinkController.java  |  4 +--
 .../EPMultipleArtefactsAsTableController.java |  2 +-
 .../ui/structel/_content/mapview.html         |  2 +-
 9 files changed, 54 insertions(+), 29 deletions(-)

diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/_content/form_vertical.html b/src/main/java/org/olat/core/gui/components/form/flexible/impl/_content/form_vertical.html
index 2e0b27339c3..4f3c396e1dd 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/_content/form_vertical.html
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/_content/form_vertical.html
@@ -1,15 +1,24 @@
 <fieldset #if(!$!f.domReplacementWrapperRequired) id="$r.getCId()" #end class="o_form form #if ($off_css_class) $off_css_class #end $f.getContainerCssClass()" role="form">
-#if ($off_title || $off_chelp_package) 
-	<legend>
-	#if ($off_chelp_package) 
-		$r.contextHelpWithWrapper("$off_chelp_package","$off_chelp_page","$off_chelp_hover") 
-	#end
-	#if ($off_icon)
-		<i class="$off_icon"> </i>
-	#end
-	$!off_title
-</legend> 
-#end 
+#if ($off_title && $off_chelp_package) 
+	<legend>		
+		#if ($off_chelp_package) 
+			$r.contextHelpWithWrapper("$off_chelp_package","$off_chelp_page","$off_chelp_hover") 
+		#end
+		#if ($off_icon)
+			<i class="$off_icon"> </i>
+		#end
+		$!off_title
+	</legend> 
+#elseif ($off_title) 
+	<legend>	
+		#if ($off_icon)
+			<i class="$off_icon"> </i>
+		#end
+		$!off_title
+	</legend> 
+#elseif ($off_chelp_package) 
+	<div class="clearfix">$r.contextHelpWithWrapper("$off_chelp_package","$off_chelp_page","$off_chelp_hover")</div>
+#end
 
 #if ($off_desc) <div class="o_desc">$off_desc</div> #end
 #if ($off_warn) <div class="o_warning">$off_warn</div> #end
diff --git a/src/main/java/org/olat/portfolio/EPSecurityCallback.java b/src/main/java/org/olat/portfolio/EPSecurityCallback.java
index 9b2e2ac9594..1de04d4562a 100644
--- a/src/main/java/org/olat/portfolio/EPSecurityCallback.java
+++ b/src/main/java/org/olat/portfolio/EPSecurityCallback.java
@@ -37,6 +37,8 @@ public interface EPSecurityCallback {
 	
 	public boolean canEditStructure();
 	
+	public boolean canEditReflexion();
+	
 	public boolean canShareMap();
 	
 	public boolean canAddArtefact();
diff --git a/src/main/java/org/olat/portfolio/EPSecurityCallbackFactory.java b/src/main/java/org/olat/portfolio/EPSecurityCallbackFactory.java
index 7fbd350a2fe..889ce46bfe7 100644
--- a/src/main/java/org/olat/portfolio/EPSecurityCallbackFactory.java
+++ b/src/main/java/org/olat/portfolio/EPSecurityCallbackFactory.java
@@ -57,11 +57,12 @@ public class EPSecurityCallbackFactory {
 	
 	public static boolean isLockNeeded(EPSecurityCallback secCallback) {
 		return secCallback.canAddArtefact() || secCallback.canAddPage() || secCallback.canAddStructure()
-			|| secCallback.canEditStructure();
+			|| secCallback.canEditStructure() || secCallback.canEditReflexion();
 	}
 	
 	public static EPSecurityCallback updateAfterFailedLock(EPSecurityCallback secCallback) {
 		boolean canEditStructure = false;
+		boolean canEditReflexion = false;
 		boolean canShare = secCallback.canShareMap();
 		boolean canAddArtefact = false;
 		boolean canRemoveArtefactFromStruct = false;
@@ -73,7 +74,7 @@ public class EPSecurityCallbackFactory {
 		boolean restrictionsEnabled = secCallback.isRestrictionsEnabled();
 		boolean isOwner = secCallback.isOwner();
 
-		return new EPSecurityCallbackImpl(canEditStructure, canShare, canAddArtefact, canRemoveArtefactFromStruct, canAddStructure, canAddPage,
+		return new EPSecurityCallbackImpl(canEditStructure, canEditReflexion, canShare, canAddArtefact, canRemoveArtefactFromStruct, canAddStructure, canAddPage,
 				canView, canCommentAndRate, canSubmitAssess, restrictionsEnabled, isOwner);
 	}
 	
@@ -89,6 +90,7 @@ public class EPSecurityCallbackFactory {
 		boolean isVisible = ePFMgr.isMapVisible(ureq.getIdentity(), map.getOlatResource());
 		
 		boolean canEditStructure = isOwner;
+		boolean canEditReflexion = isOwner;
 		boolean canShare = isOwner;
 		boolean canAddArtefact = isOwner;
 		boolean canRemoveArtefactFromStruct = isOwner;
@@ -99,7 +101,7 @@ public class EPSecurityCallbackFactory {
 		boolean canSubmitAssess = false;
 		boolean restrictionsEnabled = false;
 		
-		return new EPSecurityCallbackImpl(canEditStructure, canShare, canAddArtefact, canRemoveArtefactFromStruct, canAddStructure, canAddPage,
+		return new EPSecurityCallbackImpl(canEditStructure, canEditReflexion, canShare, canAddArtefact, canRemoveArtefactFromStruct, canAddStructure, canAddPage,
 				canView, canCommentAndRate, canSubmitAssess, restrictionsEnabled, isOwner);
 	}
 	
@@ -117,6 +119,7 @@ public class EPSecurityCallbackFactory {
 		boolean open = !StructureStatusEnum.CLOSED.equals(map.getStatus());
 		
 		boolean canEditStructure = false;
+		boolean canEditReflexion = isOwner && open;
 		boolean canShare = (isOwner || isCoach);
 		boolean canAddArtefact = isOwner && open;
 		boolean canRemoveArtefactFromStruct = isOwner && open;
@@ -127,7 +130,7 @@ public class EPSecurityCallbackFactory {
 		boolean canSubmitAssess = isOwner;
 		boolean restrictionsEnabled = true;
 		
-		return new EPSecurityCallbackImpl(canEditStructure, canShare, canAddArtefact, canRemoveArtefactFromStruct, canAddStructure, canAddPage,
+		return new EPSecurityCallbackImpl(canEditStructure, canEditReflexion, canShare, canAddArtefact, canRemoveArtefactFromStruct, canAddStructure, canAddPage,
 				canView, canCommentAndRate, canSubmitAssess, restrictionsEnabled, isOwner);
 	}
 	
@@ -151,6 +154,7 @@ public class EPSecurityCallbackFactory {
 		boolean open = !StructureStatusEnum.CLOSED.equals(map.getStatus());
 		
 		boolean canEditStructure = (isOwner || isAdmin) && open;
+		boolean canEditReflexion = (isOwner) && open;
 		boolean canShare = false;
 		boolean canAddArtefact = false; // (isOwner || isAdmin) && open;
 		boolean canRemoveArtefactFromStruct = (isOwner || isAdmin) && open;
@@ -161,7 +165,7 @@ public class EPSecurityCallbackFactory {
 		boolean canSubmitAssess = false;
 		boolean restrictionsEnabled = true;//for author
 
-		return new EPSecurityCallbackImpl(canEditStructure, canShare, canAddArtefact, canRemoveArtefactFromStruct, canAddStructure, canAddPage,
+		return new EPSecurityCallbackImpl(canEditStructure, canEditReflexion, canShare, canAddArtefact, canRemoveArtefactFromStruct, canAddStructure, canAddPage,
 				canView, canCommentAndRate, canSubmitAssess, restrictionsEnabled, isOwner);
 	}
 }
diff --git a/src/main/java/org/olat/portfolio/EPSecurityCallbackImpl.java b/src/main/java/org/olat/portfolio/EPSecurityCallbackImpl.java
index ad74cd0fac9..a082358d145 100644
--- a/src/main/java/org/olat/portfolio/EPSecurityCallbackImpl.java
+++ b/src/main/java/org/olat/portfolio/EPSecurityCallbackImpl.java
@@ -32,6 +32,7 @@ package org.olat.portfolio;
 public class EPSecurityCallbackImpl implements EPSecurityCallback {
 	
 	private final boolean canEditStructure;
+	private final boolean canEditReflexion;
 	private final boolean canShare;
 	private final boolean canAddArtefact;
 	private final boolean canRemoveArtefactFromStruct;
@@ -45,6 +46,7 @@ public class EPSecurityCallbackImpl implements EPSecurityCallback {
 	
 	public EPSecurityCallbackImpl(boolean canEdit, boolean canView) {
 		this.canEditStructure = canEdit;
+		this.canEditReflexion = canEdit;
 		this.canShare = canEdit;
 		this.canAddArtefact = canEdit;
 		this.canRemoveArtefactFromStruct = canEdit;
@@ -57,9 +59,10 @@ public class EPSecurityCallbackImpl implements EPSecurityCallback {
 		this.isOwner = false;//TODO
 	}
 	
-	protected EPSecurityCallbackImpl(boolean canEditStructure, boolean canShare, boolean canAddArtefact, boolean canRemoveArtefactFromStruct, boolean canAddStructure, boolean canAddPage,
+	protected EPSecurityCallbackImpl(boolean canEditStructure, boolean canEditReflexion, boolean canShare, boolean canAddArtefact, boolean canRemoveArtefactFromStruct, boolean canAddStructure, boolean canAddPage,
 			boolean canView, boolean canCommentAndRate, boolean canSubmitAssess, boolean restrictionsEnabled, boolean isOwner) {
 		this.canEditStructure = canEditStructure;
+		this.canEditReflexion = canEditReflexion;
 		this.canShare = canShare;
 		this.canAddArtefact = canAddArtefact;
 		this.canRemoveArtefactFromStruct = canRemoveArtefactFromStruct;
@@ -88,7 +91,12 @@ public class EPSecurityCallbackImpl implements EPSecurityCallback {
 	public boolean canEditStructure() {
 		return canEditStructure;
 	}
-	
+
+	@Override
+	public boolean canEditReflexion() {
+		return canEditReflexion;
+	}
+
 	@Override
 	public boolean canShareMap() {
 		return canShare;
diff --git a/src/main/java/org/olat/portfolio/EPSecurityCallbackOwner.java b/src/main/java/org/olat/portfolio/EPSecurityCallbackOwner.java
index bf4357b8fd2..c04eef21a7a 100644
--- a/src/main/java/org/olat/portfolio/EPSecurityCallbackOwner.java
+++ b/src/main/java/org/olat/portfolio/EPSecurityCallbackOwner.java
@@ -60,6 +60,11 @@ public class EPSecurityCallbackOwner implements EPSecurityCallback {
 		return canEdit();
 	}
 	
+	@Override
+	public boolean canEditReflexion() {
+		return canEdit();
+	}
+
 	@Override
 	public boolean canShareMap() {
 		return canEdit();
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/edit/EPReflexionWrapperController.java b/src/main/java/org/olat/portfolio/ui/artefacts/edit/EPReflexionWrapperController.java
index 07f95b36e4a..2fcffd2ab49 100644
--- a/src/main/java/org/olat/portfolio/ui/artefacts/edit/EPReflexionWrapperController.java
+++ b/src/main/java/org/olat/portfolio/ui/artefacts/edit/EPReflexionWrapperController.java
@@ -19,7 +19,6 @@
  */
 package org.olat.portfolio.ui.artefacts.edit;
 
-import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.control.Controller;
@@ -28,7 +27,6 @@ import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
 import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
-import org.olat.core.gui.translator.Translator;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
 import org.olat.portfolio.EPSecurityCallback;
@@ -42,6 +40,7 @@ import org.olat.portfolio.ui.artefacts.collect.EPReflexionChangeEvent;
 import org.olat.portfolio.ui.artefacts.view.EPArtefactViewController;
 import org.olat.portfolio.ui.artefacts.view.EPReflexionViewController;
 import org.olat.portfolio.ui.structel.EPStructureChangeEvent;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * Description:<br>
@@ -53,7 +52,7 @@ import org.olat.portfolio.ui.structel.EPStructureChangeEvent;
  * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
  */
 public class EPReflexionWrapperController extends BasicController {
-
+	@Autowired
 	private EPFrontendManager ePFMgr;
 	private Controller reflexionCtrl;
 	private boolean mapClosed;
@@ -65,7 +64,6 @@ public class EPReflexionWrapperController extends BasicController {
 	public EPReflexionWrapperController(UserRequest ureq, WindowControl wControl, EPSecurityCallback secCallback, AbstractArtefact artefact,
 			PortfolioStructure struct) {
 		super(ureq, wControl);
-		ePFMgr = (EPFrontendManager) CoreSpringFactory.getBean("epFrontendManager");
 		if (struct != null && struct.getRoot() instanceof PortfolioStructureMap) {
 			mapClosed = StructureStatusEnum.CLOSED.equals(((PortfolioStructureMap) struct.getRoot()).getStatus());
 		} else {
@@ -74,8 +72,7 @@ public class EPReflexionWrapperController extends BasicController {
 		this.secCallback = secCallback;
 		this.artefact = artefact;
 		this.struct = struct;
-		Translator pt = Util.createPackageTranslator(EPArtefactViewController.class, ureq.getLocale(), getTranslator());
-		setTranslator(pt);
+		setTranslator(Util.createPackageTranslator(EPArtefactViewController.class, ureq.getLocale(), getTranslator()));
 
 		init(ureq);
 	}
@@ -84,7 +81,7 @@ public class EPReflexionWrapperController extends BasicController {
 		removeAsListenerAndDispose(reflexionCtrl);
 		String title = "";
 		boolean artClosed = ePFMgr.isArtefactClosed(artefact);
-		if (mapClosed || !secCallback.canEditStructure() || (artClosed && struct == null)) {
+		if (mapClosed || !secCallback.canEditReflexion() || (artClosed && struct == null)) {
 			// reflexion cannot be edited, view only!
 			reflexionCtrl = new EPReflexionViewController(ureq, getWindowControl(), artefact, struct);
 		} else {
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewOptionsLinkController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewOptionsLinkController.java
index 55a3251a3cf..7af264a341d 100644
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewOptionsLinkController.java
+++ b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewOptionsLinkController.java
@@ -31,11 +31,11 @@ import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
 import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
 import org.olat.portfolio.EPSecurityCallback;
-import org.olat.portfolio.EPUIFactory;
 import org.olat.portfolio.manager.EPFrontendManager;
 import org.olat.portfolio.model.artefacts.AbstractArtefact;
 import org.olat.portfolio.model.structel.PortfolioStructure;
 import org.olat.portfolio.ui.artefacts.collect.EPCollectStepForm04;
+import org.olat.portfolio.ui.artefacts.edit.EPReflexionWrapperController;
 import org.olat.portfolio.ui.structel.EPStructureChangeEvent;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -104,7 +104,7 @@ public class EPArtefactViewOptionsLinkController extends BasicController {
 			showMoveTree(ureq);
 		} else if (source == reflexionLink) {
 			closeArtefactOptionsCallout();
-			reflexionCtrl = EPUIFactory.getReflexionPopup(ureq, getWindowControl(), secCallback, artefact, struct);
+			reflexionCtrl = new EPReflexionWrapperController(ureq, getWindowControl(), secCallback, artefact, struct);
 			listenTo(reflexionCtrl);
 		}
 	}
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java
index 9a1de35fb30..7366ddb4033 100644
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java
+++ b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPMultipleArtefactsAsTableController.java
@@ -159,7 +159,7 @@ public class EPMultipleArtefactsAsTableController extends BasicController implem
 		StaticColumnDescriptor staticDescr;
 		
 		if(!artefactChooseMode) {
-			if(mapClosed || !secCallback.canEditStructure()) { // change link-description in row, when map is closed or viewed by another person
+			if(mapClosed || !secCallback.canEditReflexion()) { // change link-description in row, when map is closed or viewed by another person
 				staticDescr = new StaticColumnDescriptor(CMD_REFLEXION, "table.header.reflexion", translate("table.header.view"));
 			} else {
 				staticDescr = new StaticColumnDescriptor(CMD_REFLEXION, "table.header.reflexion", translate("table.row.reflexion"));
diff --git a/src/main/java/org/olat/portfolio/ui/structel/_content/mapview.html b/src/main/java/org/olat/portfolio/ui/structel/_content/mapview.html
index 59b86c055b1..3b5cbe28809 100644
--- a/src/main/java/org/olat/portfolio/ui/structel/_content/mapview.html
+++ b/src/main/java/org/olat/portfolio/ui/structel/_content/mapview.html
@@ -26,7 +26,7 @@
 				<div class="o_struct_submit_assess_btn">$r.render("map.submit.assess")</div>
 			#end
 			#if($closed) 
-				<div class="o_artefact_closed"><span title=" $r.translate("map.is.closed.hint") ">&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
+				<div><i class="o_icon o_artefact_closed" title=" $r.translate("map.is.closed.hint") "> </i></div>
 			#end
 		</div>
 		<h1>$r.escapeHtml($map.title)</h1>
-- 
GitLab